从零开始移植buildroot-2022.02.6文件系统到imx6ull(1)-- 环境搭建
Buildroot 简介
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。
你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含uboot、kernel、rootfs以及rootfs中的各种库和应用程序)。
一、编译环境配置
必须要安装的工具命令如下:
sudo apt install -y sed make binutils build-essential gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file bc wget
可选安装的工具命令如下:
sudo apt install -y wget python libncurses5 bzr cvs git mercurial rsync subversion
下载arm-none-linux-gnueabihf-v10.3.1交叉编译器:
下载地址:arm-none-linux-gnueabihf-v10.3
二、下载buildroot-2022.08.1源码
下载地址:buildroot-2022.08.1.tar.gz
三、解压后进入buildroot目录编译
首先我们可以在 buildroot 根目录下执行 make help 命令来查看 buildroot 都支持那些编译命令,常用命令如下:
make clean // 表示删除编译生成的 build 缓存文件。
make all // 表示开始编译所有。
make menuconfig // 表示进入配置文件配置页面,用来选择增加或者删除某些包至目标(开发板)。
make savedefconfig // 将当前.config配置保存到BR2_DEFCONFIG(最小配置)
make <pkg> // 表示包名 - 后面为编译选项,可以使用 ls package/ 来查看都支持了那些软件包。
make busybox-menuconfig // 表示进入 busybox 配置菜单页面,用来增加/删除某些 busybox 配置。
make V=0|1 // 用来输出编译输出信息等级,一般使用 make <命令> V=1 来查看详细的编译步骤。
其次拷贝 configs 目录下的 imx6ullevk_defconfig 配置文件到 imx6ullevk_gateway_defconfig,之后我们直接在此配置文件上进行修改适配操作。
cp configs/imx6ullevk_defconfig configs/imx6ullevk_gateway_defconfig
// 选择配置文件编译
make imx6ullevk_gateway_defconfig
make -j8
四、修改默认配置编译
make imx6ullevk_gateway_defconfig
make menuconfig
1、Target options ---> 目标选项
Target Architecture (ARM (little endian)) ---> 目标体系结构
Target Architecture Variant (cortex-A7) ---> 目标体系结构变体
Target ABI (EABIhf) ---> 目标应用二进制接口
Floating point strategy (NEON/VFPv4) ---> 浮点策略
ARM instruction set (ARM) ---> ARM指令集
Target Binary Format (ELF) ---> 目标二进制格式
2、Toolchain ---> 工具链
根据实际需求配置如下:
Toolchain type (External toolchain) ---> 工具链类型(外部工具链)
Toolchain (Custom toolchain) ---> 工具链(自定义工具链)
Toolchain origin (Pre-installed toolchain) ---> 工具链来源(预装工具链)
(/opt/arm-none-linux-gnueabihf-v10.3.1) Toolchain path ---> 工具链路径
($(ARCH)-none-linux-gnueabihf) Toolchain prefix ---> 工具链前缀
External toolchain gcc version (10.x) ---> 外部工具链gcc版本
External toolchain kernel headers series (4.20.x) ---> 外部工具链内核头文件系列
External toolchain C library (glibc) ---> 外部工具链C库
3、Build options ---> 编译选项
4、System configuration ---> 系统配置
(buildroot) System hostname ---> 系统主机名
(Welcome to Buildroot) System banner ---> 系统欢迎语录
Init system (systemV) ---> 初始化系统模式,如/etc目录下BusyBox-/etc/x11,systemV-/etc/init.d/等
[*] Enable root login with password ---> 启用root登录密码
Root password ---> root登录密码
/dev management (Dynamic using devtmpfs + eudev) ---> 对/dev的处理方式有如下四种:
对/dev的处理方式有如下四种:
(1)Static using device table
这是 Linux处理设备文件的传统方法。使用这种方法,设备文件会被持久存储在根文件系统中(即重新启动后它们仍然存在),并且在系统添加或者移除硬件设备时,不能自动创建和删除这些设备文件。因此,Buildroot 使用设备表来创建一组标准的设备文件,默认设备表存储在Buildroot源代码的system/device_table_dev.txt文件中。
(2)Dynamic using devtmpfs only
devtmpfs是Linux内核中的一个虚拟文件系统,在内核 2.6.32 中引入(如果使用较旧的内核,则无法使用此选项)。在挂载到/dev后,此虚拟文件系统将在系统添加或者移除硬件设备时自动显示或者雄消失设备文件。devtmpfs文件系统在重新启动后并不持久,因为它是由内核动态填充的。
(3)Dynamic using devtmpfs + mdev
该方法同样依赖于 devtmpfs 虚拟文件系统(因此同样需要在内核配置中启用 CONFIG_DEVTMPFS 和 CONFIG_DEVTMPFS_MOUNT),但添加了 mdev 用户空间程序。mdev是 BusyBox 里面的一个组成程序,每次添加或移除设备时,内核都会调用mdev。
可以使用/etc/mdev.conf配置文件配置mdev,例如给设备文件设置特定的权限或所有权、在设备出现或消失时调用脚本或应用程序等等。允许用户空间对设备添加和删除事件做出反应。例如,当设备出现在系统上时,mdev 可用于自动加载内核模块。如果设备需要固件,则 mdev 也很重要,因为它会负责将固件内容推送到内核。
(4)(X) Dynamic using devtmpfs + eudev
此方法同样依赖于devtmpfs虚拟文件系统,但添加了eudev用户空间守护程序。eudev 是后台运行的守护程序,当系统添加或者移除设备时,内核将会调用eudev。
与 mdev 相比,它是重量级的解决方案,但是具有更高的灵活性。eudev是udev 的独立版本,udev 是大多数桌面 Linux 发行版中使用的原始用户空间守护程序,现已归入Systemd中。
5、Kernel ---> 内核
6、Target packages ---> 目标包
Audio and video applications ---> 音频和视频应用程序
Compressors and decompressors ---> 压缩器和解压器
Debugging, profiling and benchmark ---> 调试、剖析和基准测试
Development tools ---> 开发工具
Filesystem and flash utilities ---> 文件系统和flash实用程序
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 ---> 文件系统镜像
(rootfs) filesystem label ---> 文件系统的标签
(100M) exact size ---> 镜像包大小
[*] tar the root filesystem ---> tar根文件系统
Compression method (bzip2) ---> 压缩方法
8、Bootloaders ---> 引导装载程序
9、Host utilities ---> 主机工具
10、Legacy config options ---> 遗留的配置选项
五、保存配置,编译buildroot
make savedefconfig
make -j8
六、在output/images/目录下,生成“rootfs.tar.bz2”可烧录的文件系统镜像。
下一节对每个配置做细致记录。