LS-GL:initrd


今一つブートシーケンスに納得がいっていない。
どうやって /etc/init.d/rcS が起動されているんだろう。
何か秘密があるのでは?と initrd を見てみる。

initrd.buffalo のマウント

まずは、initrd をマウントする。
root@UDE:/boot# mkdir /tmp/root
root@UDE:/boot# mount -o loop /boot/initrd.buffalo  /tmp/root
mount: could not find any device /dev/loop#
root@UDE:/boot# ls -l /dev/loop*
ls: /dev/loop*: No such file or directory
root@UDE:/boot#
/dev/loop? がないのでマウント失敗。

ループデバイスを作る

/dev/loop? を作る。
root@UDE:/boot# cd /dev
root@UDE:/dev# ./MAKEDEV loop
sh: ./MAKEDEV: No such file or directory
root@UDE:/dev#
MAKEDEV もない。
仕方がないので、自分で作る。
root@UDE:/dev# mknod /dev/loop0 b 7 0
root@UDE:/dev# ls -l loop0
brw-r--r--    1 root     root       7,   0 Jul 29 08:58 loop0
root@UDE:/dev# mknod /dev/loop1 b 7 1
root@UDE:/dev# mknod /dev/loop2 b 7 2
root@UDE:/dev# mknod /dev/loop3 b 7 3
root@UDE:/dev# mknod /dev/loop4 b 7 4
root@UDE:/dev# ls -l loop*
brw-r--r--    1 root     root       7,   0 Jul 29 08:58 loop0
brw-r--r--    1 root     root       7,   1 Jul 29 08:58 loop1
brw-r--r--    1 root     root       7,   2 Jul 29 08:59 loop2
brw-r--r--    1 root     root       7,   3 Jul 29 08:59 loop3
brw-r--r--    1 root     root       7,   4 Jul 29 08:59 loop4
root@UDE:/dev#
こんなものかな。

再度マウント

今度こそ、マウント
root@UDE:/dev# cd
root@UDE:~# !mount
mount -o loop /boot/initrd.buffalo  /tmp/root
mount: you must specify the filesystem type
root@UDE:~#
何か変。

initrd.buffalo の中身

initrd.buffalo をダンプしてみる
root@UDE:~# od -xc /boot/initrd.buffalo |more
0000000     0527    5619    17cc    4ff3    8b44    75af    4200    33fc
           ' 005 031   V 314 027 363   O   D 213 257   u  \0   B 374   3
0000020     0000    0000    0000    0000    5aed    cc4a    0205    0103
          \0  \0  \0  \0  \0  \0  \0  \0 355   Z   J 314 005 002 003 001
0000040     6e69    7469    6472    0000    0000    0000    0000    0000
           i   n   i   t   r   d  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000060     0000    0000    0000    0000    0000    0000    0000    0000
          \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000100     8b1f    0808    af6f    448b    0302    6e69    7469    6472
         037 213  \b  \b   o 257 213   D 002 003   i   n   i   t   r   d
0000120     ec00    099d    5558    ded5    0f87    80a3    93cc    6338
          \0 354 235  \t   X   U 325 336 207 017 243 200 314 223   8   c
0000140     8288    c803    a20c    8e02    0a20    3822    708b    0498
         210 202 003 310  \b 242 002 216      \n   "   8 213   p 230 004
	:
	:
100(8進)=64(10進)のところに 8b1f が見える。
ARM って、リトルエンディアンなんや。 PC-P1LAN の initrd.bootと同じ。

initrd 本体の取り出し

initrd を取り出す
root@UDE:~# dd if=/boot/initrd.buffalo of=/tmp/initrd.gz bs=64 skip=1
68592+1 records in
68592+1 records out
root@UDE:~# gunzip /tmp/initrd.gz
gunzip: write: No space left on device
gunzip: crc error
gunzip: Error inflating
root@UDE:~# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/sda2               493212    169204    324008  34% /
/dev/ram1                15360     15360         0 100% /mnt/ram
/dev/ls_disk1_1         194443     68318    116086  37% /boot
/dev/ls_disk1_6      155377036       624 155376412   0% /mnt/disk1
root@UDE:~#
今度はディスクフルかいな。
root@UDE:~# ls /mnt
authtest  disk1     info      ram       usbdisk1  usbdisk2
root@UDE:~# ls /mnt/disk1/
share
root@UDE:~# mkdir /mnt/disk1/tmp
root@UDE:~# mv /tmp/initrd.gz /mnt/disk1/tmp
root@UDE:~# gunzip /mnt/disk1/tmp/initrd.gz
root@UDE:~# mount -o loop /mnt/disk1/tmp/initrd /tmp/root
root@UDE:~#
ようやくマウントできた。

initrd..buffalo の中身

inittab

まずは、納得できていない /etc/inittab。
root@UDE:~# cd /tmp/root/etc/
root@UDE:/tmp/root/etc# cat inittab
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty -L ttyS0 115200 vt100

::restart:/sbin/init
::shutdown:/etc/init.d/rcDown
::shutdown:/bin/umount -r /
root@UDE:/tmp/root/etc# diff /etc/inittab inittab
root@UDE:/tmp/root/etc#
あれ?同じ。

あーそーか。大きな勘違い。
各行が :: で始まってるので、コメントアウトされていると思っていたが、 おお間違い。
id も runlevels も省略されているだけで、 各エントリがちゃんと機能する。

納得してしまった。




LS-GL:nvram コマンド
ハックの記録
LinkStation/玄箱 をハックしよう

LS-GL:ファンコントロール

Copyright (C) 2006 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市