initramfs打包集成rootfs到image镜像及linux rootfs的正常启动
最近的项目中需要在仿真机haps及VDK上集成rootfs,中间遇到一些问题,在此整理记录以备忘。
rootfs里面集成的busybox版本1.29.3 (buildroot环境中自带)
kernel版本4.14
u-boot传递bootcmdline参数给kernel
在arch/arm64/configs中修改defconfig文件配置initramfs的文件路径
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="./rootfs_test"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES="jxx/jxx_jxx890_xyz"
CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y
rootfs需要支持:
1./dev management (Dynamic using devtmpfs + mdev)
2.busybox启动时的配置文件inittab的改动:
::sysinit:/bin/mount -t proc proc /proc
::sysinit:/bin/mount -o remount,rw /
::sysinit:/bin/mkdir -p /dev/pts /dev/shm
::sysinit:/bin/mount -a
::sysinit:/sbin/swapon -a
null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd
null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin
null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout
null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr
::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the serial port
#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
console::respawn:-/bin/sh #start console
# Stuff to do for the 3-finger salute
#::ctrlaltdel:/sbin/reboot
# Stuff to do before rebooting
::shutdown:/etc/init.d/rcK
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
3.遇到的问题
console一直进不去:
一开始怀疑是ttySx这个没对应的问题,也怀疑过bootcmdline有问题,甚至怀疑是kernel没有启动busybox。
最后发现是/dev目录下面的文件没有被正常创建的问题。
etc/init.d/S10mdev这个文件里面:
echo "Starting mdev..."
echo /sbin/mdev >/proc/sys/kernel/hotplug
/sbin/mdev -s (再启动时会执行创建/dev目录下面的文件)
S10mdev该文件会在init的时候执行,所以需要有可执行权限。若没有会提示:permission denied.
改过之后发现就可以正常打开console输入命令了。