Outils pour utilisateurs

Outils du site


issue91:labo_linux_1

Table des matières

1

In the last part of our series on compiling the Linux kernel for Ubuntu, we - finally! - managed to configure a new kernel. We compiled the kernel itself, as well as the accompanying modules. Finally, we installed all this in the appropriate directories - /lib and /boot - built a new initrd compressed file system, and modified the GRUB configuration to allow us to boot the new kernel.

In this fourth installment of the series, we will be looking into how to make some changes and apply simple tweaks to our kernel, and how they affect system performance. To take a simple example as our guideline, we will be working on a kernel for the original Asus eeePC model 701 from back in 2007. Seven years already – but we can put some new life into this very early predecessor of the netbook fad.

Naturally enough, we will not be doing the compiling on the eeePC itself – since it would take quite a long time to complete. Besides which, due to hard drive size constraints, we would have to import the source and do the compiling on an external drive connected through USB, also incurring a severe speed drop. Instead of this, we will be compiling the kernel on another, more capable, computer, and then transferring the kernel and modules over to the eeePC when finished.

Dans la dernière partie de cette série consacrée à la compilation du noyau Linux sur Ubuntu, nous sommes arrivés - enfin ! - à configurer un nouveau noyau. Nous avons compilé le noyau ainsi que les modules l'accompagnant. Enfin, nous avons installé tout ceci dans les répertoires appropriés - /lib et /boot - construit un nouveau système de fichiers compressé initrd, et modifié la configuration de GRUB pour nous permettre de démarrer le nouveau noyau.

Dans ce quatrième épisode de la série, nous découvrirons comment effectuer quelques changements et appliquer des ajustements simples à notre noyau, et comment ils affectent les performances du système. Pour prendre un exemple simple comme ligne directrice, nous travaillerons sur un noyau optimisé pour un Asus eeePC modèle 701 de 2007. Déjà sept ans !- mais nous pouvons faire revivre ce précurseur de la mode des ordinateurs ultraportables.

Naturellement, nous n'effectuerons pas la compilation sur l'eeePc directement - le faire entièrement prendrait très longtemps. Nous aurions en outre, en raison des contraintes de capacité du disque dur, besoin d'importer la source et d'effectuer la compilation sur un disque dur externe connecté en USB, ce qui se traduirait également par une sévère perte de vitesse. Au lieu de cela, nous compilerons le noyau sur un autre ordinateur plus puissant, puis nous transférerons le noyau et les modules sur l'eeePC une fois la compilation terminée.

2

GETTING TO KNOW THE TARGET COMPUTER

The 701 model target computer is one of the first series. As such, it came with a very basic configuration that could handle Microsoft's Windows XP, or a bespoke variant of the Xandros GNU/Linux distribution. Before breaking out the compiler and actually doing things at the keyboard, let's take some time to see what exactly the eeePC has under the hood.

Even without cracking it open – which is not recommended – it is a tad complicated to open up, and even worse to put back together again with all the screws in the correct holes! – we can obtain quite a lot of information on the Internet. Some reviews of the time are still available, such as Notebook Review's of the 4GByte model “Asus Eee PC 4G Review” (http://www.notebookreview.com/notebookreview/asus-eee-pc-4g-review/ ), or Marc Spoonauer's “Asus Eee PC 701 Review” for Laptop Guide (http://www.laptopmag.com/review/laptops/asus-eee-pc-701.aspx ). The Ubuntu users' world is also well cared for by help articles on the community wiki (https://help.ubuntu.com/community/EeePC ).

À PROPOS DE L'ORDINATEUR CIBLE

Le modèle 701 fait partie d'une des premières séries. À cet effet, il possède une configuration très basique prévue pour faire tourner Windows XP, ou une variante sur mesure de la distribution GNU/Linux Xandros. Avant de sortir le compilateur et de mettre les mains dans le cambouis, prenons le temps d'étudier ce que l'eeePC a sous le capot.

Même sans l'ouvrir - ce qui n'est pas recommandé, c'est un peu compliqué de l'ouvrir, et encore plus de le ré-assembler avec toutes les vis dans les bons trous ! - nous pouvons obtenir assez d'informations sur Internet. Quelques critiques d'époque sont encore disponibles, telle cette critique du modèle 4 Gio « Asus Eee PC 4G Review » (http://www.notebookreview.com/notebookreview/asus-eee-pc-4g-review/), ou la critique de Marc Spoonauer « Asus Eee PC 701 Review » pour le magazine Laptop Guide (http://www.laptopmag.com/review/laptops/asus-eee-pc-701.aspx). Le wiki de la communauté des utilisateurs d'Ubuntu foisonne également d'articles de documentation (http://doc.ubuntu-fr.org/asus_eee_pc.) Attention au scribeur : le lien est vers la doc française et donc différent de celui dans les sources anglaises.

3

Finally, if you have problems getting a recent version of Ubuntu on it and running, my piece called “Install 12.10 onto an EEE PC” in FCM#68 (http://fullcirclemagazine.org/issue-68/) is still fairly current, and should get you going even with a more recent version of your favorite distribution. For example, Linux Mint 17 runs quite well off the SD Card.

The specifications of the original model are as follows: Intel Celeron M 900 MHz processor, 512 MBytes of RAM, 2 or 4 GByte SSD hard disk, 800×480 resolution 7 inch screen, and no optical drive.

Some points need to be made, however. The CPU is actually an under-clocked (at 667 MHz) derivative of the Pentium-III. /proc/cpuinfo reports 630 MHz, no doubt to reduce overheating and extend battery life. /proc/cpuinfo also reports the presence of the PAE extension in the processor on my model, though other users (e.g. our esteemed editor, Ronnie) have reported otherwise. Perhaps slightly different batches of the Mobile Celeron-III were sourced during production.

Enfin, si vous rencontrez des difficultés pour y installer et faire fonctionner une version récente d'Ubuntu, mon billet « Installer 12.10 sur un EEE PC » publié dans le numéro 68 de Full Circle Magazine (http://www.fullcirclemag.fr/visionneuse/visionner.php?numero=issue68fr) est encore d'actualité, et devrait vous permettre de démarrer avec une version plus récente de votre distribution favorite. Par exemple, Linux Mint 17 fonctionne plutôt bien sur une carte SD.

Les caractéristiques du modèle original sont les suivantes : processeur Intel Celeron M 900 MHz, 512 Mio de RAM, SSD de 2 ou 4 Gio, écran 7 pouces pour une résolution de 800×480 et aucun lecteur optique.

Quelques points sont à préciser cependant. Le CPU est en fait un dérivé sous-fréquencé (à 667 MHz) du Pentium-III. La commande /proc/cpuinfo indique 630 MHz, sûrement afin de réduire les excès de température et d'augmenter l'autonomie de la batterie. La même commande nous informe également de la présence de l'extension PAE sur le processeur de mon modèle, toutefois ce n'est pas le cas chez d'autres utilisateurs (comme notre cher éditeur, Ronnie). Peut-être des séries légèrement différentes ont-elles été réalisées pendant la production.

4

RAM is of the DDR-2 type, clocked at 666MHz. There is space for two RAM slots under the motherboards, though only one of them actually has a slot soldered in. The 512 MByte original RAM can easily be replaced with a 1 GByte PC2-5300 part of the same type, should you have one available.

The hard drive is an SSD model. However, the bus connection with the motherboard is actually a PCI Express module, also soldered in. This means the original hard drive has little chance of getting replaced with something more current. However, the USB 2.0 ports work well with external drives, and the BIOS is quite happy booting either off a USB drive, or off the integrated SD Card reader. An 8 GByte SD memory card makes a fairly cost-effective hard disk replacement that doubles the original capacity, which, with modern versions of GNU/Linux's needs, is no luxury. However, if you do go down this path, please do try to use a class-10 device; inferior cards have slow write rates and will cause your system to slow down noticeably.

La RAM est de type DDR-2, cadencée à 666 MHz. Il y a la place pour deux slots de RAM sous la carte mère, bien qu'une seule soit fournie. La barrette de 512 Mio de RAM d'origine peut facilement être remplacée par une barrette PC2-5300 1 Gio de même type, si vous en avez une à disposition.

Le disque dur est un modèle SSD. Cependant, le bus de connexion avec la carte de mère est un module PCI Express, qui plus est soudé en place. Cela signifie que le disque dur d'origine a très peu de chances d'être remplacé par un plus récent. Néanmoins, les ports USB 2.0 fonctionnent très bien avec des périphériques extérieurs et le BIOS est très heureux de pouvoir démarrer soit depuis un support USB, soit depuis le lecteur de carte SD intégré. Une carte mémoire SD de 8 Gio se présente comme une alternative au disque dur à un bon rapport qualité-prix, doublant la capacité d'origine ce qui, au vu des besoins des versions nouvelles de GNU/Linux, n'est pas du luxe. Si toutefois vous vous y risquez, utilisez une carte de classe 10 si possible ; les classes inférieures présentent des vitesses d'écritures basses et ralentiront sensiblement votre système.

5

Boot-up times with Xubuntu 14.04, or the Linux Mint 17 Mate desktop edition, may be called “leisurely” at best. Once running, a glance at Mate's system monitor gives us some more information and shows us where some tweaking can take place.

It is clear memory is not much of an issue, with just 252 MBytes in use when the full Mate desktop is running. Since we shall probably not be doing any heavy lifting with this processor and drive (video editing, someone?), the original 512 MByte memory should suffice. 1 GByte, as in this model, is probably overkill.

On the other hand, the processor has the rare characteristic of exhibiting just one core. No dual- or quad-core processor in this one, then. No hyper-threading with virtual cores either. So, if we run into a performance bottleneck, it will probably be here with the CPU. Seeing CPU use go up to 100% during what was effectively some very light web browsing confirms this idea.

Les temps de démarrage avec Xubuntu 14.04, ou Linux Mint 17 Mate Edition, peuvent être appelés « tranquilles » au mieux. Une fois démarré, un coup d’œil au moniteur système de Mate nous donne de plus amples informations et nous indique où pourrait être effectués quelques ajustements.

Il est clair que la quantité de mémoire n'est pas un problème, avec seulement 252 Mio utilisés quand l'environnement de bureau entier est en fonctionnement. Étant donné que nous ne devrions probablement pas demander de gros efforts au processeur (tenté par le montage vidéo ?), les 512 Mio de mémoire d'origine devraient suffire. 1 Gio, comme sur ce modèle, est probablement exagéré.

D'un autre côté, le processeur possède la rare caractéristique de ne présenter qu'un seul cœur. Pas de processeur à double ou quadri-cœur ici. Pas non plus d'hyper-threading avec des cœurs virtuels. Donc, si nous arrivons devant un obstacle niveau performances, ce sera probablement à cause du CPU. Voir le pourcentage d'utilisation du CPU monter à 100 % pendant ce qui n'était qu'une simple navigation sur le Web confirme cette idée.

6

CONFIGURING A SPECIAL-PURPOSE KERNEL

We are compiling a kernel for a specific hardware platform, so we are no longer under the constraints that a distribution has to contend with, i.e. handling a maximum number of different hardware setups. This is why our approach can be a tad more radical. On the one hand, we will gut the kernel completely, stripping out whatever we know will not be needed on the target system. On the other, we will make sure we put in any features that can help get the most out of the slightly punny chips inside.

Before starting, let us remind ourselves to compile this 32-bit kernel from within a 32-bit operating system, as noted in the previous part of this series. Although cross-compiling the kernel from a 64-bit platform should work, it actually does not on the Ubuntu 14.04 64-bit version with the 3.13.11.2 version kernel source – the resulting kernel will compile, but will fail to execute on the target machine. This being said, there would be no problem with installing a 32-bit version of Ubuntu on the compile machine (e.g. in a separate partition from the main operating system), even though it contains a more modern 64-bit processor.

CONFIGURER UN NOYAU À USAGE SPÉCIFIQUE

Nous compilons un noyau pour une plateforme matérielle spécifique, donc nous ne sommes plus sous les contraintes auxquelles une distribution doit faire face, c'est-à-dire gérer un maximum de configurations matérielles différentes. C'est pourquoi notre approche peut être un peu plus radicale. D'une part, nous viderons complètement le noyau, supprimant tout ce qui ne sera pas nécessaire sur le système cible. D'autre part, nous ferons en sorte d'intégrer chaque fonctionnalité pouvant aider à tirer le maximum du système et de ses puces quelque peu chétifs.

Avant de commencer, rappelons-nous qu'il faut compiler ce noyau 32-bit à partir d'un système d'exploitation 32-bit, comme il est précisé dans la partie précédente de cette série. Bien que compiler le noyau depuis une plateforme 64-bit devrait fonctionner, ce n'est pas le cas de la version 64-bit d'Ubuntu 14.04 avec la source du noyau 3.13.11.2 - le noyau correspondant sera compilé, mais ne s'exécutera pas sur la machine cible. Cela étant dit, il n'y aurait pas de problème en installant une version d'Ubuntu 32-bit sur la machine de compilation (par exemple sur une partition autre que celle du système d'exploitation principal), même si elle est pourvue d'un processeur 64-bit plus moderne.

7

We want to make sure we don't have any little bits of configuration cruft lying around from previous projects, so we issue:

$ make mrproper

Now, let's get into any of the configuration scripts. I will be using a “make menuconfig”, but, as seen in the previous part of this series, any other configuration script will offer us the same options.

We will start at the top of the main menu, and go progressively down the list. To start out, we need to uncheck the “64-bit kernel” option, since the Pentium-III and this particular Celeron are 32-bit only. This will unlock more 32-bit options further down.

In sub-menu “General setup”, we will not need the “Cross compiler”, “Compile also drivers which will not load”, or “Local version”. As for “Kernel compression mode”, this refers to the vmlinuz file compression. It defaults to “Gzip” instead of the more common “Bzip”, which is fine for us since Bzip compressed data a bit more, and so saves some disk space. But it also needs substantially more processing to decompress – and CPU power is what we are lacking on the target. So “Gzip” it is.

Nous voulons nous assurer qu'il n'y ait plus aucune arborescence de configuration de projets précédents laissée à l'abandon :

$ make mrproper

Maintenant, intéressons-nous à n'importe lequel des scripts de configuration. J'utiliserai la commande « make menuconfig », mais, comme indiqué dans l'épisode précédent de cette série, n'importe quel autre script de configuration nous offrira les mêmes options.

Nous débuterons par le haut du menu, et continuerons progressivement vers le bas de la liste. Pour commencer, nous avons besoin de décocher l'option « 64-bit kernel », étant donné que le Pentium-III et en particulier ce Celeron ont une architecture 32-bit. Cela aura pour effet de rajouter plus d'options pour les architectures 32-bit au fil de la configuration.

Concernant le sous-menu « General Setup », nous n'aurons pas besoin de cocher les options « Cross compiler », « Compile also drivers which will not load », ou « Local version ». Comme pour le menu « Kernel compression mode », cela correspond à la compression du fichier vmlinuz. Gzip est utilisé par défaut à la place du plus commun Bzip, ce qui est mieux pour nous, vu que Bzip compresse un peu plus les données, et libère un peu d'espace disque. Mais il nécessite cependant un plus gros travail du processeur pour décompresser - et la puissance du CPU est ce qui nous fait défaut ici. Ainsi choisirons-nous Gzip.

8

We will also configure the “Arbitrary version signature”, putting something significant in its place. Most of the other options in this sub-menu may be left as they are: if at all unsure about a feature, leave it in since parts of the operating system may need it.

I will be deactivating “Support for paging of anonymous memory” a.k.a “swap”, since I have 1 GByte of RAM – and don't like to use swap anyways. Owners of 512 MByte models would probably do better to leave swap activated.

Lower down, we can configure the initrd file, which we will set up to use only gzip, for the same reason we left vmlinuz as a gzip file.

Going back up to the main menu, leave “Enable loadable module support” activated. Although it is theoretically possible to have the complete kernel and all the modules necessary built-in inside a single vmlinuz file, this would also mean all drivers would be loaded into memory on boot. This is surely a waste of memory, unless we know very precisely which modules we will need.

Nous configurerons également l'option « Arbitrary version signature », et mettrons quelque chose de plus parlant. La plupart des autres options de ce sous-menu peuvent être laissées en l'état ; si vous n'êtes pas sûr d'une fonctionnalité, laissez-la au cas où le système d'exploitation en ait besoin.

Je désactiverai l'option « Support for paging of anonymous memory », autrement dit la « swap », étant donné que j'ai 1 Gio de RAM - et que je n'aime pas utiliser la swap de toute façon. Si vous possédez un modèle doté de 512 mio, vous feriez probablement mieux de laisser la swap activée.

Plus bas, nous pouvons configurer le fichier initrd pour utiliser seulement gzip ; pour la même raison, nous avons laissé vmlinuz comme un fichier gzip.

De retour sur le menu principal, laissez l'option « Enable loadable module support » activée. Bien qu'il soit théoriquement possible d'avoir le noyau complet ainsi que tous les modules nécessaires intégrés dans un seul fichier vmlinuz, cela signifierait aussi que tous les pilotes seraient chargés dans la mémoire au démarrage. C'est assurément un gaspillage de mémoire, à moins que nous ne connaissions précisément de quels modules nous aurons besoin.

9

We can also leave “Enable the block layer” on, since it is needed to access block devices, such as hard drives. Now, on to “Processor type and features”. This is where we can do some specific tuning. Contrary to popular wisdom, we will turn off “Symmetric multi-processing support”. This is because we are in a very rare case nowadays, in targeting a processor with no multi-core or virtual cores. So out it goes. We will also turn off “Support for extended (non-PC) x86 platforms”, since the eeePC has a rather typical PC architecture. We will not need the “Intel Low Power Subsystem Support” since we do not have the hardware, nor “Linux guest support” since this kernel is targeted at a physical computer and not a virtual machine. “Memtest” can also go.

We are arriving at the “Processor family” option. Select “Pentium-III/Celeron(Coppermine)”. This way, we get support for the full range of the Pentium-III instruction set, which we would not by using the default kernel from the distribution. Distribution packagers tend to leave this option at “Pentium-MMX”, which is fine since it will work on anything from a Pentium-I 166 or 200 MHz onwards. On a Pentium-III, however, some features that are available in the hardware would not be accessible. If it's there and available to us, let's use it: we need all the power available.

Nous pouvons également laisser l'option « Enable the block layer » activée, puisqu'elle est requise pour accéder à des périphériques de bloc, tels des disques durs.

Passons maintenant au sous-menu « Processor type and features ». C'est ici que nous ferons quelques réglages spécifiques. Contrairement à la sagesse populaire, nous désactiverons l'option « Symmetric multi-processing support ». Nous faisons cela car, en ciblant un processeur sans multi-cœurs ou cœurs virtuels, nous nous trouvons face à un cas très rare aujourd'hui. Pas besoin de ça, donc. Nous désactiverons également l'option « Support for extended (non-PC) x86 platform », puisque le eeePC a une architecture PC plutôt typique. Nous n'aurons pas besoin de l'option « Intel Low Power Subsystem Support » vu que nous n'avons pas le matériel concerné, ni de l'option « Linux guest support » vu que ce noyau est destiné à un ordinateur physique, pas une machine virtuelle. De même pour l'option « Memtest ».

Nous arrivons à l'option « Processor family ». Sélectionnez le « Pentium-III/Celeron(Coppermine) ». De cette façon, nous obtenons le support de la série complète du jeu d'instructions Pentium-III, ce que nous n'obtiendrions pas en utilisant le noyau par défaut de la distribution. Les mainteneurs du paquet pour cette distribution ont tendance à laisser cette option sur « Pentium-MMX », qui est très bien puisque cela fonctionnera sur n'importe quoi à partir d'un Pentium-I 166 ou 200 MHz. Sur un Pentium-III, cependant, certaines fonctionnalités disponibles dans le matériel ne seront pas accessibles. Si ces fonctionnalités existent et qu'elles nous sont mises à disposition, utilisons-les : nous avons besoin de tout la puissance disponible.

10

Let us leave “Generic x86 support” off, since we are being very specific about the computer we are targeting. Moving on, we can deactivate options such as “Toshiba Laptop support”, “Dell laptop support”, and “CPU microcode loading support” - unless you intend to upgrade your CPU microcode. Most people will not need this.

The “High Memory Support” sub-menu requires some attention. We will obviously not need the 64 GByte RAM option, that complicates things by introducing the option to compile PAE into the kernel. With a maximum of 1 GByte RAM in our target machine, we can safely leave both the 64 GByte and 4 GByte options, and simply leave High Memory “off”. However, we should be aware that most low-end computer systems share part of their RAM between the motherboard and the graphic card. This means that a computer with 1 GByte RAM will report, within the operating system, the presence of about 993 MBytes of useful space – as seen in the eeePC screen capture above. When switching off “High Memory Support” in the kernel, during execution the kernel will reserve the upper 128 MBytes of RAM for its own use – and so user memory space will find itself quite remarkably reduced to the 863 MBytes seen in the following screen capture: an eeePC running the modified kernel we are now building. Please see the page at the following address for further details: http://unix.stackexchange.com/questions/4929/what-are-high-memory-and-low-memory-on-linux.

Laissons l'option « Generic x86 support » désactivée, étant donné la spécificité de notre ordinateur cible. Ensuite, nous pouvons désactiver des options telles que « Toshiba Laptop support », « Dell laptop support », et « CPU microcode loading support » - à moins que vous n'ayez l'intention de mettre à jour le micro-code de votre CPU. La plupart des gens n'en auront pas besoin.

Le sous-menu « High Memory Support » requiert un peu d'attention. Nous n'aurons évidemment pas besoin de l'option 64 Gio de RAM, car cela complique les choses en présentant l'option de compiler l'extension PAE dans le noyau. Avec un maximum de 1 Gio de RAM dans notre machine cible, nous pouvons laisser les options 64 Gio et 4 Gio vides sans danger, et simplement cocher l'option « off ». Cependant, nous devrions être conscients que la plupart des ordinateurs bas de gamme partagent une partie de leur mémoire vive entre la carte mère et la carte graphique. Cela signifie qu'un ordinateur avec 1 Gio de RAM indiquera la présence d'environ 993 Mio d'espace utile - CF la capture d'écran ci-dessus. Quand l'option « High Memory Support » est basculée sur « off » dans le noyau, celui-ci réservera les 128 premiers Mio de RAM pour son usage personnel - et donc l'espace mémoire utilisateur se trouvera sensiblement réduite aux 863 Mio vus sur la capture d'écran suivante : un eeePC fonctionnant avec le noyau modifié que nous sommes en train de construire. Rendez-vous à cette adresse pour plus de détails : http://unix.stackexchange.com/questions/4929/what-are-high-memory-and-low-memory-on-linux.

11

Naturally, PAE likewise can stay off.

Of the remaining options in this sub-menu, most can safely be left at their default settings. Just make sure “MTRR support” is on - this feature is part of the Pentium-III instruction set and can accelerate execution - and “EFI runtime service support” is off, since this feature has been introduced only in computers such as Apple's Macintosh, and, more recently, in machines destined for Windows 8.

Back in the main menu, we go down into sub-menu “Power management and ACPI options”. In here, the “Suspend to RAM and standby” option may be deactivated unless we want to sleep our computer. “Power Management Debug” only gives us information in the event of a crash, so off it goes. “CPU Frequency scaling” will also be deactivated because I find our little eeePC is already under-throttled sufficiently for my taste.

Naturellement, l'option PAE peut restée désactivée également.

Parmi les options restantes de ce sous-menu, la plupart peuvent être laissées à leurs valeurs par défaut sans danger. Assurez-vous seulement que l'option « MTRR support » est activée - cette fonctionnalité fait partie du jeu d'instructions Pentium-III et peut accélérer l'exécution - et que l'option « EFI runtime service support » est désactivée, étant donné que cette fonctionnalité n'a été introduite que sur des ordinateurs tels que les MacIntosh d'Apple, et, plus récemment, sur des machines destinées à accueillir Windows 8.

De retour sur le menu principal, nous atteignons le sous-menu « Power management and ACPI options ». Ici, l'option « Suspend to RAM and standby » peut être désactivée à moins que nous ne voulions mettre en veille notre ordinateur. L'option « Power Management Debug » nous donne seulement des informations en cas d'accident, nous pouvons donc la désactiver. L'option « CPU Frequency scaling » sera également désactivée parce que je trouve que notre petit eeePC est déjà bien suffisamment ralenti à mon goût.

12

Back in the main menu, in sub-menu “Bus options”, the “PCCard” and “RapidIO” options can be switched off.

Moving on in the main menu, in “Networking support” a load of features can be turned off, such as “Amateur Radio”, “CAN bus”, “IrDA”, “Bluetooth”, “WiMAX”, “Plan 9”, “CAIF” and “NFC subsystem” - unless, naturally, you wish to use these types of hardware (through a USB dongle?) or software.

In the “Device drivers” section of the main menu likewise, options such as “Parallel port support” can be deactivated. However, I tend to leave much of this stuff in, unless I am reasonably sure I will never need it, as most device drivers are in fact modules that will not be loaded. Module mode “M” is the key here.

In the “File systems” section, much of the same is applicable. Most users will be able to remove support for the “Reiserfs”, “JFS”, “XFS”, “GFS2”, “OCFS2”, “btrfs”, and “NILFS2” file systems, as well as the “CD-ROM/DVD Filesystems”. In the “DOS/FAT/NT Filesystems”, “VFAT” may sometimes come in useful if you are planning on using an external USB thumb-drive in this format.

De retour dans le menu principal, dans le sous-menu « Bus options », les options « PCCard » et « RapidIO » peuvent être déactivées.

En continuant sur le menu principal, une pléthore de fonctionnalités peuvent être désactivées dans le sous-menu « Networking support », telles que « Amateur Radio », « CAN bus », « IrDA », « Bluetooth », « WiMAX », « Plan 9 », « CAIF » et « NFC subsystem » - à moins, naturellement, que vous ne souhaitiez utiliser ces types de matériels (par l'intermédiaire d'un dongle USB ?) ou de logiciels.

De même, dans la section « Device drivers » du menu principal, des options comme « Parallel port support » peuvent être désactivées. Cependant, j'ai tendance à en laisser beaucoup activées, à moins que je ne sois raisonnablement sûr que je ne les utiliserai jamais, la plupart des pilotes de périphériques étant en effet des modules qui ne seront pas chargés. Il vous faudra alors renseigner le mode de modularisation « M » comme valeur.

Dans la section « File systems », la même question peut se poser. La plupart des utilisateurs seront capables d'enlever le support des systèmes de fichiers « Reiserfs », « JFS », « XFS », « GFS2 », « OCFS2 », « btrfs » et « NILFS2 », ainsi que les options de la section « CD-ROM/DVD Filesystems ». Dans la section « DOS/FAT/NT Filesystems », l'option « VFAT » peut parfois se montrer utile si vous prévoyez d'utiliser un support USB externe dans ce format.

13

“Kernel hacking” is perhaps best left alone: most of the stuff in here is mostly useful to debug a kernel during development. In “Security options”, I personally do not use SELinux, and deactivate the “NSA SELinux” option. Likewise for “Tomoyo Linux Support”, “AppArmor”, “Yama” and “Integrity Measurement Architecture”. These are tools destined for specific situations that the average desktop user will probably not find himself in.

Back in the main menu, nothing needs to be configured in the “Cryptographic API”. As for drivers, it is best if in doubt to leave stuff in that the kernel or other libraries may need, if only to verify apt package signatures. In “Virtualization”, however, we can deactivate everything since our system will be neither host nor client for kernel-level virtualization. I would also leave “Library routines” at their default values.

Il vaut mieux sans doute ne rien faire dans la section « Kernel hacking » : la plupart de ses options n'est utile que pour déboguer un noyau en développement. Dans la section « Security options », moi, je n'utilise pas SELinux et je désactive l'option « NSA SELinux ». De même pour les options « Tomoyo Linux Support », « AppArmor », « Yama » et « Integrity Measurement Architecture ». Ce sont des outils destinés à des situations spécifiques auxquelles l'utilisateur moyen n'aura probablement pas à faire face.

De retour sur le menu principal, rien n'a besoin d'être configuré dans la section « Cryptographic API ». Comme pour les pilotes, il vaut mieux dans le doute laisser activées les fonctionnalités que le noyau ou d'autres « libraries » peuvent requérir, ne fût-ce que pour vérifier des signatures apt de paquets. Dans la section « Virtualization » cependant, nous pouvons tout désactiver puisque notre système ne sera ni hôte ni client dans la virtualisation au niveau du noyau. Je laisserais également les valeurs par défaut de la section « Library routines ».

14

COMPILING, TESTING AND INSTALLING

Once we have all the kernel options set up, we save the configuration with the default file name “.config”, and proceed to compile it:

$ make

Some time later - though a tad less than when compiling the kernel with the default configuration - the system reports that all has gone well. Now, we will begin by installing our new kernel on the same computer we compiled it on. This is because if something were to go wrong, it is easier to test it out and recompile if necessary before transferring the kernel to the eeePC. So we go into administrator mode, and perform installation:

$ sudo bash

# make modules_install

# make install

If all goes well, reboot the computer, and test the new kernel. If the machine you are compiling on has a newer processor than the Celeron, all should go well. If you got a kernel error at boot up, e.g. a kernel panic because something was missing, read carefully the error message. If at a loss, Google can give some insight on what has happened – you will surely not be the first one to encounter such a problem. Then reboot the computer and, in the GRUB menu, select “Advanced options for Ubuntu” (or similar), and reboot using the previous kernel.

COMPILER, TESTER ET INSTALLER

Une fois que toutes les options du noyau sont définies, nous sauvegardons la configuration sous le nom de fichier par défaut « .config », et nous procédons à sa compilation :

$ make

Un certain temps plus tard - légèrement moins qu'en compilant le noyau avec la configuration par défaut - le système rapporte que tout s'est bien passé. Maintenant, nous allons commencer par installer notre nouveau noyau sur le même ordinateur qui nous a servi à la compilation. Nous faisons cela car, si quelque chose devait mal se passer, il sera plus facile de tester le noyau et de le recompiler si nécessaire, avant de le transférer sur l'eeePC. Nous ouvrons donc une session administrateur, et procédons à l'installation :

$ sudo bash

# make modules_install

# make install

Si tout se passe bien, redémarrez l'ordinateur et testez le nouveau noyau. Si la machine sur laquelle vous avez compilé le nouveau noyau a un processeur plus récent que le Celeron, tout devrait bien se passer. Si vous avez une erreur au démarrage, comme un « kernel panic » parce que quelque chose manque, lisez ce message d'erreur avec soin. Si cela ne vous aide pas, une recherche du message sur Google peut vous donner une idée de ce qui s'est passé - vous ne serez sûrement pas le premier à rencontrer un tel problème. Une fois cela fait, redémarrez l'ordinateur et, dans le menu de GRUB, sélectionnez le menu « Advanced options for Ubuntu » et redémarrez en utilisant le noyau précédent.

15

In some cases, the kernel will start up well, and then crash on the following error:

Starting init: /bin/sh exists but couldn't execute it (error -8)

This is usually due to the computer running out of memory when the kernel itself has been loaded, but the initrd compressed file cannot be loaded for some reason. Possible causes can include a hard drive with a GUID partition table, simply running low on RAM, since 512 MBytes is considered extremely low for a modern system.

Another possibility is having a bloated initrd file. This latter does happen with the Ubuntu system and kernel source, and is easy to detect by executing

ls -lh /boot

Dans certains cas, le noyau démarrera correctement, et ensuite crashera sur le message d'erreur suivant :

Starting init: /bin/sh exists but couldn't execute it (error -8)

Ceci est souvent dû au manque de mémoire de l'ordinateur au moment où le noyau a été chargé, mais le fichier compressé initrd ne peut pas être chargé pour une raison quelconque. Les causes possibles sont un disque dur avec une table de partitions GUID, ou simplement un manque de RAM, étant donné que 512 Mio est considéré comme extrêmement bas pour un système moderne.

Une autre possibilité est l'existence d'un fichier initrd trop lourd. En effet, cela arrive avec le système Ubuntu et les sources du noyau et est facile à détecter en exécutant la commande

ls -lh /boot

16

You should see the original initrd.img file weighing in at about 19 MBytes (specifically version 3.13.0-24-generic). If the initrd.img file you have generated goes way up into the 100 MByte mark, you have run into initrd bloating. This is due to the fact that, during compilation, a host of debugging symbols have been retained within the kernel and library executable code. The interested reader can see more about this at the following address: http://unix.stackexchange.com/questions/30345/why-is-my-initial-ramdisk-so-big. The solution proposed in this reference is to explicitly tell the compiler to strip out debugging symbols. The following commands have given me good results. Initial compilation:

$ make INSTALL_MOD_STRIP=1

and kernel installation:

$ sudo bash

# make INSTALL_MOD_STRIP=1 modules_install

# make INSTALL_MOD_STRIP=1 install

The resulting kernel vmlinuz file should be about 10-15% smaller than the original. The initrd compressed file system should weigh 16 MBytes or less, depending on the modules that have been deactivated.

Vous devriez voir le fichier initrd.img original pesant aux alentours de 19 Mio (pour être précis, avec la version 3.13.0-24-generic). Si le fichier initrd.img que vous avez généré a une taille supérieure à 100 Mio, c'est qu'il est bien trop volumineux. Cela est dû au fait que, pendant la compilation, une foule de symboles de déboguages a été conservée à l'intérieur du code exécutable du noyau et des libraries (bibliothèques). Si vous souhaitez obtenir plus de détails à ce sujet, allez à l'adresse suivante : http://unix.stackexchange.com/questions/30345/why-is-my-initial-ramdisk-so-big. La solution proposée dans cette référence est de dire explicitement au compilateur d'éliminer ces symboles de déboguage. Les commandes suivantes m'ont donné de bons résultats. Compilation initiale :

$ make INSTALL_MOD_STRIP=1

et installation du noyau :

$ sudo bash

# make INSTALL_MOD_STRIP=1 modules_install

# make INSTALL_MOD_STRIP=1 install

Le fichier vmlinux du noyau résultant de ces commandes devrait être environ 10 à 15 % plus petit que l'original. Le fichier compressé initrd devrait peser 16 Mio ou moins, en fonction des modules ayant été désactivés.

17

When running the new kernel on the computer used to compile it, it may be interesting to run system monitor. In the next screen capture, a Core i5 is running the new kernel. We may note that RAM is given as 863 MBytes, when the machine actually holds a full 4 GByte complement. This is because we turned High Memory off during compilation. In the same way, since we turned multiprocessing off, the next monitor tab reports the presence of a single CPU kernel, and not the four reported by regular kernels. As a side note, we can see the new kernel compiled from the Ubuntu 14.04 distribution mixes well with a previously installed Linux Mint 17.

Finally, we need to install the new kernel on the eeePC. In my case, I simplified things by not using the eeePC's internal drive. Instead, I am using an 8 GByte SD Card as the main hard drive, so it was merely a question of inserting this drive into the computer I compiled the kernel on, and copying the files over. With the SD card inserted and in administrator mode, supposing the new kernel has version number 3.13.11.2:

$ sudo bash

# cp /boot/*3.13.11.2 /media/<your-user-name>/<volume-name>/boot/

# cp -r /lib/modules/3.13.11.2 /media/<your-user-name>/<volume-name>/lib/modules/

The first copy operation copies over the kernel image and initrd file, the second copies the complete module library from /lib to the new system.

En démarrant le nouveau noyau sur l'ordinateur utilisé pour le compiler, il peut être intéressant de lancer le moniteur système. Sur la capture d'écran suivante, un Core i5 fait fonctionner le nouveau noyau. Nous pouvons noter qu'il indique 863 Mio de RAM, alors que la machine en possède en fait 4 Gio. C'est parce que nous avons désactivé l'option « High Memory » pendant la compilation. De la même façon, puisque nous avons désactivé le multiprocessing, l'onglet suivant du moniteur système rapporte la présence d'un seul CPU, et non les quatre rapportés par des noyaux habituels. Soit dit en passant, nous pouvons voir que le noyau compilé sur une distribution Ubuntu 14.04 se combine très bien avec une Linux Mint 17 précédemment installée.

Enfin, nous devons installer le nouveau noyau sur l'eeePC. Dans mon cas, j'ai simplifié les choses en n'utilisant pas le disque dur interne. À la place, j'utilise un carte SD de 8 Gio comme principal disque dur ; il était alors seulement question d'insérer cette carte dans l'ordinateur ayant compilé le noyau et d'y copier les fichiers. Avec la carte SD insérée et les droits administrateurs, en supposant que le numéro de version du nouveau noyau est 3.13.11.2 :

$ sudo bash

# cp /boot/*3.13.11.2 /media/<your-user-name>/<volume-name>/boot/

# cp -r /lib/modules/3.13.11.2 /media/<your-user-name>/<volume-name>/lib/modules/

La première commande copie l'image du noyau et le fichier initrd, la seconde copie la bibliothèque complète des modules /lib sur le nouveau système.

18

Now, remove the SD card from the compiler machine - remember to unmount first! - insert it into the eeePC and boot. The GRUB configuration on the SD card has not yet been updated, so it will still be booting into the original kernel. Now, open a terminal, and as administrator renew the GRUB configuration:

$ sudo bash

# grub-update

That's it, from now the GRUB menu's default boot option should be the new kernel and initrd. As discussed previously, the second option should still grant you access to the original kernel installed by the distribution, so with a bit of luck you should not end up locked out of your own computer (one hopes)!

Maintenant, enlevez la carte SD de la machine « compilatrice » - pensez d'abord à la démonter ! -, insérez-la dans l'eeePC et démarrez. La configuration de GRUB sur la carte SD n'a pas encore été mise à jour, donc il démarrera encore sur le noyau d'origine. Ouvrez un terminal et renouvelez la configuration de GRUB en tant qu'administrateur :

$ sudo bash

# grub-update

Ça y est, à partir de maintenant l'option de démarrage par défaut du menu de GRUB devrait être le nouveau noyau et le nouveau fichier initrd. Comme nous l'avons vu précédemment, la seconde option devrait toujours vous permettre l'accès au noyau d'origine installé par la distribution ; ainsi, avec un peu de chance vous ne devriez pas vous trouver dans l'impossibilité d'accéder à votre propre ordinateur (du moins je l'espère) !

19

When testing out the new kernel, for example browsing some slightly complex web pages with Javascript and active images running, the processor should not get pegged at 100% capacity quite as often. A slight, but noticeable gain in speed should be apparent in general system operation. As a supplementary benefit, the processor is now using the more complete instruction set for the Pentium-III. The supplementary instructions contain some parallelism built in, so the CPU needs to execute less instructions to complete any given task, resulting in less heat generation and perhaps even a tad more battery life. However, YMMV (Your Mileage May Vary), and you will need to check this out for your own specific work-flow.

Once the new kernel is installed and working from the SD-Card or, perhaps, an external USB drive, to install it on the eeePC's internal 4 GByte hard drive is also just a matter of copying over the files in boot (vmlinuz, initrd, System.map), and the complete library directory in /lib/modules, and then updating GRUB on the target system once booted.

Pendant que vous testez le nouveau noyau, par exemple en naviguant sur des pages Web complexes avec du Javascript et des images animées, le processeur ne devrait pas être coincé à 100 % d'utilisation aussi souvent qu'auparavant. Un mince, mais sensible, gain de rapidité devrait être apparent dans le fonctionnement général du système. Un autre avantage est que le processeur utilise maintenant le jeu d'instructions complet pour le Pentium-III. Les instructions supplémentaires contiennent certains parallélismes intégrés, ainsi le CPU requiert d'exécuter moins d'instructions pour terminer une tâche, donnant une moins forte génération de chaleur et peut-être même un gain d'autonomie sur la batterie. Cependant, YMMV (Your Mileage May Vary.) [Ndt : Ce qui est vrai pour les autres ne l'est pas forcément pour vous], et vous aurez besoin de vérifier cela pour ce qui concerne votre propre flux de travail.

Une fois le nouveau noyau installé et fonctionnant depuis la carte SD ou, peut-être, un support USB externe, l'installer sur le disque dur interne de 4 Gio du eeePC est, là aussi, une simple question de remplacement des fichiers de démarrage (vmlinuz, initrd, System.map), et du répertoire complet des bibliothèques dans /lib/modules, suivi d'une mise à jour de GRUB sur le système cible une fois démarré.

20

In this part we went through a specific case of kernel compilation, designed to actually implement the configuration, compilation and installation discussed in part three of this series. The eeePC is a small, lightweight notebook that still holds its fascination for some of us, besides being actually useful from time to time. It's external shell is really tough, compared to some more modern offerings, which can always help if we should need to use a mobile computer on the go.

In the next episode, we will see how to start hacking the kernel code itself, making small changes in the source code and seeing what comes out of it.

Dans cette partie, nous avons examiné un cas spécifique de compilation de noyau, conçu pour mettre en œuvre la configuration, la compilation et l'installation vues dans la troisième partie de cette série. L'eeePC est un ordinateur ultraportable petit et léger qui fascine encore quelques-uns d'entre nous, en plus d'être en fait très utile de temps en temps. Son boîtier est vraiment résistant, comparé à certains modèles plus récents, ce qui peut toujours aider si vous devez utiliser un ordinateur portable pendant vos déplacements.

Dans le prochain épisode, nous verrons comment commencer à bricoler le code du noyau. Nous effectuerons quelques petites modifications dans le code source et en verrons le résultat.

issue91/labo_linux_1.txt · Dernière modification : 2015/03/01 19:48 de fredphil91