You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
mount: only root can use "--types" option (effective UID is 1000)
mount: only root can use "--types" option (effective UID is 1000)
mount: only root can use "--types" option (effective UID is 1000)
mount: only root can use "--types" option (effective UID is 1000)
ls: cannot access '/sys/class/udc': No such file or directory
No udc Available!
在NXP的官方手册中,并没有给出如何使用initramfs。本文基于NXP的LS1046a的平台,对kernel、设备树以及initramfs进行FIT格式的打包,接着介绍如何启动initramfs以及如何从initramfs切换到真正的rootfs。LS1046a的分区已经FIT image的格式如下:
1. initramfs制作
1.1 导出initramfs
我们需要准备正确的initramfs的系统。通常initramfs系统有一些对于硬件的初始化的操作,所以对于不同嵌入式的平台,initramfs是不能够通用的。我们需要使用芯片原厂提供的initramfs。在NXP的bsp包中并没有给出initramfs的源文件,我们需要借助yocto工程中导出initramfs。
可以按照我下面的配置,也可以在initramfs的官方文档中使用他们的配置:
initramfs的配置可以参考官方文档:https://docs.yoctoproject.org/ref-manual/variables.html#term-INITRAMFS_IMAGE
core-image-base
使用bitbake core-image-base
core-image-minimal-initramfs
使用bitbake core-image-minimal-initramfs
输出的cpio.gz的文件就是initramfs的源文件。
1.2 修改initramfs
cpio.gz文件是一个gzip过的cpio文件。首先要解压:
gzip core-image-minimal-initramfs-ls1046ardb-20230920085754.cpio.gz
然后创建一个文件夹:
mkdir ramdisk && cd ramdisk && cp -r ../core-image-minimal-initramfs-ls1046ardb-20230920085754.cpio .
解cpio:
cpio -idmv < core-image-minimal-initramfs-ls1046ardb-20230920085754.cpio
开始修改文件(我目前的修改是改的rootfs的函数,主要意思就是把SD卡的mmcblk0p3分区挂载在/rootfs上)该脚本会自动switch_root到/rootfs
打包这里需要使用脚本操作(因为必须是root权限)
这个脚本一定要sudo运行,否则会出现:https://wowothink.com/866559ba/ 提到的
only root can use
问题:参考:https://www.linuxquestions.org/questions/linux-software-2/nfs-rootfs-mount-only-root-can-mount-proc-on-proc-4175595326/
此时,我们拿到了我们修改过的new_initramfs.cpio.gz 文件,一会,这部分要放入到FIT image中。
2. FIT image制作
这部分和一般的FIT image制作没有什么区别,我们需要准备:
撰写its脚本,命名为
ls1046a_fit.its
:需要注意的是地址问题,注意load的地址和uboot的加载FIT image的地址不要重叠,否则无法启动。
生成FIT image的命令是,如果找不到这个工具可以安装
sudo apt install u-boot-tools
:mkimage -f ls1046a_fit.its image.ub
最后我们得到一个image.ub文件。
3. uboot脚本
除此之外,还需要修改uboot脚本,让uboot去读取我们的FIT的image,并且从FIT格式的image启动。
3.1 bootargs
setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p3 rw rootwait earlycon=uart8250,mmio,0x21c0500; '
注意:root=/dev/mmcblk0p3 或者 /dev/ram0 这个都无所谓了,因为FIT格式会强制从initramfs启动,而且真正的rootfs也是由initramfs的脚本控制切换。
3.2 bootcmd
setenv bootcmd 'mmc dev 0; fatload mmc 0:2 0xb0000000 image.ub; bootm 0xb0000000'
我这部分是放在了
/dev/mmcblk0p2
中,因此从这里读取image.ub。uboot阶段:
initramfs和rootfs阶段:
程序放在:https://github.com/carloscn/ls104x-bsp/tree/master/initramfs
End
The text was updated successfully, but these errors were encountered: