Skip to main content

Modification du noyau Linux pour baie ESata

Afin d'obtenir un fonctionnement parfait de la baie au boot j'ai été obligé de modifier quelques paramètres du noyau. La manipulation est très simple et un seul fichier est à modifier, il suffit ensuite de re-compiler le noyau pour obtenir une reconnaissance parfaite.
Les explications suivantes supposent que vous avez les sources de votre noyau ... et ce qu'il faut pour le compiler.
Pour la première compilation d'un noyau pensez à "make oldconfig" !

Chez moi les sources sont dans le répertoire /usr/src/linux, tous les chemins indiqués seront relatifs à ce répertoire.

Note : Ceci est valable au moins depuis les noyaux 2.6.38, ici le test a été réalisé en 2.6.38.8, 2.6.39.4, 3.1.2 et en 3.1.5.

Manipulations :
Le fichier concerné est le fichier "include"  include/linux/libata.h dont la partie à modifier se présente comme suit :

    ATA_TMOUT_FF_WAIT_LONG    =  2000,
    ATA_TMOUT_FF_WAIT         =   800,

    /* Spec mandates to wait for ">= 2ms" before checking status
     * after reset.  We wait 150ms, because that was the magic
     * delay used for ATAPI devices in Hale Landis's ATADRVR, for
     * the period of time between when the ATA command register is
     * written, and then status is checked.  Because waiting for
     * "a while" before checking status is fine, post SRST, we
     * perform this magic delay here as well.
     *
     * Old drivers/ide uses the 2mS rule and then waits for ready.
     */
    ATA_WAIT_AFTER_RESET      =  150,


Seules les deux valeurs en rouge sont à modifier avec les valeurs suivantes :

    ATA_TMOUT_FF_WAIT_LONG    =  4000,
    ATA_WAIT_AFTER_RESET      =  400,

Après sauvegarde du fichier libata.h vous lancez la re-compilation de votre noyau, vous installez et vous dégustez. La recette est vraiment simple !