承接前篇,我们的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)