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输入命令了。

 

posted @ 2019-08-01 16:55  克林斯顿  阅读(1519)  评论(0编辑  收藏  举报