【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史

deanyuancn
发布于 2022-2-22 11:50
浏览
3收藏

 

 

一、基本信息

开发环境:Ubuntu16.04
开发平台:iMX6Q
内核版本:4.14.98

 

二、需要的软件

Buildroot Buildroot官网

本文下载版本的是:buildroot-2020.02.4.tar.bz2

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

三、使用 buildroot 制作根文件系统

1、拷贝 buildroot-2020.02.4.tar.bz2

拷贝 buildroot-2020.02.4.tar.bz2 到 Ubuntu 解压 并进入 buildroot-2020.02.4

cp /media/sf_share/6q/buildroot-2020.02.4.tar.bz2 .
tar xvf buildroot-2020.02.4.tar.bz2
cd buildroot-2020.02.4

四、选择配置并生成 .config文件

可以直接使用配置好的config config

1、选择配置文件

默认的配置放在 configs 目录下

根据自己的开发主板选择性对应的配置

在这里我选择了

freescale_imx6qsabresd_defconfig

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

2、生成 .config 文件

使用交叉编译工具链编译配置

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- freescale_imx6qsabresd_defconfig

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

编译配置成功

五、menuconfig 文件系统配置

进入图形化配置界面

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

打开图形化配置界面

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区选项说明:

Target options  --->				目标选项--->
Build options  --->					生成选项--->
Toolchain  --->						工具链--->
System configuration  --->			系统配置--->	
Kernel  --->						内核--->     
Target packages  --->				目标包--->
Filesystem images  --->				文件系统映像--->
Bootloaders  --->					引导加载程序--->
Host utilities  --->				主机实用程序--->
Legacy config options  --->			旧版配置选项--->

 

1、Target options —> 配置说明

目标选项:根据自己的实际情况选择,在这里我直接使用默认配置

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

默认配置:
因为 MX6Q CPU架构 是 cortex-A9,所以不需要修改【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

Target options 选项说明:

Target Architecture (ARM (little endian))  --->		目标体系结构(ARM(little endian))--->
Target Binary Format (ELF)  --->					目标二进制格式(ELF)-->
Target Architecture Variant (cortex-A9)  --->		目标体系结构变体(cortex-A9)-->
Enable NEON SIMD extension support					启用NEON SIMD扩展支持
Enable VFP extension support						启用VFP扩展支持
Target ABI (EABIhf)  --->							目标ABI(EABIhf)-->
Floating point strategy (VFPv3)  --->				浮点策略(VFPv3)-->
ARM instruction set (ARM)  --->						ARM指令集(ARM)-->

 

2、Build options —> 配置说明

生成选项:根据自己的实际情况选择,在这里我直接使用默认配置

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区默认配置:【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区Build options 选项说明:

 Commands  --->
 (/home/qwx/rootfs/buildroot-2020.05/configs/freescale_imx6qsabresd_defconfig) Location to save buildroot config
($(TOPDIR)/dl) Download dir												下载目录
($(BASE_DIR)/host) Host dir												主机目录
     Mirrors and Download locations  --->								镜像和下载位置--->
(0) Number of jobs to run simultaneously (0 for auto)					要同时运行的作业数(0表示自动)
[ ] Enable compiler cache												启用编译器缓存
[ ] build packages with debugging symbols								使用调试符号生成包
[*] strip target binaries												剥离目标二进制文件
	()executables that should not be stripped							不应剥离的可执行文件
	()directories that should be skipped when stripping					剥离时应跳过的目录
	gcc optimization level (optimize for size)  --->					gcc优化级别(优化大小)-->
	libraries (shared only)  --->										库(仅限共享)-->
($(CONFIG_DIR)/local.mk) location of a package override file			(配置目录)/本地.mk)包重写文件的位置
(board/freescale/imx6sabre/patches) global patch directories			全局修补程序目录
	Advanced  --->														高级--->
*** Security Hardening Options ***										***安全强化选项***
[ ] Build code with PIC/PIE												使用PIC/PIE构建代码
	*** Stack Smashing Protection needs a toolchain w/ SSP ***			***堆栈粉碎保护需要一个工具链w/SSP***
RELRO Protection (None)  --->											RELRO保护(无)-->
	*** Fortify Source needs a glibc toolchain and optimization *** 	***强化源代码需要glibc工具链和优化***

3、Toolchain —> 配置说明

编译工具链选择:这个需要根据自己的实际情况修改。在这里我总共修改了9个地方。【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

默认配置:【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

Toolchain 选项说明:

    Toolchain type (Buildroot toolchain)  --->									工具链类型(Buildroot Toolchain)-->
*** Toolchain Buildroot Options ***												***工具链构建根选项***
(buildroot) custom toolchain vendor name										自定义工具链供应商名称
    C library (uClibc-ng)  --->													C库(uClibc ng)-->
    *** Kernel Header Options ***												***内核头选项***
    Kernel Headers (Same as kernel being built)  --->							内核头(与正在构建的内核相同)--->
    Custom kernel headers series (4.19.x)  --->									自定义内核头系列(4.19.x)--->
    *** uClibc Options ***														***uClibc选项***
(package/uclibc/uClibc-ng.config) uClibc configuration file to use?				要使用的uClibc配置文件?
()  Additional uClibc configuration fragment files 								其他uClibc配置片段文件
[ ] Enable WCHAR support														启用WCHAR支持
[ ] Enable toolchain locale/i18n support										启用工具链区域设置/i18n支持
    Thread library implementation (Native POSIX Threading (NPTL))  --->			线程库实现(本机POSIX线程(NPTL))--->
[ ] Thread library debugging													线程库调试
[ ] Enable stack protection support												启用堆栈保护支持
[*] Compile and install uClibc utilities  										编译并安装uClibc实用程序
    *** Binutils Options ***													***Binutils选项***
    Binutils Version (binutils 2.32)  --->										Binutils版本(Binutils 2.32)-->
()  Additional binutils options													其他binutils选项
    *** GCC Options ***															***GCC选项***
    GCC compiler Version (gcc 8.x)  --->										GCC编译器版本(GCC 8.x)--->
()  Additional gcc options														其他gcc选项
[ ] Enable C++ support															启用C++支持
[ ] Enable Fortran support														启用Fortran支持
[ ] Enable compiler link-time-optimization support								启用编译器链接时间优化支持
[ ] Enable compiler OpenMP support												启用编译器OpenMP支持
[ ] Enable graphite support														启用graphite支持
    *** Host GDB Options ***													***主机GDB选项***
[ ] Build cross gdb for the host												为主机构建交叉gdb
    *** Toolchain Generic Options ***											***工具链通用选项***									
()  Extra toolchain libraries to be copied to target							要复制到目标的额外工具链库
[*] Enable MMU support															启用MMU支持
()  Target Optimizations														目标优化
()  Target linker options														目标链接器选项
[ ] Register toolchain within Eclipse Buildroot plug-in							在Eclipse Buildroot插件中注册工具链

 

①、Toolchain type () —>

默认是 Buildroot toolchain(内部工具链)【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

这里我们选择 External toolchain(外部工具链)【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选择外部工具链之后【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

②、Toolchain () —>

选择自定义工具链【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选择 Custom toolchain

 

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

 

选择自定义工具链之后【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

③、Toolchain origin () —>

选择工具链来源,默认就是选择 Pre-installed toolchain (预装工具链)

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

找到自己的交叉编译工具链的路径填写进去

我的交缠编译工具链 arm-linux-gnueabihf-gcc 是在这里,所以我们填入下面的路径,因为后面要填写交叉编译工具链前缀,所以我们路径只填写到 /bin 的上一级

/usr/lib/gcc/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区加入自定义交叉编译工具链之后

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

⑤、($(ARCH)-linux) Toolchain prefix ()

配置交叉编译工具链前缀

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区我的交叉编译工具链是

arm-linux-gnueabihf-

 

所以我们在这里填写上

$(ARCH)-linux-gnueabihf

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

配置交叉编译工具链前缀之后

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

⑥、External toolchain gcc version () —>

选择外部交叉编译工具链版本

在这里使用命令查看交叉编译工具链版本

arm-linux-gnueabihf-gcc -v

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选择外部交叉编译工具链版本【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选择4.9.X

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区选择外部交叉编译工具链版本之后【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

在这里我们进入交叉编译工具链目录,查找版本信息文件

find / -name version.h

vim ./usr/lib/gcc/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/usr/include/linux/version.h

 

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区将 196865 转换为16进制是30101,对于10进制来说就是3.1.1

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

在这里我们选择3.1.X

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选择外部工具链内核头系列之后

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDIwNTc3OQ==,size_16,color_FFFFFF,t_70)

⑧、External toolchain C library () —>

外部工具链C库【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选择 glibc/eglibc【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选择外部工具链C库之后【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

⑨、工具链支持C++ 选项【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

选上 Toolchain has C++ support?【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

⑩、Toolchain 最终配置【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

4、System configuration —> 配置说明

系统配置:这个需要根据自己的实际情况修改。在这里我修改了5个地方。【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

默认配置:

System configuration 选项说明:

Root FS skeleton (default target skeleton)  --->								根FS骨架(默认目标骨架)-->
(buildroot) System hostname														(buildroot)系统主机名
(Welcome to Buildroot) System banner											欢迎使用Buildroot)系统提示语
    Passwords encoding (sha-256)  --->											密码编码(sha-256)-->
    Init system (BusyBox)  --->													初始化系统(BusyBox)-->
    /dev management (Dynamic using devtmpfs only)  --->							/开发人员管理(仅动态使用devtmpfs)--->
(system/device_table.txt) Path to the permission tables							系统/设备_表格.txt)权限表的路径
[ ] support extended attributes in device tables								[]支持设备表中的扩展属性
[ ] Use symlinks to /usr for /bin, /sbin and /lib								对/bin、/sbin和/lib使用指向/usr的符号链接
[*] Enable root login with password												允许终端登陆使用密码
()    Root password																进入linux控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root
    /bin/sh (busybox' default shell)  --->										/bin/sh(busybox的默认shell)--->
[*] Run a getty (login prompt) after boot  --->									[*]启动后运行getty(登录提示)-->
[*] remount root filesystem read-write during boot								[*]在引导期间重新装载根文件系统读写
()  Network interface to configure through DHCP									要通过DHCP配置的网络接口	
(/bin:/sbin:/usr/bin:/usr/sbin) Set the system's default PATH					/bin:/sbin:/usr/bin:/usr/sbin)设置系统的默认路径
[*] Purge unwanted locales														清除不需要的区域设置
(C en_US) Locales to keep														要保留的区域设置
    *** NLS support needs a toolchain w/ wchar, dynamic library ***				***NLS支持需要一个工具链w/wchar,动态库***
[ ] Install timezone info														安装时区信息
()  Path to the users tables													表()的路径
()  Root filesystem overlay directories											根文件系统覆盖目录
()  Custom scripts to run before creating filesystem images						在创建文件系统映像之前要运行的自定义脚本
()  Custom scripts to run inside the fakeroot environment						在fakeroot环境中运行的自定义脚本
(board/freescale/common/imx/post-image.sh) Custom scripts to run after creating filesystem images		创建自定义映像后运行的文件系统脚本
()    Extra arguments passed to custom scripts									传递给自定义脚本的额外参数

①、修改系统主机名

System hostname【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

在这里可以修改自己需要的系统主机名【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

②、修改登录提示语

System banner【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

修改登录提示语【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

修改登录提示语之后【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

③、修改设备(U盘)挂载方式

/dev management (Dynamic using devtmpfs only) —>【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

buildroot中有4种设备节点管理方式:

这这里我们选择Dynamic using devtmpfs + mdev【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

配置说明:

1、Static using device table (静态分配,rootfs中有就有,没有的话,启动后也不会动态创建)

2、Dynamic using devtmpfs only (启动过程中动态创建,启动后不会自动创建设备节点)

3、Dynamic using devtmpfs + mdev(启动过程中动态创建,启动后使用mdev管理设备节点)

4、Dynamic using devtmpfs + eudev (启动过程中动态创建,启动后使用eudev管理设备节点)

 

④、修改登录密码

默认登录账户名为 root

默认登录账户名为 root

默认登录账户名为 root

默认为空的话,登陆时不需要输入密码。【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

修改登录密码(修改为自己想要设置的密码,如果不设置则默认不用输入密码登录,直接输入账户名 root 就能登录 )【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

⑤、修改系统登录串口号

Run a getty (login prompt) after boot —>【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

(ttymxc0) TTY port【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区TTY port 在这里修改为自己开发板的系统登录串口号

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

Baudrate 修改串口波特率【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

修改为自己串口的波特率【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

⑥、System configuration最终配置【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

5、Kernel —> 配置说明

内核配置:我们不需要在这里编译内核,在这里我们取消选中

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区默认配置

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

修改之后:【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

6、Target packages —> 配置说明

目标包:文件系统程序包和库文件安装包,这个需要根据自己的实际情况修改。在这里我直接使用默认配置。【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

默认配置:【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

Target packages 选项说明:

 -*- BusyBox
(package/busybox/busybox.config) BusyBox configuration file to use?		要使用的BusyBox配置文件?
()    Additional BusyBox configuration fragment files					其他BusyBox配置片段文件
[ ]   Show packages that are also provided by busybox					显示busybox也提供的包
[ ]   Individual binaries												单个二进制文件
[ ]   Install the watchdog daemon startup script						安装看门狗守护程序启动脚本
    Audio and video applications  --->									音频和视频应用程序--->
    Compressors and decompressors  --->									压缩机和减压器--->
    Debugging, profiling and benchmark  --->							调试、分析和基准--->
    Development tools  --->												开发工具--->
    Filesystem and flash utilities  --->								文件系统和闪存实用程序--->
    Fonts, cursors, icons, sounds and themes  --->						字体、光标、图标、声音和主题--->
    Games  --->															游戏--->
    Graphic libraries and applications (graphic/text)  --->				图形库和应用程序(图形/文本)-->
    Hardware handling  --->												硬件处理--->
    Interpreter languages and scripting  --->							解释器语言和脚本--->
    Libraries  --->														图书馆--->
    Mail  --->															邮件--->
    Miscellaneous  --->													其他--->
    Networking applications  --->										网络应用程序--->
    Package managers  --->												包管理器--->
    Real-Time  --->														实时--->
    Security  --->														安全性--->
    Shell and utilities  --->											Shell和实用程序--->
    System tools  --->													系统工具--->
    Text editors and viewers  --->										文本编辑器和查看器--->

 

7、Filesystem images —> 配置说明

文件系统镜像:在这里我直接使用默认配置【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

默认配置:【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

8、Bootloaders —> 配置说明

系统引导程序:【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

我们不需要在这里编译u-boot,我们取消选中u-boot。

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

修改之后:【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

9、Host utilities —> 配置说明

主机实用程序,【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

在这里使用默认配置。【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

10、Legacy config options —> 配置说明

旧版配置选项,

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

这里不用做任何修改。

【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

六、确认并且保存配置

使用键盘方向键移动至 Save【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

按下回车确认保存。【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

七、编译源码和下载相关文件

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

 

执行编译命令,会自动下载所需要的相关文件。编译需要时间,也需要网络。取决于你的配置和网速。慢慢等待即可。

生成的文件系统在 output/images 目录下,默认文件系统名字是 rootfs.tar。

八、格式转换

NXP使用的烧录工具 mfgtool2 使用的是 tar.bz2 格式
直接解压,然后在压缩成 tar.bz2 格式就可以了。

cd output/images/
sudo mkdir rootfs
sudo tar xvf rootfs.tar -C rootfs/
cd rootfs
sudo tar jcvf avdisplay-image-imx6q.tar.bz2 *

 

九、登录验证系统

可以看到我们之前设置的用户名和登录提示语。【Linux 系统】文件系统--- Buildroot 从零开始制作文件系统 史-鸿蒙开发者社区

 

分类
已于2022-2-22 11:50:18修改
1
收藏 3
回复
举报
回复
    相关推荐