荔枝派Zero(全志V3S)编译rootfs


前言

一、rootfs是什么?

rootfs翻译过来就是根文件系统。顾名思义,它属于文件系统范畴,文件系统的作用就是用来管理、储存文件的。文件的概念对于linux来说很重要,不是有一句话叫”一切皆文件“,Linux的一切行为与操作都反映在文件上。
上文我们编译的linux源码提供的是操作系统的“灵魂”(管理和调度逻辑),但还是需要“肉身”(文件系统)来落地实现。所以,你只是编译烧录kernel,是无法正常启动的,还需要再给它搭配一个文件系统。

buildroot可用于构建小型的linux根文件系统。

大小最小可低至2M,与内核一起可以放入最小8M的spi flash中。

二、安装依赖

首先安装一些依赖,比如linux头文件:

sudo apt-get install linux-headers-$(uname -r)
sudo apt-get install libncurses5-dev
sudo apt-get install wget
sudo apt-get install gcc automake autoconf libtool make

三、下载rootfs

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

在这里插入图片描述

四、配置rootfs

1、看下buildroot的目录结构

.
├── arch: #存放CPU架构相关的配置脚本,如arm/mips/x86,这些CPU相关的配置,在制作工具链时,编译uboot和kernel时很关键.
├── board
├── boot
├── CHANGES
├── Config.in
├── Config.in.legacy
├── configs: #放置开发板的一些配置参数. 
├── COPYING
├── DEVELOPERS
├── dl: #存放下载的源代码及应用软件的压缩包. 
├── docs: #存放相关的参考文档. 
├── fs: #放各种文件系统的源代码. 
├── linux: #存放着Linux kernel的自动构建脚本. 
├── Makefile
├── Makefile.legacy
├── output: #是编译出来的输出文件夹. 
│   ├── build: #存放解压后的各种软件包编译完成后的现场.
│   ├── host: #存放着制作好的编译工具链,如gcc、arm-linux-gcc等工具.
│   ├── images: #存放着编译好的uboot.bin, zImage, rootfs等镜像文件,可烧写到板子里, 让linux系统跑起来.
│   ├── staging
│   └── target: #用来制作rootfs文件系统,里面放着Linux系统基本的目录结构,以及编译好的应用库和bin可执行文件. (buildroot根据用户配置把.ko .so .bin文件安装到对应的目录下去,根据用户的配置安装指定位置)
├── package:#下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk。
├── README
├── support
├── system
├── toolchain
└── utils               # 实用工具

一般通过make xxx_defconfig来选择一个defconfig,这个文件在configs目录下。

当configs中不存在对应的开发板时,我们就要手动从头配置一遍。

2、选中Target options以选择licheepi对应的架构
①、使用make menuconfig进入配置界面。

Target options  --->选择目标板架构特性。
Build options  --->配置编译选项。
Toolchain  ---> 配置交叉工具链,使用buildroot工具链还是外部提供。
System configuration  --->
Kernel  --->
Target packages  --->
Filesystem images  --->
Bootloaders  --->
Host utilities  --->
Legacy config options  --->

licheepi用的v3s cpu 参数如下

CPU
ARM Cortex A7 @ 1.2GHz
Support NEON Advanced SIMD instruction
VFPv4 Floating Point Unit

②、选择相应的参数

Target Architecture (ARM (little endian))  --->
Target Binary Format (ELF)  --->
Target Architecture Variant (cortex-A7)  ---> 
Target ABI (EABIhf)  ---> 
Floating point strategy (VFPv4-D16)  ---> 
ARM instruction set (ARM)  --->

进入到界面后使用空格键选择对应的选项
在这里插入图片描述
3、 Build options主要配置以下一些内容

  • 配置文件保存位置,将配置文件保存的好处是,在重新构建时,只需要调用make <xxx_defconfig>然后make,而不必重新全部配置。

    示例:$(CONFIG_DIR)/configs/LicheePi_Zero_defconfig,。然后make savedefconfig保存配置文件。

  • 配置下载位置,因为系统构建的时候需要从网络上抓起很多软件报的代码进行编译构建。这个一般不需要修改。

  • strip target binaries建议使能,这样会使文件尺寸变小。

  • 对于其他的选项基本可以不做修改。
    在这里插入图片描述

4、Toolchain 配置交叉工具链
①、因为之前开发uboot和内核都用到了自己下载的工具链,所以这里也配置成外部工具链。
荔枝派Zero(全志V3S)编译Uboot及配置 一文中已讲解如何安装交叉编译器,这里不再做解释

执行 arm-linux-gnueabihf-gcc -v 出现以下信息则交叉编译器配置成功。

线程模型:posix
gcc 版本 6.3.1 20170404 (Linaro GCC 6.3-2017.05) 

②、配置成外部工具链

Toolchain type (External toolchain)  --->
x   ( ) Buildroot toolchain
x   (X) External toolchain

在这里插入图片描述

5、System configuration 配置系统参数

  • System hostname:根据需要定义一个字符串,是控制台前面的提示符xxx@vsi,这里改为 (licheepi) System hostname
  • Init system:这里选择busybox,轻量级使用非常广泛。可选的有systemV,systemd.
  • Root password配置登录密码。
    在这里插入图片描述

6、Target package
用于配置一些软件包,例如QT5

Target packages  --->
x  Graphic libraries and applications (graphic/text)  --->
xx   [*] Qt5  ---> 

在这里插入图片描述

五、编译rootfs

①、注意还要安装一下依赖

sudo apt-get install g++ patch cpio python unzip rsync bc

②、在 buildroot-2017.08 目录下执行make
two hours later…
报错了

libfakeroot.c: In function ‘chown’:

libfakeroot.c:99:40: error: ‘_STAT_VER’ undeclared (first use in this function)

   99 | #define INT_NEXT_STAT(a,b) NEXT_STAT64(_STAT_VER,a,b)

在这里插入图片描述
原因:由于fakeroot别人修复了一个bug,把_STATA_VER删掉了,重新打上最新的补丁即可。
解决方法:
从我的百度网盘里面自取
链接:https://pan.baidu.com/s/1HYoj8E7ht0elF8QKzzZRSw
提取码:tal3

或者访问这个链接
在这里插入图片描述
解压进入后将package/fakeroot/下所有文件替换到原buildroot-2017.08/package/fakeroot
在这里插入图片描述
替换之后目录下的文件:
在这里插入图片描述
在buildroot-2017.08目录下继续执行make
又报错了
在这里插入图片描述
解决方法:

find ./ -name c-stack.c

在这里插入图片描述

vim ./output/build/host-m4-1.4.18/lib/c-stack.c

做如下修改:
在这里插入图片描述
在buildroot-2017.08目录下再继续执行make
又又报错了
在这里插入图片描述
解决方法:
命令行执行下面三行指令

cd output/build/host-m4-1.4.18/
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h

在这里插入图片描述
在buildroot-2017.08目录下再继续执行make
终于成功了,编译完成后会在 output/images 下生成 rootfs.tar,
在这里插入图片描述

六、总结

整整搞了一下午加一个晚上,终于把 rootfs 编译成功了,其中遇到了很多坑,多半是由于版本不兼容的原因,但方法总比困难多,下篇文章我们就可以将之前编译的 uboot、linux 以及本文编译的 rootfs 烧录到 sd 卡中并插在板子上运行了。


我的qq:2442391036,欢迎交流!

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

须尽欢~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值