issue 06/2018




Notes:

Compiler son OpenBios pour Qemu sur macOS
[par sky] publié en 02/2018

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 derrè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.

Version de l’OpenBios fourni avec Qemu 2.11 disponible sur Brew

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 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écompresser le fichier.

Renommer 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.)

Monter l’image disque, et démarrer l’installation.

Sélectionner "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.

Installation du Cross-Compilateur PowerPC

Compléter 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.

Edition du Makefile pour l’adapter à la compilation sur macOS

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.

Version de l’OpenBios compilé par nos soins

Sources :

PS : Peut-être êtes-vous désormais prêt à tenter de mettre QEmu en réseau ?


Les réactions à cet article :
Pas de réaction à cet article.
Poster une réactions à cet article :

modération à priori

Ce forum est modéré à priori : votre contribution n'apparaîtra qu'après avoir été validée par un administrateur du site.

Un message, un commentaire ?
  • (Pour créer des paragraphes, laissez simplement des lignes vides.)

Qui êtes-vous ? (optionnel)