很多人学嵌入式,卡住的地方不是写不出驱动,而是根本跑不起来一个能调试的环境。手上没有开发板,或者板子还在快递路上,代码写了也无从验证。这门课要解决的就是这件事:用 QEMU 在一台普通电脑上虚拟出一块 ARM 开发板,让 u-boot 把 Linux 内核拉起来,再从主机挂 NFS 根文件系统进去,最后能在"板子"上跑自己的应用和驱动。

先确认你缺的是哪一块

这门课不适合零基础直接啃。如果你对下面这些词只有模糊印象,学起来会比较吃力:交叉编译、设备树(dtb)、根文件系统、内核镜像 zImage 与 u-boot 的加载关系。反过来,如果你已经会写 Linux 应用、也看过驱动代码,但从来没亲手把 u-boot、kernel、rootfs 这三样东西串成一条完整的启动链,那这门课正好补上这个缺口。

另一个常见缺口是"只会用现成镜像"。厂商给的 SDK 一把梭,能跑,但换块板子、换个内核版本就懵了。课程的思路是自己编译、自己组装,逼你把每一环的输入输出搞清楚。这个过程比直接烧一个预编译镜像慢,但换来的是出问题时你知道该看哪一层。

这门课实际在搭什么

整条链路可以拆成四段,课程基本按这个顺序推进:

  • 宿主机侧:安装配置 QEMU,准备交叉编译工具链,明确虚拟开发板的型号和内存、外设参数。
  • 引导侧:编译 u-boot,理解它怎么被 QEMU 加载、怎么通过网络或镜像方式把内核和 dtb 拉进内存并跳转执行。
  • 内核侧:编译 Linux 内核镜像和设备树文件,配置内核里跟虚拟网卡、NFS 相关的选项——这一步配错,后面挂载一定失败。
  • 用户态侧:用 busybox 做一个最小根文件系统,配好 init 和基本目录结构,再通过 NFS 把它挂到开发板上,之后往里加应用和驱动模块。

注意第四段是重点。能进 shell 只是及格线,真正的练习是往这个 NFS 根文件系统里放东西:写个 hello 驱动编成模块,insmod 进去看 dmesg;写个用户态程序,交叉编译后直接丢进 NFS 目录,在开发板上跑。因为根文件系统在网络那头,改完不用重新烧写,改一次跑一次,这种迭代速度才是搭这套环境的意义。

容易翻车的几个点

搭这类环境,失败往往不是大错,而是一堆小配置对不上。提前有个心理准备:

  • 内核命令行里的 root=/dev/nfs 和 nfsroot 参数、主机 IP、开发板 IP 必须和 QEMU 的网络配置一致,任何一处对不上就是 kernel panic。
  • u-boot 的 bootargs 和 bootcmd 要设对,环境变量存不存、存哪儿也影响下次启动。
  • NFS 服务端的导出目录权限,别用 root_squash 卡住开发板上的 root 用户。
  • busybox 生成的 /dev、/proc、/sys 挂载点如果没在 init 脚本里处理,进去会发现少一堆设备节点。

这些问题课程里都会碰到,建议卡住时不要跳,把报错抄下来一个个查——排查过程本身就是这门课最有价值的部分。

看完应该能回答的问题

用这几个问题自测,答得上来才算真学会了:u-boot 把控制权交给内核时,具体传了哪些信息过去?设备树在这条链路里解决的是什么问题,为什么不用它行不行?NFS 根文件系统和烧在 flash 上的根文件系统,调试体验差在哪?如果换一块真实的 ARM 开发板,这套流程里哪些步骤要改、哪些可以照搬?

能把这几个问题讲清楚,你就不只是"跟着做了一遍",而是真的掌握了嵌入式 Linux 的启动逻辑。之后再面对任何一块新板子,你都有办法把它从零跑起来。

使用 QEMU搭建u-boot+linux+NFS开发环境

嵌入式开发环境搭建指南

编辑点评

深入浅出,从基础到实践,助你快速掌握QEMU、u-boot、Linux等嵌入式开发技术。

⭐ 编辑推荐

本课程带你一步步搭建嵌入式开发环境,从QEMU安装到NFS文件系统配置,全面掌握嵌入式开发技能。

课程亮点

• QEMU仿真开发环境搭建
• u-boot引导Linux内核
• NFS文件系统配置

课程目录

9.在开发板上运行应用和驱动程序.mp4  [32.9 MB]
8.完善NFS根文件系统.mp4  [49.1 MB]
7.挂载NFS文件系统.mp4  [37.0 MB]
6.使用u-boot引导Linux内核镜像.mp4  [155.6 MB]
5.使用busybo制作根文件系统.mp4  [161.0 MB]
4.编译Linux内核镜像和dtb文件.mp4  [63.7 MB]
3.QEMU安装及仿真开发板介绍.mp4  [131.4 MB]
2.搭建嵌入式开发基本环境.mp4  [166.4 MB]
1.为什么要使用QEMU学习嵌入式开发.mp4  [112.2 MB]

适合人群

  • 嵌入式开发爱好者
  • Linux系统工程师

学习收获

掌握嵌入式开发环境搭建
学会使用u-boot引导Linux内核
熟悉NFS文件系统配置

祝您学习愉快!

学有所成,前程似锦!