第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源码。

获取源码有两种方式:

  1. 从官网下载稳定版:https://busybox.net/downloads/
  2. 从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章:环境准备知识体系 Linux开发环境 Ubuntu 20.04 LTS build-essential libncurses5-dev bison + flex 交叉编译工具链 arm-linux-gnueabihf gcc 9.x 稳定版 系统包管理器安装 验证: --version BusyBox源码 官网稳定版下载 tar解压 Makefile入口 applets目录 三者关系 宿主机环境 → 交叉编译工具链 → 编译BusyBox → 生成嵌入式系统 注意:工具链版本与内核版本要匹配,否则编译出来的二进制可能无法运行 建议:所有操作在普通用户下进行,不要用root

这张图把本章的三个核心模块串起来了。你照着这个顺序走,不会乱。

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的配置界面,看看那些眼花缭乱的选项到底是什么意思。


可可精品资料库