嵌入式 Linux 是围绕具体设备构建的 Linux 系统。它通常包含启动程序、Linux 内核、设备树、根文件系统、驱动和应用,按硬件资源与产品需求选择和配置这些部分。把一个文件写入存储器只是部署过程的一步;系统能否启动和工作,还取决于整条软硬件链路是否匹配。
路由器、工业控制终端、机顶盒和网络设备都是常见应用。裁剪可以减少不需要的功能和占用,但可靠性、启动时间或实时性需要测量和设计,不能由「嵌入式」这个名称自动保证。
STM32 能运行 Linux 吗
跳转到“STM32 能运行 Linux 吗”先区分芯片型号,而不是只看 STM32 品牌:
| 平台类型 | 常见软件方式 | 需要辨别的条件 |
|---|---|---|
| 常见 Cortex-M STM32 MCU | 裸机或 RTOS | 通常没有面向普通 Linux 进程虚拟内存的 MMU,片内存储也有限 |
| STM32MP1 等包含 Cortex-A 的 MPU | Linux 运行在 Cortex-A 上 | 配套 DDR、启动链、板级支持与根文件系统 |
| 某些无 MMU 平台上的 Linux 移植 | 针对具体硬件的 NOMMU Linux | 可用内存、受支持内核、二进制格式和用户空间都有限制 |
例如,ST 的 OpenSTLinux 将 Linux 放在 STM32MP1 的 Cortex-A 一侧;带 Cortex-M4 的型号还可以让 M4 运行独立固件。ST OpenSTLinux 说明 明确区分这些软件组件。不能据此推断一块普通 STM32F103 开发板可直接使用 STM32MP1 的 Linux 镜像。
Linux 确实存在无 MMU 支持,但其进程和内存映射能力与普通 MMU Linux 不同,例如不能按通常方式使用 fork(),mmap() 也有额外限制。Linux NOMMU 文档 解释了这些约束。因此,「一些 MCU 有 Linux 移植」不等于「任意 STM32 都适合 Linux」。
在哪里开发,在哪里运行
跳转到“在哪里开发,在哪里运行”开发主机保存源码、编辑器、构建工具和调试工具;目标设备运行编译后的内核与程序。交叉编译器在主机上运行,生成目标架构的机器码,同时还需要匹配目标 ABI、C 库及头文件。主机上的同名库不能直接替代目标库。
嵌入式 Linux 的完整 BSP 和系统构建通常要求指定的 Linux 主机环境。Windows 或 macOS 可以承担编辑、串口和远程调试等工作,也可以通过虚拟机或符合项目条件的 Linux 环境构建;是否支持某种环境,应以 BSP 的实际要求为准。资源允许时,目标板本身也可以进行本地编译。
三类开发工作
跳转到“三类开发工作”应用开发使用 C、C++ 或其他语言实现界面、通信、数据处理与业务逻辑。应用通过系统调用、库或驱动接口访问设备。调试可以使用串口、日志、远程调试器或仿真器,但仿真不能证明真实外设时序正确。
系统和驱动适配处理板级启动、内核配置、设备树、时钟与引脚、外设驱动、文件系统和服务启动。已有 BSP 可减少重复工作;定制板仍需核对供电、存储、接口连接和资源分配。
部署与维护把匹配的引导程序、内核、设备树、根文件系统与应用送到目标设备。介质写入、网络部署、更新分区或预装都可以实现交付,具体方式由启动方案与更新机制决定。
一个网关的例子
跳转到“一个网关的例子”假设设备需要采集传感器数据,通过以太网上传,并提供一个配置页面。硬件选定后,先用对应 BSP 启动开发板,确认串口、存储和网络,再验证传感器驱动或用户接口。开发主机用目标工具链编译采集程序,把程序和服务配置加入 rootfs,生成镜像后进行板上测试。
验收应覆盖冷启动、设备断开、网络中断、日志与空间占用以及更新后的恢复能力。若采集还要求严格的微秒级响应,需要单独评估调度和中断延迟,必要时由硬件、实时内核或协处理器承担相应工作。
原始记录:CSDN 原文,首次发布于 2023-07-12。