一、开发背景
原开发板的文件系统拥有很大的冗余文件,需要裁剪文件系统或者根据需要定制文件系统
二、开发需求
1、构造最小系统,支持基本指令,例如 cd、ls、tar 等基础指令
三、开发环境
Linux Ubuntu 4.15.0-65-generic + buildroot-2023.02.3 + i.mx6d(cortex-A9)
buildroot 下载:https://buildroot.org/download.html (推荐使用长支持版本)
四、配置步骤
make menuconfig:打开图形界面配置
需要配置的选项包括一下:
Target options ---> 目标选项--->
Toolchain ---> 工具链--->
Build options ---> 生成选项--->
System configuration ---> 系统配置--->
Kernel ---> 内核--->
Target packages ---> 目标包--->
Filesystem images ---> 文件系统映像--->
Bootloaders ---> 引导加载程序--->
Host utilities ---> 主机实用程序--->
Legacy config options ---> 旧版配置选项--->
参考链接:https://ost.51cto.com/posts/10482
1、Target options
(1)Target Architecture:选择处理器架构,涉及到文件的存储方式,选择 (ARM (little endian)) ,一般 arm 选择小端模式
(2)Target Architecture Variant:选择内核核心,armv7a cores 架构下的 cortex-A9
(3)Enable NEON SIMD extension support:SIMD(单指令多数据流),针对视频和音频的扩展指令集加速,这里先不使能,没有这方面需求
参考链接:https://blog.csdn.net/whatday/article/details/87111526
(4)Enable VFP extension support:向量浮点运算支持,可以加速浮点运算,这里建议打开,后面才能选择 EABIhf,硬件浮点运算。
(5)Target ABI:(ABI: Application Binary Interface)选择应用的二进制接口,由于上面打开了 VFP 支持,所以这里选择 EABIhf
EABIhf:Embedded Application Binary Interface Hard Float,这个选项需要考虑和交叉编译工具链保持一致,我的交叉工具是 arm-linux-gnueabihf
(6)Floating point strategy:浮点策略,VFPv3 和 VFPv3-D16中选择一个,VFPv3 提供 32 个单精度运算寄存器和 32 个双精度运算寄存器
VFPv3 = VFPv3-D32,VFPv3-D16 即是在原来的基础上把双精度浮点运算从32个减半变成16个,减少了资源,这里先选择 VFPv3-D16,速度不够再提升
(7)ARM instruction set:指令集,保险起见选择 arm 指令集,可以考虑 Thumb2 指令集
arm 指令集是 32 bit 的,Thumb2 指令集兼容 16 bit 和 32 bit 指令
(8)Target Binary Format:二进制格式,没得选,直接 ELF
最后配置截图:
2、Toolchain
编译工具链配置,这里使用自定义的编译工具链
(1)Toolchain type:工具链类型,直接选择 External toolchain,即外部工具链,buildroot 也有交叉编译工具链,一般不用
(2)Toolchain:选择自定义工具链,即 Custom toolchain,可以从其他平台下载,不过一般都是用本地的
(3)Toolchain origin:工具链源,这里选择 Pre-installed toolchain,即已安装,后面提供路径即可,如果从其他平台下载,这里也有下载选项
(4)Toolchain path:工具链路径,即交叉编译工具链路径,注意:需要按住 ctrl 键才能删除,例如:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf
实际可执行路径:/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/,根据自己的路径填写
快速查看工具链路径:which arm-linux-gnueabihf-gcc,关键字 which
(5)Toolchain prefix:工具链前缀,根据自己的交叉编译工具链写,$(ARCH)-linux-gnueabihf ,源编译链:arm-linux-gnueabihf
(6)External toolchain gcc version:工具链 gcc 版本,命令行输入 arm-linux-gnueabihf-gcc -v 查询填写
(7)External toolchain kernel headers series:编译工具链的内核版本,这个比较麻烦,找到编译工具链源码文件 version.h
cat /opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h
如上图,找到版本文件,将数字 263680 转换成 16 进制 = 40600,即版本号 :4.06.00
(8)External toolchain C library:C 语言库支持库,可选 uClibc、glibc 和 musl,这里选择 glibc
uClibc 属于微型库,功能简单,不支持内存管理;glibc 相对庞大而功能齐全;musl 相对较新,不常用
(9)Toolchain has SSP support? (Stack Smashing Protector),即栈溢出保护,SSP是一项重要的安全措施,选择打开
(10)Toolchain has RPC support? (Remote Procedure Call),即远程调用功能,一般结合 NFS 使用,选择打开
(11)Toolchain has C++ support? 这个就不用多说了,直接打开
(12)Toolchain has D support? 这里的 D 指的是 D 语言,也是编程语言的一种,不打开
(13)Toolchain has Fortran support? 这里的 Fortran 也是编程语言的一种,不打开
(14)Toolchain has OpenMP support? 这里的 OpenMP 是并行设计方法,不打开
(15)Copy gdb server to the Target:把 GDB 服务器拷贝到系统中,可以远程调试软件,这里先打开(文件可能比较大),后续可以研究一下
(16)Copy gconv libraries:用于字符编码转换,先不打开
(17)Extra toolchain libraries to be copied to target:可以指定路径,把库拷贝到目标系统,后续可以添加相关路径
(18)Target Optimizations:优化相关,用法未知
(19)Target linker options:目标连接器,用法未知
最后配置截图:
3、Build options
这部分基本不用改,保持默认
4、System configuration
(1)Root FS skeleton 根文件系统骨架,实际上只是选择配置方式,这里选择默认 default target skeleton
(2)System hostname 系统名,还是修改一下,根据自己实际情况编写
(3)System banner 系统启动的欢迎语,根据自己实际情况编写
(4)/dev management 设备 U 盘的挂载方式,这里选择 Dynamic using devtmpfs + mdev
mdev 是 eudev 的简化版,详细参考:https://blog.csdn.net/bjr2016/article/details/103220862/
(5)Enable root login with password 默认登录账户名 root
(6)Root password 设置密码,根据自己实际情况编写
(7)Run a getty (login prompt) after boot 设置登录串口属性
1)TTY port 串口号,可以定死串口号,例如 ttymxc0,保留 console,串口号由 uboot 指定
2)Baudrate 设置波特率,可以设置,也可以又内核决定,即 keep kernel default
(8)其他的视情况配置
最后配置截图:
5、Kernel
这里只是构建文件系统,不需要内核,取消选中
最后配置截图:
6、Target packages
这里是文件安装包打包,先不修改
7、Filesystem images
这里是配置镜像文件属性的,暂时不动
8、Bootloaders
这里可以配置 uboot 等引导程序,考虑到只构建文件系统,取消所有选项
最后配置截图:
9、Host utilities
这里是主机应用相关配置,先不动
10、Legacy config options
这里是遗留的旧配置选项,先不动
11、最后执行 make,目标生成文件在 ./output/images/rootfs.tar
标签:buildroot,Toolchain,Target,文件系统,---,构建,linux,工具,arm From: https://www.cnblogs.com/yangjinghui/p/17649377.html