静的に構築されたビジーボックスとそのすべてのソフトリンクをコピーしたext2ファイルシステムを作成しました。また、busybox にはスティッキー ビットがあります (-rwsr-sr-x パーミッション)。/linuxrc がありますが、/etc/ ディレクトリにはあまりありません。そして、次のコマンドで ext2 ファイルシステムからイメージを作成します。
mkimage -C gzip -A ppc -O linux -T ramdisk -a 0x2000000 -n "ramdisk" -d initrd-ext2 initrd.img
私は initrd.img を /boot/ の別のファイルとして保持しており、カーネルの一部ではありません。
linuxrc の中身は
#!/bin/sh (Also tried #!/bin/busybox sh)
mkdir -p /proc /dev /sys /mnt /tmp
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mknod /dev/misc/rtc0 c 254 0
mdev -s
mkdir -p /new_root
mount /dev/mmcblk0p2 /new_root
exec switch_root -c /dev/console /new_root /sbin/init
カーネルが適切にロードされ、initrd.img もロードされ、linuxrc が実行されますが、最後に switch_root が使用方法のヘルプを提供します。
しかし、システムは引き続き起動し、新しい rootfs をロードします。以下はシーケンスです。
RAMDISK: ext2 filesystem found at block 0
RAMDISK: Loading 10240KiB [1 disk] into ram disk... done.
VFS: Mounted root (ext2 filesystem) on device 1:0.
Starting initramfs boot...
Waiting 5 seconds for devices to settle...
kjournald starting. Commit interval 5 seconds
EXT3 FS on mmcblk0p2, internal journal
EXT3-fs: mounted filesystem with writeback data mode.
BusyBox v1.21.0.git (2012-10-17 00:34:21 PDT) multi-call binary.
Usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGS]
Free initramfs and switch to another root fs:
chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,
execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.
-c DEV Reopen stdio to DEV after switch
VFS: Mounted root (ext3 filesystem) on device 179:2.
Trying to move old root to /initrd ... /initrd does not exist. Ignored.
Unmounting old root
Trying to free ramdisk memory ... okay
Freeing unused kernel memory: 200k init
INIT: version 2.86 booting
Please wait: booting...
mount: sysfs already mounted or /sys busy
mount: according to mtab, sysfs is already mounted on /sys
Starting udev
udev: starting version 154
Root filesystem already rw, not remounting
Caching udev devnodes
上記のシーケンスで initrd.img を終了した後、RAM は解放されますか?
linuxrc の最後で switch_root を実行せず、単に exit を配置するとどうなりますか? 古いinitrd imgからRAMを解放しませんか
.