arm なカーネルの DeviceTree を確認すべく (2)

early work にて確認再開。昨晩の現象を再度確認。

$ sudo qemu-system-arm -M vexpress-a9 -kernel /opt/kernel/zImage \
-append "root=/dev/nfs rw nfsroot= ip=dhcp"

で、コンソールなメセジが以下。一応 dhcp サーバから IP 取れてて _Mounted root_ な出力も確認できてます。

kernel panic


$ sudo qemu-system-arm -M vexpress-a9 -kernel /opt/kernel/zImage \
-append "root=/dev/nfs rw nfsroot= \
ip=dhcp init=/sbin/init"

パラメータの渡し方が違うのかなぁ。ちなみにカーネルですが linux-next の、ほぼ最新のソースを

$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ make vexpress_defconfig

で make したもの (のはず) です。


@tetsu_koba さんからフォロー頂いてます。曰く、

nfs rootのmountが成功しているならば、initrdはもう関係ないでしょう。initが見つからないと言われるのならば、init=/sbin/init とかカーネルパラメータで明示的に指定してみる?

とのこと。とりあえず朝メシまで 50min というあたりでググり着手、なのか。


起動パラメータ自体に問題無いのかどうか。反則ワザだけど /bin/sh でヤッてみるか。

$ sudo qemu-system-arm -M vexpress-a9 -kernel /opt/kernel/zImage \
-append "root=/dev/nfs rw nfsroot= \
ip=dhcp init=/bin/"

挙動変わらず。Documentation/init.txt 見れとか出とるな。うーん、kmc さんのこのエントリの .config なナニを確認すべきなのかどうか。
ええと、NFS-Root mini-HOWTO の 5.1 に以下な記述が。

A common problem with /sbin/init is that some distributions (e.g., Red Hat Linux) come with /sbin/init dynamically linked. So you have to provide a correct /lib setup to the client. An easy thing one could try is replacing /sbin/init (for the client) with a statically linked ``Hello World'' program. This way you know if it is something more basic, or ``just'' a problem with dynamic linking.

NFS-Root mini-HOWTO の 5.1 より引用

$ file /opt/export/armel/root/sbin/init
/opt/export/armel/root/sbin/init: ELF 64-bit LSB shared object, x86-64, \
version 1 (SYSV), dynamically linked (uses shared libs), \
for GNU/Linux 2.6.15, BuildID[sha1]=0x477792050d1d0ca988b25a651768b715c385cbb7, stripped

あーこれ、原因分かりました。バイナリが x86-64 用じゃんorz