Projet LinuxBIOS
J'ai tenté de participer au projet LinuxBIOS, nouvellement coreboot. C'est un projet que je trouve vraiment intéressant : l'objectif est de libérer la dernière partie recalcitrante d'un PC moderne - le BIOS, ce petit bout de code antédiluvien, lent, largement inutile et généralement buggé mais obligatoire au bon démarrage et fonctionnement de la machine.
J'ai - assez bêtement - décidé de travailler à l'adaptation de LinuxBIOS sur ma machine de l'époque, un PC basé sur une carte mère Asus A7V600. J'ai accumulé plusieurs erreurs :
- ma machine de travail était aussi ma machine de test. J'avais acheté pour ce faire, un petit bout d'électronique qui permet d'avoir une copie du BIOS et qui sert - initialement - à la sauvegarde en cas de plantage et pas au développement de nouvelle image BIOS. Le cycle de test était le suivant : générer une nouvelle image du BIOS sous Linux, switcher sur la mémoire flash secondaire, flasher le BIOS et rebooter. Le PC redémarrait donc sur la nouvelle image du BIOS. Une fois le test effectué, repasser sur la mémoire flash principale et redémarrer (tout le système Linux) et continuer le développement. Ça s'est avéré inefficace, pénible et sans doute dangereux pour la carte mère (à force de redémarrages, elle a eu une vie plutôt courte au final). Si c'était à refaire, je distinguerais clairement la machine de travail de la machine de test, avec une carte de développement.
- libérer le BIOS de ma carte n'intéressait personne d'autre que moi. Difficile pour débuter, alors que plusieurs personnes tentaient de travailler sur d'autres cartes plus populaires, comme les mini-ITX de VIA.
- j'ai passé beaucoup de temps sans documentation, à tenter de faire du reverse engineering en désassemblant le BIOS officiel. Sans documentation, c'est impossible, même avec la meilleure volonté du monde. J'ai finalement signé un NDA avec VIA pour avoir un peu de docs. J'ai mis 6 mois à signer ce NDA, en me demandant si je ne pactisait pas avec le diable. C'était quand même mieux que pas de doc du tout. Au passage je n'ai toujours pas compris la notion de NDA : je me rappelle que VIA autorisait explicitement ce type de développement (avec ce qu'ils appelaient un "Linux addendum" au contrat), alors à quoi sert la protection ? Ça voulait dire qu'on peut partager du code, mais pas associer de commentaires au code, sous risque d'exposer des explications couvertes par NDA ??
Le temps passé à désassembler le BIOS Asus d'origine m'a quand même permis d'apprendre pas mal de chose et aussi de trouver comment débloquer les protections logicielles pour pouvoir flasher le BIOS à partir de Linux. C'est au final ma seule contribution "concrète" au projet.
J'ai aussi compris à l'époque - les choses ont peut être changé entre temps, qu'il n'existe pas de bon désassembleur *intéractif* sous GNU/Linux. La référence reste malheureusement IDA sous Windows. Par intéractif, j'entends un désassembleur sur lequel on peut préciser rapidement comment doit être interprété un bloc de code : code ou données et quel type de code (16 ou 32 bits). Vu la manière dont le BIOS passe son temps à jongler entre les différents modes, c'est indispensable.
Mes quelques notes et bouts de code de l'époque