嵌入式linux与物联网进阶之路三:根文件系统制作

Posted 程序诗人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式linux与物联网进阶之路三:根文件系统制作相关的知识,希望对你有一定的参考价值。

承接前篇,我们的linux内核终于制作好了,也顺利的加载起来了,但是由于没有根文件系统,所以说加载到最后,是无法进入系统的。而本节内容则是讲解如何来制作根文件系统的。

BuildRoot创建根文件系统

由于BuildRoot工具可以构建linux的根文件系统,而且其配置项内部集成了很多我们常用的工具,所以今天它就是我们的主角。在开始之前,我们需要确保机器上安装了编译所需要的的依赖,如下:

apt-get install linux-headers-$(uname -r)

此命令可以检测我们机器上缺少的一些依赖,当然,在编译过程中,我们肯定还需要安装一些其他的依赖,到时候在编译过程中,出现什么依赖错误,我们就利用apt install命令安装缺少的组件就行了。

之后开始下载我们的BuildRoot组件:

wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
tar xvf buildroot-2017.08.tar.gz
cd buildroot-2017.08/
make menuconfig

menuconfig配置

打开menuconfig后,我们可以看到本次编译需要设置的选项,都列在这里了,针对以下几个选项,我们可以进行设置以下,画框的部分需要注意:

Target options选项:

Tool chain选项,使用内置交叉编译链,出问题概率小:

System configuration配置如下,注意设置密码:

 

其他的就没什么了,大家可以翻阅其他选项,安装一些自己需要安装的组件即可。

make编译

保存menuconfig之后,在根目录位置输入如下命令开始制作:

make

需要提醒的是,整个构建过程非常长,大概需要2小时的样子,而且在编译过程中,需要下载很多组件,这里有一些常用的组件列表,我们把其解压到BuildRoot根目录下的dl目录中,由于在编译过程中,linux内核等也需要下载,但是下载地址非常慢:

https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.10.tar.xz
https://downloads.uclibc-ng.org/releases/1.0.26/uClibc-ng-1.0.26.tar.xz

一个是linux内核文件,一个是依赖包,我们可以用迅雷等工具下载好,然后把下载好的包也放到dl目录即可。就可以免去编译的时候下载耗费的时间了。

在编译过程中,一般会遇到如下问题:

Please port gnulib freadahead.c to your platform! 问题

此问题目前已经有解决方法了,可以点击这里查看,具体解决方案就是,按照图示进入进入buildroot/output/build/host-m4.1.4.17文件夹,然后执行如下命令即可:

sed -i \'s/IO_ftrylockfile/IO_EOF_SEEN/\' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h

而其他一些问题,基本上都是组件缺少的问题,利用apt install命令可以搞定。

漫长的等待之后,到这个界面,就说明编译成功了:

我们此时可以进入output/images目录中,就可以看到rootfs.tar文件在那里了。

文件烧写

由于之前我们只做好了第二分区,也就是/dev/sdb2,此时我们就可以将我们的根文件系统烧写进我们的tf卡了。

插上我们的usb读卡器,由于sdb2没法直接访问,所以我们需要挂载,整体需要执行如下命令:

sudo mkdir /mnt/sdb2                 //创建一个临时目录
sudo mount /dev/sdb2 /mnt/sdb2       //将sdb2挂载到此临时目录
sudo cp rootfs.tar /mnt/sdb2         //拷贝到sdb2中,此时sdb2中已经能看到跟文件
sudo tar -xf rootfs.tar              //进入目录并解压
sudo rm rootfs.tar                   //删掉tar
sudo sync
sudo umount /dev/sdb2

这样,重新插拔一次usb读卡器,我们就可以看到文件拷贝进来了。

然后将卡插回荔枝派nano,连接电脑,打开minicom,可以看到串口输出信息如下:

参考资料:

根文件系统编译 — 荔枝派Nano 全流程指南 documentation (lichee.pro)

 

以上是关于嵌入式linux与物联网进阶之路三:根文件系统制作的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式linux与物联网进阶之路四:嵌入式驱动开发思路

嵌入式linux与物联网进阶之路五:嵌入式驱动方式点亮LED

嵌入式操作系统与物联网演进之路

[架构之路-30]:目标系统 - 系统软件 - Linux OS根文件系统rootfs的概念组成制作以及用busybox制作根文件系统

嵌入式Linux开发-busybox根文件系统制作

嵌入式Linux内核以及根文件系统制作