第2章:环境准备——Linux开发环境搭建、交叉编译工具链安装、BusyBox源码获取
各位同学,咱们正式开始动手了。
做嵌入式Linux裁剪,第一步不是打开代码编辑器,而是先把“厨房”收拾利索。你想想看,如果锅碗瓢盆都没摆好,菜刀也没磨,那后面再怎么折腾也是白搭。这一章,我就带你把这套环境搭起来。
2.1 Linux开发环境搭建
先说宿主机。我个人的习惯是直接用Ubuntu 20.04 LTS,64位版本。为什么选它?因为社区活跃,遇到问题随便一搜就有答案。你如果用的是CentOS或者Debian,也没问题,但后面有些包的名字可能不一样,自己注意一下。
装好系统之后,第一件事是更新软件源,然后安装必要的开发工具。别偷懒,这一步不做,后面编译BusyBox时会报各种莫名其妙的错。
核心依赖包清单:
sudo apt update
sudo apt install -y build-essential
sudo apt install -y libncurses5-dev
sudo apt install -y bison flex
sudo apt install -y git wget
sudo apt install -y gcc-arm-linux-gnueabihf
这里面,build-essential包含了gcc、g++、make这些基础工具。libncurses5-dev是BusyBox的menuconfig界面需要的,没有它你进不了图形配置界面。嗯,这里要注意,如果你用的是Ubuntu 22.04,可能需要装libncurses-dev,版本号有点区别。
我曾经在一个项目里,因为忘了装bison和flex,结果编译到一半卡住了,报了个语法解析错误。查了半天才发现是这两个工具没装。你说冤不冤?
2.2 交叉编译工具链安装
接下来是重头戏——交叉编译工具链。
说白了,我们是在x86的电脑上写代码,但最终代码要跑到ARM的板子上。所以需要一个“跨平台”的编译器。我建议你直接用Ubuntu源里自带的版本,省事。
小提示:如果你用的是ARM Cortex-A7或A9这类芯片,arm-linux-gnueabihf就够用了。如果是Cortex-M系列,那得用arm-none-eabi-,别搞混了。
安装完成后,验证一下:
arm-linux-gnueabihf-gcc --version
如果能看到版本号,说明工具链已经就绪。我记得第一次做交叉编译时,看到这个版本号心里特别踏实——嗯,路没走偏。
有些同学喜欢自己从Linaro官网下载工具链,然后手动解压、配置环境变量。我个人觉得没必要,除非你有特殊需求。用系统包管理器安装,干净、整洁、好卸载。
避坑指南:我曾经遇到过一个问题——工具链版本太新,导致编译出来的BusyBox在旧版内核上跑不起来。后来我统一用gcc 9.x系列,再也没出过事。所以,别盲目追新,稳定第一。
2.3 BusyBox源码获取
环境搭好了,工具链也装上了,接下来就该请主角登场了——BusyBox源码。
获取源码有两种方式:
- 从官网下载稳定版:
https://busybox.net/downloads/ - 从Git仓库克隆最新版:
git clone git://busybox.net/busybox.git
我个人建议用稳定版。为什么?因为Git仓库里的代码可能正在开发中,说不定哪天就引入了一个bug。你想想看,咱们是来学裁剪的,不是来给BusyBox当测试员的。
下载并解压:
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar -xjf busybox-1.36.1.tar.bz2
cd busybox-1.36.1
解压之后,你会看到一堆目录和文件。别慌,咱们后面会一个一个讲清楚。现在你只需要知道,Makefile是编译的入口,Config.in是配置菜单的定义文件,applets/目录里放着所有小工具的源码。
核心知识点:BusyBox的源码结构非常清晰。它把每个Linux命令都实现成一个“小应用”(applet),然后通过一个统一的入口来调用。这就是为什么一个1MB的二进制文件能替代几十个命令的原因。
2.4 知识体系总览
为了让你对本章内容有个整体印象,我画了一张图。你看一眼就明白了:
这张图把本章的三个核心模块串起来了。你照着这个顺序走,不会乱。
2.5 验证环境是否就绪
最后,咱们做个快速验证。写个简单的C程序,用交叉编译器编译一下:
echo '#include <stdio.h>
int main() { printf("Hello BusyBox!\n"); return 0; }' > test.c
arm-linux-gnueabihf-gcc -o test test.c
file test
如果输出显示 ELF 32-bit LSB executable, ARM,那就说明你的交叉编译环境完全OK。我每次搭好环境都会跑一遍这个测试,算是给自己吃颗定心丸。
小技巧:把交叉编译器的路径加到~/.bashrc里,这样每次打开终端就不用再手动export了。具体加一行:export PATH=$PATH:/usr/bin(系统安装的默认就在这个路径,不用额外加)。
好了,环境准备就到这里。下一章咱们就开始真正进入BusyBox的配置界面,看看那些眼花缭乱的选项到底是什么意思。