Carnet de notes - Mot-clé - linux2024-02-27T14:10:56+01:00Pascal Chevrelurn:md5:df119eb286679353063d080b01104a80DotclearToshiba L735-116 et reconnaissance de la batterie sous Linuxurn:md5:63149f19e2b0eeaa2f86a2deafd4c5872012-03-01T12:27:00+01:002012-03-01T13:26:44+01:00Pascal ChevrelUbuntulinuxplanet-libreubuntu <p>La batterie de mon portable n'est pas reconnue par Linux, ce qui veut dire que linux ne me donne pas d'indicateur de charge quand je suis débranché. </p>
<p>Jusqu'à présent je devais à chaque changement de noyau le recompiler avec un patch spécial. J'ai trouvé hier une méthode complémentaire sur un blog qui m'évite d'avoir à recompiler le noyau, je la documente donc ici en français, pour moi-même, mais aussi pour ceux qui auraient le même problème.</p>
<p>Mon portable est un Toshiba L735-116 mais de nombreux autres modèles de Toshiba sont affectés, donc si vous avez le même problème sur votre portable, rien ne vous empêche d'essayer, le geek qui a analysé et trouvé la solution au problème a lui un L650.</p>
<p>Les informations que je synthétise ici en français sont issues de ces deux billets :</p>
<ul><li><a href="http://techinterplay.com/fix-toshiba-battery-issue-linux.html">Fix Toshiba battery issue for Linux</a></li>
<li><a href="http://blog.michael.kuron-germany.de/2011/03/patching-dsdt-in-recent-linux-kernels-without-recompiling/">Patching DSDT in recent Linux kernels without recompiling</a></li>
</ul>
<p>Un grand merci donc à leurs auteurs Faheem et Michael Kuron pour avoir partagé leurs connaissances et apporté une solution.</p>
<p>Typiquement, vous savez que vous n'avez pas de batterie reconnue avec ces commandes :</p>
<pre>~$ cat /proc/acpi/battery/BAT1/*<br />present: no<br />present: no<br />present: no</pre>
<p>Les étapes à suivre sont les suivantes :</p>
<ol><li>ouvrir un terminal et passer en root (sudo -s)</li>
<li><code>cd /boot/</code></li>
<li>On récupère le tableau DSDT de la machine<br /><code>cat /sys/firmware/acpi/tables/DSDT > dsdt.dat</code></li>
<li>on le désassemble<br /><code class="comments">iasl -d dsdt.dat</code></li>
<li>on ouvre le fichier désassemblé avec son éditeur de texte favori (gedit, geany, vi...)<br /><code>geany dsdt.dsl</code></li>
<li>on cherche la ligne : <br /><code>OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF)</code><br />et on la remplace par <br /><code>OperationRegion (EMEM, EmbeddedControl, 0x00, 0xFF)</code></li>
<li>On enregistre le fichier</li>
<li>On lance la commande pour le recompiler en un fichier dsdt.aml (ça créera aussi un fichier dsdt.hex mais on s'en servira pas)<br /><code>iasl -tc dsdt.dsl</code></li>
<li>On récupère ce script <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/03/01_acpi.txt">01_acpi.txt</a> et on l'enregistre dans le dossier /etc/grub.d/ sous le nom 01_acpi (on enlève l'extension .txt)</li>
<li>On donne à ce script les droits d'exécution<br /><code>chmod +x /etc/grub.d/01_acpi</code></li>
<li>On lance la commande<br /><code>update-grub2</code></li>
<li>On redémarre et normalement c'est bon :)</li>
</ol>
<p>Pour info, ce bug est déjà signalé dans le bugzilla du kernel depuis deux ans et n'est pas réglé dans le noyau 3.2 que j'utilise (<a href="https://bugzilla.kernel.org/show_bug.cgi?id=15707">Bug 15707 - can not get AC/DC status</a>). </p>