嵌入式 Linux 出问题时,经常不是应用代码的问题,而是系统还没正常启动。比如串口没有输出、内核卡住、根文件系统挂载失败、应用没有自启动。
理解启动流程可以帮助你定位问题发生在哪一层:
1
BootROM -> SPL -> U-Boot -> Kernel -> RootFS -> Init -> App
在嵌入式 Linux 中,内核需要知道硬件板子上有什么设备、这些设备接在哪些总线上、使用哪些 GPIO、中断、时钟和寄存器地址。
这些硬件描述不适合全部写死在驱动代码里,所以 Linux 使用设备树描述硬件。
设备树的作用:
嵌入式开发经常要和硬件打交道。传感器、屏幕、Flash、按键、LED、通信模块都需要通过某种接口和主控芯片连接。
最常见的外设接口:
理解这些接口,是从应用开发走向板级开发和驱动开发的基础。
交叉编译是指在一种平台上编译另一种平台运行的程序。比如在 x86_64 Ubuntu 电脑上编译 ARM 开发板运行的程序。
常见组合:
12
开发机:x86_64 Linux目标板:ARM Linux
为什么需要交叉编译:
嵌入式开发是围绕特定硬件设备进行的软件开发。和普通 PC 或服务器开发相比,嵌入式更关注硬件资源、实时性、功耗、启动速度、稳定性和长期运行。
常见设备: