《嵌入式》自己制作rootfs根文件系统

使用busybox制作能在自己板子上跑起来的rootfs根文件系统

在嵌入式开发过程中,每次我们拿到一个新板子,首先要做的三大事情,就是烧录uboot内核引导程序,烧录linux kernel,烧录rootfs根文件系统。
让它们在板子上跑起来,以方便接下来的开发。
我将带大家从零开始制作rootfs根文件系统。

一、获得busybox源文件

在busybox的官网上我们可以下载最新的busybox源文件。将其下载到我们的ubuntu上位机上,最好找我们的tftp服务器目录,方便接下来的烧录。
在该目录下解压busybox源文件

tar -xvf  busybox-1.36.1.tar.bz2 

获得到busybox源文件后不要着急,先检查一下自己的工具是否准备好了。
即交叉编译器。交叉编译器直接决定了你生成的rootfs根文件系统与你linux内核的适配度。
准备好你当时编译linux kernel的编译器。
我这里使用的是 arm-cortex_a9-linux-guneabi-gcc

二、做准备工作

准备工作主要做三件事,首先,make clean清除以前的配置(头次使用可以不清理)
然后 修改Makefile 文件,指定架构,将ARCH ?= 的内容改为arm,如下图所示
(根据你开发板架构来)我使用的是arm架构的开发板。
将CROSS_COMPILE = 后面添加你的编译器名称,指定使用的编译器,如下图所示。
(我这里将编译器路径添加到环境变量中了,所以是使用的编译器名称,若你没有添加编译器路径到环境变量,请先将其添加,或者在这里使用编译器的绝对路径也可以)
在这里插入图片描述
在这里插入图片描述
设置完毕后保存退出。

接下来先使用 make defconfig来初始化我们的busybox,这里是关于该命令的解释。
在这里插入图片描述
接下来我们要使用 make menuconfig命令来配置里面的内容。
注意:如果该命令无法执行,请先安装相关依赖。
执行下述命令,来安装必要组件。再次运行 make menuconfig

sudo apt-get install libncurses5-dev

在这里插入图片描述
打开之后,会进入这样的界面。
可以配置一些功能。我们往下拉找到linux module utilities选项,进入。
在这里插入图片描述
进入后是以下画面,我们将simplified modutils 选项按n键去除选定。
将下面的命令选项全部按y键选定。
保存退出。

在这里插入图片描述
至此我们的准备工作到此为止。

三、编译

准备工作做完后,即可使用 make命令来编译busybox源码。
注意:可能会遇到错误。
如果发现错误,查看错误的文件名。
进入到 make menuconfig生成的菜单中寻找该选项,找到将其按n键去除。
这样在编译时就不会编译该文件。

四、安装

如果编译成功,那么执行 make install来安装生成的二进制文件。即把生成的二进制文件都集中拷贝到一个目录中。
busybox默认安装目录为_install,在busybox根目录下。
我们进入到_install目录,可以看到,busybox帮我们生成了三大必要目录。
分别是 bin sbin usr 目录。
这三个目录与用户命令有关。比如我们常用的ls命令。
除了这三个必要目录,还有dev,proc,sys以及lib和etc目录。
dev,proc,sys目录由内核在启动时创建,只有lib和etc目录需要我们自行配置。
(其他非必要目录可以自行创建)
在这里插入图片描述

五、构建lib目录

构建lib目录,就是拷贝必要的动态库文件和动态库链接器。在开发阶段,可以不必考虑动态库带来的巨大空间占用,因为rootfs一般通过nfs服务挂载,是放在上位机的Ubuntu系统中的。
使用编译器的 readelf -d
例如我的是 arm-cortex_a9-linux-gnueabi-readelf -d <应用程序名>可以查看相应应用程序的运行必要库文件。(在上位机执行该命令)例如下图所示:
在这里插入图片描述

得到所必要的库文件名后,到我们的交叉编译器根目录下。使用 find 命令来查找它们
在这里插入图片描述
将所有的动态库都拷贝到我们新生成的根文件系统的lib目录下。
注意:是拷贝所有的带 so的文件,这其中包括了动态库和链接器。不然仍然运行不了软件
拷贝完成后,就是如下图效果:
在这里插入图片描述
动态库的大小还是很大的。
为了节省空间。使用arm-cortex_a9-linux-gnueabi-strip <文件目录>可以缩减文件体积。
注意:这种方式会删除程序的debug信息。在研发阶段不要对软件进行strip,在发布阶段必须strip。
至此,lib目录构建完成。

六、构建etc目录

etc目录下主要是以下三个文件,一个目录,用于配置启动脚本。

在这里插入图片描述
在这里插入图片描述
先使用vi 编辑器创建 inittab文件,添加以下内容。
在这里插入图片描述
这里是告诉linux内核,在启动时先去etc/init.d目录执行rcS脚本文件。
并且执行完脚本文件,去bin目录执行sh可执行文件。来启动我们的shell终端
然后我们创建init.d目录,并在里面创建rcS脚本文件。
添加以下命令
在这里插入图片描述
这些命令和驱动、telnet服务有关。直接写入即可。
保存完退出,执行chmod 777 rcS给其执行权限。
再回到etc目录,创建fstab文件。
fstab文件与驱动相关。
添加以下命令:
在这里插入图片描述
保存退出。
那么至此,恭喜你,你做出了属于你自己的rootfs根文件系统。
在这里插入图片描述

接下来连上开发板,使用nfs挂载方式,看看能否挂载上。

或者制作镜像文件烧录到下位机。(可以看我的另一篇文章)

制作不易,请支持作者,你对作者的支持,有助于营造良好的学习交流环境。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值