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]].// | ||