Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
tutoriel:comment_patcher_son_noyau_pour_activer_hibernation [Le 22/11/2010, 04:34] 41.141.204.128 gggg |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>portable système kernel tutoriel vétuste}} | ||
- | ---- | ||
- | |||
- | ====== Comment patcher son noyau pour activer l'hibernation ? ====== | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Introduction ===== | ||
- | |||
- | <note warning>** Ce tutoriel ne fonctionne plus (certain sites internet n'existent plus et il n'est pas adapté aux nouvelles versions d'Ubuntu !!!). Si quelqu'un veut m'aider à le mettre à jour, il est le bienvenu :-) **</note> | ||
- | |||
- | hacked | ||
- | |||
- | ==== Quelles solutions existe-t-il sous linux ? ==== | ||
- | |||
- | Le noyau Linux inclut par défaut une fonction d'hibernation (suspend to disk) qui est assez longue. | ||
- | Il existe une autre solution, plus performante, pour mettre son ordinateur en hibernation : //SWSUSP2//. | ||
- | |||
- | //SWSUSP2//, est un patch à appliquer au noyau. Il permet de compresser l'image de la ram avant de l'écrire sur le disque ce qui permet de faire une hibernation en environ 6s. | ||
- | |||
- | Dans ce tutoriel je vais vous expliquer comment appliquer le patch au noyau afin d'obtenir cette fonctionnalité. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== Installation ===== | ||
- | |||
- | **Note:** il existe des paquets "prêts à l'emploi" pour Dapper: | ||
- | |||
- | [[http://www.ucc.asn.au/~dagobah/dapper-kernels/]] (en anglais) | ||
- | |||
- | |||
- | ==== Télécharger les paquets ==== | ||
- | |||
- | La première chose à faire est de récupérer les paquets nécessaires à la compilation de son noyau: | ||
- | <code> | ||
- | sudo apt-get install build-essential bin86 libncurses-dev alien kernel-package | ||
- | sudo apt-get -y install linux-tree-2.6.12 | ||
- | cd /usr/src | ||
- | </code> | ||
- | |||
- | Puis on récupère le patch //swsusp2//: | ||
- | <code> | ||
- | sudo wget http://ubuntu.griffin3.com/software-suspend-2.1.9.9-for-2.6.12-ubuntu5.10.tar.bz2 | ||
- | sudo wget http://www.suspend2.net/downloads/all/hibernate-1.12-1.i386.rpm | ||
- | sudo wget http://www.suspend2.net/downloads/all/suspend2-userui-0.5.1.tar.gz | ||
- | </code> | ||
- | |||
- | Ensuite, pour compiler le noyau, nous allons installer //gcc-3.4// (par défaut Ubuntu Breezy installe //gcc 4.0//): | ||
- | <code> | ||
- | sudo apt-get install gcc-3.4 | ||
- | </code> | ||
- | |||
- | Nous allons indiquer au système l'utilisation de //gcc-3.4// pour la compilation, en exportant la variable CC: | ||
- | <code> | ||
- | export CC=gcc-3.4 | ||
- | </code> | ||
- | |||
- | Il ne reste plus qu'à décompresser le patch et le noyau fraîchement téléchargé: | ||
- | <code> | ||
- | sudo tar -xjf software-suspend-2.1.9.9-for-2.6.12-ubuntu5.10.tar.bz2 | ||
- | sudo tar -zxf suspend2-userui-0.5.1.tar.gz | ||
- | sudo tar -xjf linux-source-2.6.12.tar.bz2 | ||
- | sudo ln -s linux-source-2.6.12 linux | ||
- | cd /usr/src/linux | ||
- | </code> | ||
- | |||
- | ==== Application du patch ==== | ||
- | |||
- | Avant d'appliquer le patch au noyau, nous allons récupérer notre configuration noyau par défaut lors de l'installation de Ubuntu: | ||
- | <code> | ||
- | sudo cp /boot/config-2.6.12-9-386 .config | ||
- | sudo make oldconfig | ||
- | </code> | ||
- | |||
- | Maintenant, nous appliquons le patch : | ||
- | <code> | ||
- | sudo ../software-suspend-2.1.9.9-for-2.6.12-ubuntu5.10/apply | ||
- | </code> | ||
- | |||
- | Notre noyau est maintenant patché. | ||
- | |||
- | ==== Configuration du noyau ==== | ||
- | |||
- | Par défaut, Ubuntu démarre avec un //initramfs//, nous n'aborderons pas la manière d'utiliser //swsups2// avec //initramfs//, ce qui est en soit assez compliqué. Mais sachez qu'il est tout à fait possible de l'utiliser, j'expliquerai plus tard comment faire. | ||
- | |||
- | Afin d'accélérer //swsusp2//, il va falloir compiler le pilote du chipset en dur dans le noyau. | ||
- | Pour connaitre le chipset IDE de votre machine: | ||
- | <code> | ||
- | sudo lspci | grep IDE | ||
- | </code> | ||
- | Dans mon cas, cette commande donne: | ||
- | <code> | ||
- | 0000:00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4) Ultra ATA Storage Controller (rev 03) | ||
- | </code> | ||
- | Ce qui signifie que je possède un chipset Intel qu'il faudra que je compile en dur dans le noyau, ce qui permettra d'accélérer par 5 ou 6 la mise en hibernation. | ||
- | |||
- | Pour pouvoir activer l'hibernation, il vous faut savoir quel est votre partition swap. En effet, lors de la mise en hibernation, //swsusp2// va recopier le contenu de la RAM dans la swap. A la sortie de l'hibernation, le contenu de la swap sera copié en RAM pour retrouver le système tel qu'il était avant l'hibernation. | ||
- | |||
- | Pour connaître le nom de la partition swap sur votre système, il vous suffit d'entrer la commande suivante : | ||
- | |||
- | <code> | ||
- | sudo cat /etc/fstab | grep swap | ||
- | </code> | ||
- | |||
- | Dans mon cas, cette commande donne | ||
- | <code> | ||
- | /dev/hda7 none swap sw 0 0 | ||
- | </code> | ||
- | Ce qui signifie que j'utilise la partition hda7 comme partition de swap. | ||
- | |||
- | Passons à la configuration: | ||
- | <code> | ||
- | sudo make menuconfig | ||
- | </code> | ||
- | |||
- | Voici les modifications à apporter. | ||
- | C'est la partie la plus délicate, mais très instructive, de ce tutorial: | ||
- | <code> | ||
- | # General setup ---> | ||
- | # (-hibernate) Local version - append to kernel release | ||
- | # Power management options (ACPI, APM) ---> | ||
- | # [ ] Software Suspend (EXPERIMENTAL) | ||
- | # <*> Software Suspend 2 ---> | ||
- | # <*> Swap Writer | ||
- | # (swap:/dev/hda7) La partition par défaut qu'utilisera swsups2, mettez la votre | ||
- | # Device Drivers ---> | ||
- | # ATA/ATAPI/MFM/RLL support ---> On compile en dur la gestion des disques, car on n'utilisera pas initramfs | ||
- | # <*> ATA/ATAPI/MFM/RLL support | ||
- | # <*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support | ||
- | # <*> Include IDE/ATA-2 DISK support | ||
- | # <*> generic/default IDE chipset support | ||
- | #=== Son chipset ide, chez moi: (cela permet d'accélérer par 5-7 fois la mise en hibernation | ||
- | # <*> Intel PIIXn chipsets support #===votre chipset IDE | ||
- | # File systems ---> | ||
- | # <*> Ext3 journalling file system support #==== en dur votre file system, moi c ext3 | ||
- | # Cryptographic options ---> | ||
- | # <*> LZF compression algorithm #==== On va utiliser la compression LZF, pour la mise en hibernation | ||
- | #===Maintenant le type de processeur que vous utilisez. | ||
- | # Processor type and features ---> | ||
- | # Processor family (Athlon/Duron/K7) #===your processor | ||
- | </code> | ||
- | |||
- | Ne compilez pas le noyau, nous le ferons plus tard en créant un paquet .deb. | ||
- | |||
- | ===== Installation du User UI ===== | ||
- | |||
- | //Swsusp2// fournit deux interfaces affichant une barre de progression lors de l'hibernation et lors du réveil: | ||
- | * Une interface texte | ||
- | * Une interface graphique utilisant le frame buffer | ||
- | Je n'utilise pas l'interface //frame buffer// qui ralentit considérablement la mise en veille. Donc je n'expliquerais ici que la manière installer l'UI text. | ||
- | |||
- | Compilation et installation : | ||
- | <code> | ||
- | cd /usr/src/suspend2-userui-0.5.1 | ||
- | sudo make suspend2ui_text | ||
- | sudo cp -p suspend2ui_text /usr/local/sbin | ||
- | </code> | ||
- | |||
- | ===== Installation et Configuration du script hibernate ===== | ||
- | |||
- | Nous avons déjà téléchargé le paquet rpm du dernier script. Nous allons donc le convertir en paquet deb puis l'installer: | ||
- | <code> | ||
- | cd /usr/src | ||
- | sudo alien -d hibernate-1.12-1.i386.rpm | ||
- | sudo dpkg -i hibernate_1*.deb | ||
- | </code> | ||
- | |||
- | Maintenant, passons à la configuration: | ||
- | <code> | ||
- | gksudo gedit /etc/hibernate/hibernate.conf | ||
- | </code> | ||
- | Rendez-vous aux lignes suivantes, et effectuez les opérations indiquées: | ||
- | <code> | ||
- | ImageSizeLimit nocache # Décommentez et ajouter "nocache" | ||
- | ProcSetting expected_compression 50 # Décommentez | ||
- | |||
- | # Ajouter cette ligne | ||
- | ProcSetting userui_program /usr/local/sbin/suspend2ui_text | ||
- | SwitchToTextMode no # Décommentez | ||
- | </code> | ||
- | |||
- | ===== Compilation du noyau ===== | ||
- | |||
- | Nous sommes maintenant prêts à compiler notre noyau: | ||
- | <code> | ||
- | cd /usr/src/linux | ||
- | sudo make-kpkg --append-to-version=swsusp2 kernel_image | ||
- | </code> | ||
- | Vous pouvez maintenant aller prendre un café, car cette opération nécessite un certain temps... | ||
- | Une fois fini, ré-installez votre nouveau noyau en installant le paquet généré: | ||
- | <code> | ||
- | cd /usr/src | ||
- | sudo dpkg -i kernel-image-2.6.12swsusp2*.deb | ||
- | </code> | ||
- | |||
- | Redémarrez pour utiliser votre nouveau noyau. | ||
- | |||
- | ===== Hibernation ===== | ||
- | |||
- | Après tous ces efforts, nous sommes prêts à effectuer notre première hibernation: | ||
- | <code> | ||
- | sudo hibernate | ||
- | </code> | ||
- | |||
- | ===== Remarques ===== | ||
- | |||
- | ==== Stats ==== | ||
- | |||
- | Après votre première hibernation, vous pouvez récupérer quelques statistiques sur l'hibernation en entrant: | ||
- | <code> | ||
- | sudo cat /proc/software_suspend/debug_info |grep 'compression\|speed' | ||
- | </code> | ||
- | Dans mon cas, cela donne: | ||
- | <code> | ||
- | - Overall expected compression percentage: 50. | ||
- | Compressed 283107328 bytes into 144722852 (48 percent compression). | ||
- | - I/O speed: Write 45 MB/s, Read 41 MB/s. | ||
- | </code> | ||
- | Ce qui est important, c'est la vitesse I/O. Si cette vitesse avoisine 5, c'est que vous n'avez pas compilé le bon module de gestion de votre chipset IDE. | ||
- | |||
- | ==== Linux Restricted Module ==== | ||
- | |||
- | Quand vous recompilez votre noyau, vous ne pouvez plus utiliser les paquets officiels pour les modules propriétaires. | ||
- | Mais ce n'est pas dramatique, effectuez les commandes suivantes : | ||
- | <code> | ||
- | cd /usr/src | ||
- | sudo module-assistant | ||
- | </code> | ||
- | |||
- | Et suivez le guide pour réinstaller les modules propriétaires: //nvidia//, //madwifi//, etc... | ||
- | |||
- | Il existe des problèmes avec les pilotes propriétaires fglrx et nvidia, moi je ne m'en sers pas. | ||
- | Si vous avez des problèmes, utilisez les pilotes radeon et nv. | ||
- | |||
- | ==== Problèmes éventuels avec FAT32 et Windows ==== | ||
- | |||
- | Si vous avez des partitions FAT32 montées et que vous utilisez le script hibernate sur un ordinateur multi-boot, vous aurez peut-être des problèmes de corruption de système de fichiers si vous lancez Windows depuis grub au boot suivant (en réalité, vous ne le verrez qu'après avoir rebooté sous Linux). | ||
- | |||
- | Pour résoudre ce problème, il suffit de taper | ||
- | |||
- | <code> | ||
- | gksudo gedit /etc/hibernate/hibernate.conf | ||
- | </code> | ||
- | |||
- | et de rajouter, à la section ### filesystem, la ligne suivante: | ||
- | |||
- | <code> | ||
- | UnmountFSTypes vfat | ||
- | </code> | ||
- | |||
- | (Pour les autres types de systèmes de fichiers Windows, remplacez vfat par fat ou msdos selon votre cas.) | ||
- | |||
- | Les partitions seront ainsi démontées automatiquement à chaque lancement du script et vous éviterez les conflits. | ||
- | |||
- | ==== Problèmes de compilation avec Ndiswrapper ==== | ||
- | La compilation en dur de Ndiswrapper semble provoquer des erreurs au moment de la recompilation du kernel. | ||
- | Si c'est le cas réessayez en décochant Ndiswrapper au moment de la configuration avec make menuconfig. | ||
- | |||
- | ---- | ||
- | |||
- | //Contributeurs : [[utilisateurs:mathieu.vilaplana]].// |