制作根文件系统
因为busybox上集成了我们很多需要使用的工具,所以直接使用busybox来制作根文件系统把。
也是从开源的资料里找到busybox,然后make distclean清除之前的配置
busybox配置
make menuconfig 进行重新配置
配置交叉编译链
其他的我也不熟悉,不配置了,先用着吧,保存配置退出。
busybox配置补录
这里补录一些东西,再最后验证的调整rootfs后,发现怎么也加载不了驱动insmod: no gzip/bzip2/xz magic,然后发现网上刚好看到有解决办法,补录一下。(这也是为什么我愿意把一些自己踩过的坑记录下来原因,很感谢其他朋友分享自己踩过的坑,让我能解决我的问题,在自己有一定能力的时候,也想共享一点自己的能力帮助更多的朋友)
异常如下:
insmod: no gzip/bzip2/xz magic
insmod: no gzip/bzip2/xz magic
insmod: no gzip/bzip2/xz magic
参考网上的办法把simplified modutils关掉,把命令全部手动设置上,然后就修复了。因为目前是制作rootfs,暂不拓展更多,其他的一些分析思路我会在后面的编译驱动里具体讲解。
busybox编译
然后make;make install安装
真实的文件只有busybox,其他命令都是软连接,链接到busybox
集成文件系统
然后工具制作完成了以后,制作设备上真实使用的根文件系统把。
把busybox和提供资料里的etc文件拷贝过来,主要是rcS文件,以及还有依赖的Lib库,直接拷贝过来即可
然后再把ko文件拷贝过来,这个没有也没关系,后面制作,不影响启动。
制作文件系统
制作squashfs格式的文件系统
mksquashfs rootfs/ ./rootfs.squashfs.img -b 64K -comp xz
打出来有点大了,之前预分配的2M不太够
暂时先不了解裁剪了,反正没啥东西,先给他调整成3Mflash吧
setenv bootargs 'console=ttyS1,115200n8 mem=42M@0x0 rmem=22M@0x2a00000 init=/linuxrc rootfstype=squashfs root=/dev/mtdblock2 rw mtdparts=jz_sfc:256k(boot),2560k(kernel),3072k(root),-(appfs)';sa
重新烧写rootfs重启
结果还是起不来,难办。
提示 Failed to execute /linuxrc
[ 0.564886] Freeing unused kernel memory: 228K (804b7000 - 804f0000)
[ 0.593893] Failed to execute /linuxrc. Attempting defaults...
[ 0.600505] Kernel panic - not syncing: No init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[ 0.613370] Rebooting in 3 seconds..Restarting after 4 ms
检查了下文件格式,发现文件格式不对,这个是x86-64系统运行的,这个可能是和东山的编译链冲突了,后面显示的指定架构解决了
调整后文件格式如下
重启,发现还是存在问题
其实上面这些,都是因为Linux在运行时需要创建很多文件,而又不能递归创建,所以就要求我们在制作的时候把一些文件准备好,大家可以对比看下,缺的就创建下空文件夹就行。
zyz@DESKTOP-3E070L6:~/Zyz/t31--gc2053/rootfs$ ls
bin dev etc ko lib linuxrc proc run sbin sys tmp usr
大概结构如下,很多都是空文件夹:
不过在制作的时候,发现经常会出现重复的文件,这个是mksquashfs工具自己做的覆盖处理
在网上看了下,编译追加-no-duplicates参数即可
mksquashfs rootfs ./rootfsZyz3.img -b 64K -comp xz -no-duplicates
然后烧写,重新进入
久违了,终于回来了。。。。