Attention : cet article est dédié aux utilisateurs avancés. Il ne s'agit absolument pas d'un passage clé pour faire fonctionner Qemu.
Si vous avez suivi le précédent article sur l'installation et le lancement de Qemu, vous avez certainement noté la facilité relative pour lancer Mac OS 9. Mais derrière cette facilité, se trouvent un certain nombre de mécanismes qui ont été packagés via Brew.
En particulier, pour fonctionner l'émulateur nécessite une rom, un bios permettant de répondre aux appels du système à la machine virtuelle. Alors que Sheepshaver, entièrement dédié à Mac OS 9 a besoin d'une ROM extraite d'un Mac, Qemu permettant d'émuler de nombreuses machines, fonctionne grâce à OpenBios.
Qu'est ce qu'OpenBios ?
OpenBios est un firmware virtuel permettant de lancer de nombreux systèmes en émulation. Alors que les firmwares des machines sont en général protégé par les constructeurs, le but d'OpenBios est de fournir une implémentation libre accessible à tous et adaptée à l'émulation afin de remplacer les ROMs des constructeurs lors de la mise en place de machines virtuelles.
Pourquoi compiler sa version d'OpenBios ?
Lors de l'installation de Qemu, celui-ci intégre une version de l'OpenBios. Ainsi pour un lancement rapide de l'émulateur, vous n'avez pas à vous en soucier. Ce sont même 3 versions qui sont disponibles: Une version PPC, celle qui nous a intéressé, mais aussi une version SPARC 32bit et une autre version SPARC 64bit.
sky@macpro % ls -l /usr/local/Cellar/qemu/2.11.0/share/qemu | grep openbios
-rw-r--r-- 1 sky admin 754936 13 déc 18:29 openbios-ppc
-rw-r--r-- 1 sky admin 382048 13 déc 18:29 openbios-sparc32
-rw-r--r-- 1 sky admin 1593408 13 déc 18:29 openbios-sparc64
Si la version fournie reste assez récente en date du 17 octobre 2017, OpenBios est un projet vivant qui continue d'évoluer, permettant par exemple le support de Mac OS X sur Qemu. Il peut donc être intéressant d'installer la dernière version de temps en temps pour profiter du support des fonctionnalités les plus récentes.
Compiler sa propre version permet d'utiliser la dernière version du firmware et comme la dernière version compilée disponible date de Mai 2013, il faut le compiler par soit même.
Quelles sont les difficultés à compiler la dernière version d'OpenBios ?
En soit il n'y a aucune difficulté, il s'agit d'une simple compilation de code. La difficulté vient du fait que nos Mac sont désormais équipés de processeurs Intel x86 64bits, et que le bios, pour faire fonctionner Mac OS 9 doit être compilé en code PowerPC, le format des processeurs Apple de l'époque.
Vous devrez posséder les outils de développement en ligne de commande pour compiler les sources. Malheureusement ni ceux-ci ni XCode au complet ne permettent de cross-compiler du code pour PowerPC. Il faudra donc installer un cross-compilateur.
Compiler OpenBios
Finalement, démarrons la compilation de notre OpenBios. Et commençons par installer un cross-compilateur qui permettra la création du firmware PPC.
A noter que ce cross-compilateur est livré tel quel, sans support ni garantie de succès, et qu'il est de votre propre responsabilité de l'utiliser.
Téléchargez le fichier.
Décompressez le fichier.
Renommez le fichier décompressé en ajoutant .img à la fin : AWOS-CC.img
(Cela permet de rendre le fichier reconnaissable par macOS comme une image disque.)
Montez l'image disque et démarrer l'installation.
Sélectionnez "PowerPC Support" et "i386 Support" dans les options. Vous pouvez ajouter le support de SPARC si vous le souhaitez, mais dans mon cas cela ne me sera pas utile.
Complétez l'installation.
Il faut ensuite mettre les chemins des compilateurs installés dans son PATH.
Selon l'article original d'OpenFirmware, les chemins devraient être
/usr/local/ppcelfgcc/bin
/usr/local/i386elf/i386elf/bin
mais l'emplacement de l'installation semble varier selon les machines, il est donc préférable de trouver manuellement les fichiers pour les ajouter dans le PATH. Pour ma part, ils se trouvent dans les dossiers
/usr/local/ppcelf/ppcelf/bin
/usr/local/i386elf/i386elf/bin
Une fois que vous avez trouvé les chemins vers les compilateurs, ajoutez les à votre PATH, soit de manière temporaire
export PATH=$PATH:/usr/local/ppcelf/ppcelf/bin
export PATH=$PATH:/usr/local/i386elf/i386elf/bin
soit de manière définitive si vous souhaitez y avoir accès de nouveau dans le futur sans vous préoccuper du chemin.
Vous pouvez taper les commandes suivantes pour vérifier que l'installation est un succès
i386-elf-gcc --version
ppc-elf-gcc --version
avec comme réponse
sky@macpro % ppc-elf-gcc --version
ppc-elf-gcc (GCC) 4.2.3
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
si vous obtenez quelque chose du genre
sky@macpro % ppc-elf-gcc --version
zsh: command not found: ppc-elf-gcc
c'est qu'il faut revoir vos chemins.
Nous sommes prêts à attaquer la compilation du bios, ou presque :)
Créons un dossier dans lequel nous allons télécharger puis compiler les sources. Pour un raison pratique, j'ai choisi de mettre ce dossier à coté de mes disques virtuels de Mac OS 9 dédiés à Qemu
cd ~/Documents/qemu/
mkdir openBios
cd openBios
puis téléchargeons fcode, une suite d'outils nécessaires à la compilation de notre objectif final. Les sources se trouvent sur gihub et grâce à l'outil Git, l'installation va être très simple
git clone https://github.com/openbios/fcode-utils.git
cd fcode-utils
make
make install
avec comme résultat
make install
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C toke install
mkdir -p /usr/local/bin
cp toke /usr/local/bin/toke
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C detok install
mkdir -p /usr/local/bin
cp detok /usr/local/bin/detok
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C romheaders install
mkdir -p /usr/local/bin
revenons dans notre dossier
cd ..
puis téléchargeons les sources de l'OpenBios (enfin!), toujours depuis Git
git clone https://github.com/openbios/openbios.git
puis entrons dans le dossier
cd openbios
pour continuer, il faut modifier le fichier Makefile avec votre éditeur de texte préféré, pour commenter la ligne 32
"CFLAGS+= -Werror"
avec un # en début de ligne
#"CFLAGS+= -Werror"
enregistrons et quittons l'éditeur.
Et finalement lançons la compilation de notre firmware :
CROSS_COMPILE=ppc-elf- ./config/scripts/switch-arch ppc && make build-verbose
qui devrait se terminer par
LINK openbios-qemu.elf
GEN openbios-qemu.elf.syms
STRIP openbios-qemu.elf
Votre firmware fraichement compilé se trouve dans le dossier
obj-ppc/openbios-qemu.elf
Comme je préfère ne pas toucher à l'installation automatique de Qemu par Brew, et que je souhaite toujours, et simplement, avoir accès au bios, si d'aventure je compile de nouvelles versions, je fais un alias que je mets dans le dossier principal
cd ~/Documents/qemu/
ln -s openBios/openbios/obj-ppc/openbios-qemu.elf
Et maintenant je peux lancer mon Mac OS 9 sur Qemu avec la dernière version du firmware. Pour cela il faut modifier légèrement la commande pour y indiquer le bios que l'on souhaite utiliser
qemu-system-ppc -bios openbios-qemu.elf -boot c -m 256 -M mac99 -prom-env "auto-boot?=true" -prom-env "boot-args=-v" -drive file=MacOS9-fr.img,format=raw,media=disk -drive file=Shared.img,format=raw,media=disk -device usb-mouse -device usb-kbd
Dès l'ouverture de l'émulateur, à l'affichage du bios, vous devriez avoir la version qui s'affiche à la date du jour.
Sources :
PS: Peut-être êtes-vous désormais prêt à tenter de mettre QEmu en réseau ?