搞清eb配置前,先明确它到底管什么
eb配置本质上是一套嵌入式Linux系统的环境搭建与参数调优流程,核心围绕交叉编译工具链、内核裁剪、设备树修改和根文件系统构建四个模块展开。 按本文的顺序操作,多数情况下半天内就能生成第一版可烧录的镜像文件。
很多人第一次接触eb配置时,容易被各种术语绕晕,其实拆开看,它跟你平时装电脑系统没什么本质区别,只是目标平台从x86换成了ARM或其他嵌入式处理器,交叉编译的意思是,你在PC上写代码、编译,但最终产物跑在开发板上,工具链就是那把“翻译”代码的钥匙,内核决定硬件资源怎么调度,设备树告诉内核你的板子上有哪些外设、各在哪个地址,根文件系统则是系统启动后挂载的“C盘”。
eb配置和普通Linux配置的最大差异在哪
桌面Linux装完就能用,但嵌入式开发板的eb配置不能直接照搬x86的思维,行业共识认为,这两者的核心区别在于资源预算,桌面系统内存8GB起步,嵌入式板子常常只有256MB甚至更少,存储空间也以MB为单位计算,所以eb配置里你会见到大量“裁剪”“精简”“优化”的操作,这在普通Linux环境里几乎不会遇到。
另一个差异点是硬件绑定程度,普通Linux的驱动是通用化的,一块网卡插上去自动识别,嵌入式里,即使同一颗主控芯片,不同厂家做的板子在GPIO引脚分配上就有差异,这些信息全部记录在设备树文件里,改错一个引脚号,轻则外设不工作,重则内核启动直接崩溃,所以业内在做eb配置时,第一步永远是核对开发板的原理图与官方设备树源文件。
开始eb配置前需要准备什么
- 一台Linux主机或虚拟机,推荐Ubuntu 22.04 LTS,这是目前兼容性最稳妥的选择
- 一块具体的开发板,常见的有百元级的全志V3s、香橙派Zero系列,以及主流厂家如正点原子的IMX6ULL、STM32MP157
- 官方SDK或BSP包,这是厂家提供的底板支持包,里面含板级配置、预编译工具链和参考文档
- USB转串口模块、5V/2A电源、TF卡或USB烧录线
这里有个比较容易踩的坑:很多新手拿着开发板直接去网上搜“eb配置教程”,结果下载了和板子型号不匹配的内核源码,折腾几天编译不过去,正确做法是先确认板子的SoC型号和核心板版本,再找对应的SDK,全志、瑞芯微、NXP这些主流厂商的官网都提供公开下载渠道。
eb配置第一步:交叉编译工具链的安装与验证
交叉编译工具链是整个eb配置的地基,工具链版本选错,后续所有工作全部作废。
工具链版本怎么选才不出错
这得看开发板的芯片架构和SDK要求,ARM Cortex-A7、Cortex-A9这类老架构,用gcc 7.5或gcc 9.3都行,Cortex-A53、A72这些新一些的架构,建议gcc 10以上,工具链的命名规则里有个细节:

arm-linux-gnueabihf-表示ARM 32位硬浮点,aarch64-linux-gnu-表示ARM 64位,买板子时商家给的资料包里通常自带工具链,优先用自带的,比自己去网上下载的通用版本更匹配。
安装完成后怎么验证工具链正常
安装路径建议放在/opt/目录下,别放家目录,后面编译时路径问题会少很多。
- 解压SDK里的工具链压缩包:
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /opt/ - 添加环境变量:在
~/.bashrc末尾追加export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin:$PATH - 执行
source ~/.bashrc使配置生效 - 验证版本:执行
arm-linux-gnueabihf-gcc -v,能看到版本号和configure配置信息即表示成功 - 写个hello world测试交叉编译:
arm-linux-gnueabihf-gcc hello.c -o hello,再用file hello命令查看,显示ARM 32-bit格式说明交叉编译正常
这一步多花十分钟验证,能避免后面整个eb配置过程中工具链自身的问题干扰排查,业内专家指出,相当一部分编译报错案例的根因是工具链与内核源码的版本不匹配,而这些问题在验证步骤里就能提前发现。
eb配置核心环节:内核配置与设备树修改
内核是eb配置里最花时间的部分,因为它直接决定板子的功能表现和稳定性。
menuconfig下必须打开哪些配置项
进入内核源码目录,先执行make ARCH=arm eb_defconfig加载官方默认配置(具体名字看SDK文档,有的叫imx_v7_defconfig或sunxi_defconfig),然后执行make ARCH=arm menuconfig打开图形化配置界面。
以下功能项建议全部开启,否则后续调试会比较痛苦:
Device Drivers > Serial driver:串口驱动,日志输出和调试全靠它Device Drivers > Network device support:网卡驱动,对应你板子上的PHY芯片型号File systems > Flash file system:如果板载存储是NAND Flash,需要开启UBIFS支持Kernel hacking > KGDB:内核调试器,排查死机问题时能派上大用场General setup > Control Group support:容器和进程管理的基础
配置保存后会生成.config文件在源码根目录,这个文件后期还能用来对比不同配置的差异。
设备树dts文件修改实操案例
设备树文件在arch/arm/boot/dts/目录下,命名通常包含板子型号,比如imx6ull-14x14-evk.dts,修改前先备份原文件,这个习惯能救命。
以点亮板载LED为例,假设LED接在GPIO1_IO03引脚上,你需要做三件事:
&gpio1 {
led_pin: led-pin {
compatible = "gpio-leds";
led {
label = "status-led";
gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
default-state = "on";
};
};
};

在dts文件的根节点下添加这段内容,然后重新编译设备树:make ARCH=arm dtbs,生成的.dtb文件拷贝到烧录镜像的指定分区里,这个过程看着简单,但实际经常出错的地方是引脚号对应错误,比如GPIO1_IO03在部分SDK里编号是<&gpio1 3>,有些则写成<&gpio1 (10 1 + 3)>,建议对照芯片手册的GPIO编号表逐行核查。
eb配置里的根文件系统:Buildroot还是手动构建
系统启动完内核后,挂载的根文件系统决定了你能用哪些命令、跑哪些程序,这一步的策略选择直接影响开发效率。
Buildroot快速搭建的完整流程
Buildroot是嵌入式Linux圈子里最主流的构建工具,它帮你把交叉编译工具链、内核、根文件系统打包在一起管理,操作路径如下:
- 下载源码:
git clone git://git.buildroot.net/buildroot - 加载板级配置:
make qemu_arm_versatile_defconfig(换成你的板子对应配置) - 进入配置界面:
make menuconfig - 在
Target packages里勾选你需要的软件包,比如busybox、dropbear、wpa_supplicant - 执行
make,首次构建需要较长时间,视网络和机器性能而定,多数情况下需要二十分钟到一小时
完成后在output/images/目录下会生成rootfs.tar,这就是可用的根文件系统镜像。
手动构建根文件系统的关键步骤
如果你需要极致的裁剪,手动构建是更好的路子,核心思路就三步:创建目录骨架、拷贝busybox、完善etc初始化文件。
- 创建基础目录:
mkdir -p rootfs/{bin,sbin,etc,proc,sys,dev,lib,usr,var,tmp} - 用busybox编译安装:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install CONFIG_PREFIX=/path/to/rootfs - 编写
etc/inittab:定义系统启动后需要跑哪些初始化进程和服务 - 添加
etc/fstab:挂载proc、sysfs等虚拟文件系统
手动方式的好处是你能完全掌握根文件系统的每一个文件,坏处是遇到启动报错时排查范围很大,新手建议先把Buildroot跑通,理解整个流程后再挑战手动方案。
eb配置后的烧录与调试实战
配置完成不代表结束,烧录进板子能正常启动才算真正完成,这一环节最容易出问题,也是排查经验最值钱的部分。
烧录后串口无输出的排查顺序
串口没有任何日志是最常见的故障现象,按下面的顺序排查能快速定位问题:
- 确认串口线连接正确,尤其是TX和RX是否交叉连接,GND必须共地
- 检查开发板供电是否满足要求,很多板子在USB供电时能启动,但在外设较多时电压不稳导致系统反复重启
- 用示波器或万用表量一下主控芯片的供电引脚电压,常在3.3V和1.8V规范内
- 确认烧录工具选择的烧录地址与SDK文档一致,烧录地址错了系统压根找不到引导程序
- 查看Boot引脚拨码开关,全志芯片的启动方式由拨码开关决定,拨错位置会跳过SD卡启动

这套排查流程适用于绝大多数主流开发板,对适用于较新的瑞芯微、全志平台同样有效,近年来不少板卡厂商将启动模式改为按键切换,遇到无输出时先看看说明书,别一上来就怀疑配置。
网络不通时先查设备树而不是防火墙
开发板启动后配好IP却发现ping不通,很多人第一时间去查防火墙,方向完全错了,嵌入式板卡网络不通的根因八成在设备树或内核配置,按这个顺序排查更高效:
- 用
ifconfig -a查看网口是否存在,不存在说明设备树里的网卡节点没被正确识别 - 看
dmesg | grep eth的输出,能找到PHY芯片的复位信息 - 确认设备树里
phy-mode是否与实际PHY芯片一致,rgmii和rmii混用会直接导致网卡无法工作 - 检查内核配置里是否包含了对应PHY芯片的驱动
eb配置文件的备份与版本管理建议
配置文件散落在不同目录,工具链在/opt,内核的.config在内核源码根目录,设备树在arch/arm/boot/dts,rootfs构建脚本在Buildroot的configs目录,建议在eb配置完成后,将以上关键文件统一归档到git仓库管理,每次修改都打上tag,这个习惯能让你在后续迭代时快速回退到任意版本。
eb配置常见问题速查
eb配置大概需要多长时间能跑通
视经验而定,熟悉嵌入式开发的人按官方SDK文档操作,一个下午能跑通工具链、内核和根文件系统全流程,零基础新手第一次操作,多数情况下需要两到三天,主要时间花在环境安装和排查路径问题上。
eb配置里用的内核源码和桌面Linux内核源码有区别吗
同源,但嵌入式用的内核分支更关注裁剪度和硬件适配,桌面Linux内核包含大量桌面级驱动和外设支持,嵌入式内核源码则更精简,改动集中在设备树、板级配置和驱动裁剪上,下载渠道上,嵌入式厂商的SDK里通常带自己维护的分支,建议优先用这个,别去主线上直接拉最新代码。
eb配置过程中遇到编译错误看什么日志
重点看三个输出:第一是终端里最后三十行报错信息,多数情况下原因直接写在里面;第二是make日志中的开头的提示,这通常是依赖缺失或语法错误;第三是build/目录下的具体编译log文件,按关键词error检索能快速定位具体文件到行号。
