默认生成的根文件系统是只读的squashfs,不方便修改。想修改为ext2。前面三步都是参考《Rockchip Linux软件开发指南》
1、修改kernel的bootargs参数,文件位于 kernel/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi
compatible = "firefly,rk3308-firefly", "firefly,rk3308";
chosen {
- bootargs = "earlycon=uart8250,mmio32,0xff0c0000 swiotlb=1 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=squashfs rootwait";
+ bootargs = "earlycon=uart8250,mmio32,0xff0c0000 swiotlb=1 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=ext2 rootwait";
};
adc-keys {
2、修改 device/rockchip/rk3308/rockimg/对应的 parameter 文件,确保 rootfs 分区大小足够存放分区镜像。默认 0x00040000@0x0002E800(rootfs) ,前面是扇区个数,每个扇区512字节,因此默认rootfs分区大小是 262,144*512=134,217,728,即128M
3、修改 device\rockchip\rk3308\BoardConfig.mk 中 rootfs 文件系统类型
# Set rootfs type, see buildroot.
# ext4 squashfs
-ROOTFS_TYPE=squashfs
+ROOTFS_TYPE=ext2
# Set data partition type.
# ext2 squashfs
4、重新编译镜像,烧录进板子,但是无法启动。报错为
EXT2-fs (mmcblk0p6): error: couldn't mount because of unsupported optional features (240)
研究了一下,生成根文件系统的默认参数配置在 buildroot/configs/rockchip_rk3308_release_defconfig
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="128M"
BR2_TARGET_ROOTFS_SQUASHFS=y
而 buildroot/fs/ext2/Config.in 中
config BR2_TARGET_ROOTFS_EXT2_GEN
int
default 2 if BR2_TARGET_ROOTFS_EXT2_2
default 3 if BR2_TARGET_ROOTFS_EXT2_3
default 4 if BR2_TARGET_ROOTFS_EXT2_4
buildroot/fs/ext2/ext2.mk 中
$(HOST_DIR)/sbin/mkfs.ext$(BR2_TARGET_ROOTFS_EXT2_GEN) $(EXT2_OPTS) $@ \
"$(EXT2_SIZE)" \
因为 BR2_TARGET_ROOTFS_EXT2_4=y ,因此最后用的是mkfs.ext4来生成根文件系统的。试过修改 bootargs 把 rootfstype 改为 ext4 也不能启动,可能内核还是少了一些ext4的特性支持,还得改内核。最后的方案还是用ext2的根系统
修改 buildroot/configs/rockchip_rk3308_release_defconfig,屏蔽 BR2_TARGET_ROOTFS_EXT2_4=y
然后执行 source buildroot/build/envsetup.sh,更新参数
重新编译rootfs ,make
网友评论