第2章:环境准备:Linux主机环境要求、安装必要依赖包、下载Buildroot源码、目录结构初探
好,咱们正式开始动手了。这一章,说白了就是搭台子。台子搭不好,后面唱戏全得摔跟头。我见过太多新手,一上来就急着编译,结果缺这个少那个,折腾半天连个菜单都出不来。别急,咱们一步步来。
2.1 Linux主机环境要求
先说说主机。Buildroot这东西,说白了就是个自动化编译工具。它会在你的电脑上交叉编译出一整套嵌入式系统。所以,你的主机得够用。
硬件方面:
- CPU:双核以上,四核更佳。编译是个吃CPU的活儿,核心越多越快。我自己的笔记本是8核的,编译一个完整系统大概十几分钟。
- 内存:至少4GB,推荐8GB以上。你想想看,编译过程中要同时处理成千上万个文件,内存小了直接卡死。
- 硬盘:至少20GB空闲空间。Buildroot源码本身不大,但下载的软件包和编译产物会占不少地方。我个人习惯留出50GB,省心。
- 网络:必须能上网。Buildroot会从网上拉取各种软件包的源码,没网寸步难行。
软件方面:
- 操作系统:推荐Ubuntu 20.04 LTS或22.04 LTS。Debian、Fedora、CentOS也行,但Ubuntu的社区支持最好,遇到问题好搜答案。
- 文件系统:建议使用ext4。NTFS或FAT32可能会有权限问题,我在项目中遇到过因为文件系统不兼容导致的编译失败,排查了半天才发现是挂载参数不对。
2.2 安装必要依赖包
Buildroot依赖一堆工具链。少了任何一个,编译到一半就会报错。嗯,这里要注意,不同发行版的包名可能不一样,我以Ubuntu为例。
打开终端,执行以下命令:
sudo apt update
sudo apt install -y \
build-essential \
git \
wget \
cpio \
unzip \
rsync \
bc \
file \
python3 \
python3-distutils \
libncurses-dev \
libssl-dev \
flex \
bison \
gcc-multilib \
libc6-dev-i386 \
lib32z1 \
lib32stdc++6
这些包是干什么的?我简单说说:
build-essential:编译必备,包含gcc、g++、make等。libncurses-dev:提供菜单配置界面,就是那个蓝底白字的配置菜单。flex和bison:词法分析和语法分析工具,很多软件包需要它们生成代码。gcc-multilib:如果你要在64位主机上编译32位系统,这个必须装。
libssl-dev,导致编译Linux内核时SSL模块报错。后来我养成了一个习惯:每次装完依赖后,先跑一下make defconfig,如果没报错,说明环境基本OK了。
2.3 下载Buildroot源码
依赖装好了,接下来就是拿源码。Buildroot的源码托管在GitHub上,我们用git克隆下来。
cd ~
git clone https://github.com/buildroot/buildroot.git
cd buildroot
克隆完成后,你会得到一个buildroot目录。我个人习惯用git tag查看版本,然后切换到稳定版:
git tag -l '2024.*'
git checkout 2024.02
为什么要切到稳定版?因为master分支可能处于开发状态,有些功能不稳定。我在项目中吃过这个亏,用master分支编译到一半发现某个包版本冲突,折腾了两天才搞定。从那以后,我只用稳定版。
如果你不想用git,也可以直接下载压缩包:
wget https://buildroot.org/downloads/buildroot-2024.02.tar.gz
tar -xzf buildroot-2024.02.tar.gz
cd buildroot-2024.02
两种方式都可以,看个人习惯。我推荐用git,因为后续更新方便,一个git pull就搞定了。
2.4 目录结构初探
源码下载好了,咱们进去看看。用ls -l命令,你会看到一堆目录和文件。别慌,我带你捋一遍核心结构。
先上一张图,让你有个整体印象:
好了,图看完了,咱们一个个说:
| 目录/文件 | 作用 | 我的经验 |
|---|---|---|
arch/ |
存放CPU架构相关的配置,比如ARM、x86、MIPS等 | 一般不用动,除非你要加一个Buildroot不支持的架构 |
board/ |
板级支持包,包含特定开发板的配置文件、补丁、脚本 | 如果你用的是树莓派、BeagleBone等常见板子,这里能找到现成的 |
configs/ |
默认配置,运行make defconfig时从这里读取 |
我经常用make raspberrypi4_defconfig快速开始 |
package/ |
所有软件包的定义,每个包一个子目录 | 这是最核心的目录,后面我们会频繁进出 |
support/ |
辅助脚本和工具,比如下载器、依赖检查 | 出问题时,这里的脚本能帮你定位 |
toolchain/ |
工具链相关的配置和补丁 | 如果你用外部工具链,这里需要改 |
dl/ |
下载的软件包源码缓存 | 编译一次后,下次就不用重新下载了 |
output/ |
编译产物,包括镜像、根文件系统、编译日志 | 这个目录可以删掉,重新编译会重建 |
fs/ |
文件系统相关的配置,比如squashfs、ext2、cpio | 决定你的根文件系统用什么格式 |
Config.in |
顶层配置菜单,类似Kconfig文件 | 想加全局配置选项,就在这里加 |
Makefile |
顶层Makefile,整个构建的入口 | 别乱改,除非你知道自己在做什么 |
🔑 核心要点:你只需要关注configs/、package/、board/和output/这四个目录。其他目录,说实话,90%的情况下你根本不用碰。
嗯,到这里,环境就准备好了。依赖装了,源码下了,目录结构也心里有数了。下一章,咱们就开始第一次编译,看看Buildroot到底是怎么工作的。
公众号:蓝海资料掘金营,微信deep3321