som9331 构建最小根文件系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/heyuqian_csdn/article/details/77601105
系统启动后运行的第一个进程被称之为init进程,init进程的作用非常重要,包括挂载分区,初始化串口等等。

分析mips系统启动流程( 参考mips系统启动流程分析 ),可知默认的init进程是linuxrc,由busybox提供,当然我们也可以自己提供init进程

linuxrc进程中打开/dev/console以及/dev/null设备用作系统的输入输出(参考 关于/dev/console的个人理解),

,读取/etc/inittab系统初始化配置文件完成系统初始化。

因此构建最小根文件系统, 我们需要

1、移植busybox---提供init进程linuxrc,常用命令比如ls,ifconfig等

移植busybox比较简单,只需要指定好TOOL_CHAIN和ARCH,然后 make menuconfig,make,make install,

编译过程中如果出现某些命令编译不通过的情况,可以先不编译这些模块。

2、创建/dev/console, /dev/null以及/etc/inittab

手动创建sudo mknod console c 5 1, sudo mknod null c 1 3

/dev非常重要,包含了所有系统外部设备节点,如果都采用手动创建的方式,肯定是不行的。busybox提供了 mdev工具动态创建设备节点

mdev使用方法请参考busybox/docs/mdev.txt以及 构建根文件系统的/dev目录

inittab中会调用rcS脚本,inittab和rcS脚本书写格式,网上例子很多,这里不再赘述

3、添加程序运行所需动态库so文件,添加模块ko

动态库文件从工具链lib目录下copy *so* 文件到文件系统/lib目录下, 注意使用strip和objcopy命令对ko和so文件减肥

4、挂载分区以及系统文件系统proc和sys

挂载分区以及文件系统proc和sys,可以在rcS中使用mount -t命令手动挂载,

对于文件系统挂载,可以创建/etc/ fstab文件,然后再rcS中调用mount -a自动挂载

Ps:

本文是自己学习创建最小根文件系统的总结文档,相关代码以及提交位于github

希望对同样喜欢折腾的小伙伴们有点帮助

源码路径 https://github.com/heyuqian/som9331

相关提交Commits on Aug 9, 2017 ~Commits on Sep 5, 2017





























猜你喜欢

转载自blog.csdn.net/heyuqian_csdn/article/details/77601105
今日推荐