2. 开发环境准备:Ubuntu系统安装与配置、必要软件包安装、工作目录规划
做嵌入式Linux开发,第一步就是把开发环境搭好。这步要是没弄好,后面全是坑。我个人习惯在Ubuntu上做Buildroot开发,原因很简单——社区支持最好,遇到问题搜一下就有答案。
2.1 为什么选Ubuntu?
你可能要问:用CentOS行不行?用Debian行不行?当然行。但我建议你直接用Ubuntu 20.04 LTS或22.04 LTS。为什么?
- Buildroot官方测试最多的就是Ubuntu
- 软件包版本够新,不会出现依赖冲突
- 社区资源丰富,遇到编译错误好排查
我的经验: 之前有个项目,团队里有人用CentOS 7,结果编译Buildroot时频繁报错,折腾了两天才发现是gcc版本太旧。换成Ubuntu后,半小时就搞定了。
2.2 Ubuntu系统安装要点
安装过程我就不细说了,网上教程一大堆。我只说几个关键点:
- 磁盘分区: 建议给根目录至少50GB空间。Buildroot编译时会下载大量源码包,加上编译产物,轻松吃掉20GB。
- 内存: 至少4GB,8GB以上更佳。编译大型项目时,内存不够会直接卡死。
- 网络: 确保能稳定访问外网。Buildroot会从GitHub、SourceForge等地方拉取源码。
注意: 如果你用虚拟机,记得给CPU分配至少2个核心。单核编译Buildroot,那速度...嗯,你会怀疑人生的。
2.3 必要软件包安装
系统装好后,第一件事就是装软件包。Buildroot对宿主机的依赖不多,但有几个是必须的。
打开终端,执行:
sudo apt update
sudo apt install -y git gcc make g++ \
libncurses5-dev libssl-dev \
flex bison bc \
cpio unzip rsync \
file wget curl
这些包是干什么的?我简单说一下:
| 软件包 | 用途 |
|---|---|
| git | 拉取Buildroot源码,管理自己的配置 |
| gcc, g++, make | 编译工具链,没有它们寸步难行 |
| libncurses5-dev | 提供menuconfig的图形界面 |
| flex, bison | 词法分析和语法分析工具 |
| bc | 计算器,内核编译时会用到 |
| cpio, rsync | 打包和同步文件 |
避坑指南: 我曾经漏装了libncurses5-dev,结果执行make menuconfig时直接报错。当时还以为是系统问题,折腾了半天才发现是少了个包。所以,建议你把上面这行命令完整执行一遍。
2.4 工作目录规划
我个人习惯把项目文件整理得清清楚楚。你想想看,如果所有文件都堆在桌面上,找起来多费劲。
推荐目录结构如下:
~/buildroot-project/
├── buildroot/ # Buildroot源码
├── dl/ # 下载的源码包缓存
├── output/ # 编译输出目录
│ ├── images/ # 生成的镜像文件
│ └── build/ # 编译中间文件
├── configs/ # 自定义配置文件
└── scripts/ # 辅助脚本
创建目录的命令:
mkdir -p ~/buildroot-project/{buildroot,dl,output/{images,build},configs,scripts}
为什么要这样规划?
- dl目录: 缓存下载的源码包。下次重新编译时,不用再下载一遍,省时间。
- output目录: 编译产物单独存放,不会污染源码目录。
- configs目录: 保存你自定义的配置文件,方便版本管理。
小技巧: 我会把dl目录软链接到一个单独的硬盘分区上。这样即使系统重装,源码包缓存还在,不用重新下载。特别是网络不好的时候,这个操作能救你一命。
2.5 验证环境是否就绪
装完包、建好目录后,最好验证一下:
# 检查git版本
git --version
# 检查gcc版本
gcc --version
# 检查make版本
make --version
# 检查目录结构
tree ~/buildroot-project -L 2
如果所有命令都能正常输出版本号,目录结构也正确,那环境就准备好了。
核心要点: 开发环境搭建看似简单,但细节决定成败。我见过太多人因为漏装一个包、目录结构混乱,导致后面编译失败。花10分钟把环境搭好,后面能省10小时。
好了,环境准备就到这里。记住一句话:磨刀不误砍柴工。把基础打牢,后面的学习才会顺畅。