Le 02-09-2008, Miod Vallat <miod@online.fr> a écrit :
J'ai la possibilité d'ajouter a peu près toutes les options prom que
je souhaite, par exemple
`-prom-env string'
Set OpenBIOS variables in NVRAM, for example:
qemu-system-sparc -prom-env 'auto-boot?=false' \
-prom-env 'boot-device=sd(0,2,0):d' -prom-env 'boot-args=linux single'
Tu n'as pas compris ce que je voulais dire, parce que tu n'es sans doute
pas assez familier avec OpenPROM (ou OpenFirmware, c'est son fiston).
Je ne demande qu'a apprendre
Dans OpenPROM, tu as une hiérarchie de noeuds, chacun ayant des
propriétés (= des variables) et des mots (= des méthodes). L'essentiel
des noeuds correspond à la hiérarchie physique des composants de la
machine, et il y a quelques noeuds particuliers qui sont des alias où
contiennent des propriétés et/ou des mots qui ne correspondent pas à un
composant proprement dit.
Ok
Par exemple, le vocabulaire forth de base de l'OpenPROM est contenu dans
le noeud racine (il faut bien le mettre quelque part, et puis c'est bien
pratique ici...). Le noeud /options, lui, contient les variables
d'environnement (commandes printenv et setenv au prompt `ok'), ainsi que
quelques variables dynamiques déterminées au runtime lorsque la PROM
tourne (par exemple, quels sont les composants servant aux
entrées-sorties pour la console, qui peuvent être différent de ceux
parametrés en variables d'environnement - par exemple parce que le
composant a été retiré...).
Pour fonctionner correctement sur sparc, OpenBSD (et NetBSD également)
ont besoin de pouvoir parcourir cette arborescence, et ont besoin que
/options contienne tout ce qu'une vraie OpenPROM va y mettre.
A priori, contrairement à ce que je disais hier, ce point est rempli.
Cependant, en plus de ça, les OpenPROM sparc passent au code qu'elles
chargent, un pointeur dans une structure spécifique (et dont le format
dépend de la version majeur de l'OpenPROM, sinon c'est pas drôle). C'est
depuis cette structure qu'OpenBSD extrait le chemin selon lequel il a
été amorcé, ainsi que les options qui lui ont été passées. Et si la
ligne ``bootpath:'' est vide, j'ai bien peur que cette structure ne soit
que partiellement implémentée dans QEMU.
Le boot -a et le disque racine rd0a ils sont indiqués dans une prom-env?
Voir juste au-dessus. Du coup, je ne suis pas si sûr que l'option -a
soit récupérée. Mais tu n'a rien à perdre à essayer.
Hop, un peu plus d'infos:
5 > help diag
test <device> Run the selftest method for specified device
test-all Execute test for all devices using selftest method
ok
5 > test-all
Testing device /aliases: no self-test method.
Testing device /openprom: no self-test method.
Testing device /openprom/client-services: no self-test method.
Testing device /options: no self-test method.
Testing device /chosen: no self-test method.
Testing device /builtin: no self-test method.
Testing device /builtin/console: no self-test method.
Testing device /packages: no self-test method.
Testing device /packages/client-iface: no self-test method.
Testing device /packages/disk-label: no self-test method.
Testing device /packages/cmdline: no self-test method.
Testing device /packages/deblocker: no self-test method.
Testing device /packages/misc-files: no self-test method.
Testing device /packages/sun-parts: no self-test method.
Testing device /memory@0,0: no self-test method.
Testing device /virtual-memory@0,10000000: no self-test method.
Testing device /iommu@0,10000000: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/SUNW,tcx@3,800000: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/esp@5,8800000: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/esp@5,8800000/sd@0,0: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/esp@5,8800000/sd@2,0: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/ledma@5,8400010: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/ledma@5,8400010/le@5,8c00000: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/SUNW,CS4231@4,c000000: no self-test method.
Testing device /iommu@0,10000000/sbus@0,10001000/power-management@5,a000000: no self-test method.
Testing device /obio: no self-test method.
Testing device /obio/zs@0,100000: no self-test method.
Testing device /obio/zs@0,0: no self-test method.
Testing device /obio/eeprom@0,200000: no self-test method.
Testing device /obio/SUNW,fdtwo@0,400000: no self-test method.
Testing device /obio/slavioconfig@0,800000: no self-test method.
Testing device /obio/auxio@0,900000: no self-test method.
Testing device /obio/power@0,910000: no self-test method.
Testing device /obio/counter@0,d00000: no self-test method.
Testing device /obio/interrupt@0,e00000: no self-test method.
Testing device /FMI,MB86904: no self-test method.
ok
5 > printenv
name "options"
boot-from "disk"
boot-args ""
use-generic? "false"
boot-script ""
boot-screen ""
ttyb-rts-dtr-off "false"
ttyb-ignore-cd "true"
ttyb-mode "9600,8,n,1,-"
ttya-rts-dtr-off "false"
ttya-ignore-cd "true"
ttya-mode "9600,8,n,1,-"
tpe-link-test? "true"
scroll-lock "true"
skip-netboot? "false"
default-mac-address "false"
pci-probe-mask "-1"
selftest-#megs "0"
screen-#rows "24"
screen-#columns "80"
output-device "/builtin/console"
input-device "/builtin/console"
use-nvramrc? "false"
oem-logo? "false"
oem-banner ""
oem-banner? "false"
nvramrc ""
fcode-debug? "false"
diag-file "diag"
diag-device "net"
diag-switch? "false"
boot-file ""
boot-command "boot"
auto-boot? "true"
ok
5 >
J'ai bien vu des docs signalant la possibilité de faire un ls /
mais au mieux ça ne rend rien, au pire j'ai eu un crash.
--
Kevin