基于buildroot实现initramfs的启动以及文件系统的切换

发布时间 2023-08-16 13:34:25作者: LuckyBear0

新唐 ma35d1开发板为例:

1、修改文件:board/nuvoton/ma35d1/uboot-env.txt

mmcboot=if mmc dev 0; then echo "Booting form mmc ... ..."; setenv bootargs root=/dev/ram0  console=ttyS0,115200n8 rdinit=/init mem=${kernelmem}; mmc read ${kernel_addr_r} 0x1800 0xA000; bootm ${kernel_addr_r} ; fi;

a 以上需要修改mmc kernel的镜像大小 0xA000,单位是block,即512byte,实际大小是0xA000*512byte

这个大小根据实际输出的内核镜像来决定

b 修改init脚本,在init脚本中实现文件系统的挂载和切换,重要的是在切换之前需要拷贝dev目录到,示例:echo " mount real rootfs ....."

mount -t ext4 /dev/mmcblk1p1 /mnt

cp -rf /dev  /mnt

 

echo "The pid now is $$"  

exec switch_root -c /dev/console /mnt /sbin/init

c  系统使用了fit_uimage作为启动镜像 需要修改uboot启动参数

2 pack-sdcard.json文件:烧录的mmc分区大小

{

      "offset": "0x300000",

      "file": "fit_uImage",

      "type": 0

    } ,

    {

      "offset": "0x2400000",

      "file": "rootfs.ext4",

      "type": 0

    },

3、文件系统的配置修改:

4、make menuconfig

Filesystem images

(1)选择:initial RAM filesystem linked into linux kernel

去除UBI相关配置

 

(2)System configuration > Run a getty  将ttyS0改为console

 

 

 

 

 

 

(3)System configuration 选择下面

Dynamic using devtmpfs + mdev

 

 

 

 

 

4make linux-menuconfig,确认红框里面的值有

 

 

5、MA35D1_Buildroot/package/initscripts/init.d/rcS添加命令:mdev -s ,这个需要干净编译生效。或者在output/target/etc/init.d/rcS下修改,然后再make打包