嵌入式 Linux 不等于只能写 C。驱动和底层库仍以 C 为主,但业务服务、网络通信、配置管理、升级程序可以根据资源和团队能力选择 C++、Go 或 Rust。语言选型要看约束,不要只看偏好。
一、C
适合:
- 驱动。
- 底层库。
- 小型系统服务。
- 资源非常紧张的设备。
优点:
- 运行时轻。
- 工具链成熟。
- 和系统接口贴近。
缺点:
- 内存安全靠人。
- 工程规模大后维护成本高。
二、C++
适合:
- 稍复杂的业务服务。
- 需要抽象但仍关注性能。
- 已有 C++ 团队。
注意:
- 控制异常使用。
- 控制 RTTI。
- 控制动态分配。
- 明确 STL 使用边界。
C++ 可以提高表达力,但要有编码规范。
三、Go
适合:
- 网关类设备。
- 网络服务。
- MQTT/HTTP 较多的业务。
- 资源相对充足的 Linux 设备。
优点:
- 并发和网络开发效率高。
- 部署简单。
缺点:
- 二进制较大。
- 运行时占用较高。
- 交叉编译和 cgo 要注意。
四、Rust
适合:
- 需要内存安全的系统服务。
- 新项目。
- 团队能接受学习成本。
优点:
- 内存安全。
- 性能好。
- 适合长期维护。
缺点:
- 生态和交叉编译要提前验证。
- 学习曲线较高。
- 和 C 库集成需要 FFI。
五、选型建议
资源很小:
1 | C |
底层驱动和系统接口:
1 | C |
复杂业务服务:
1 | C++ / Go / Rust |
团队已有经验优先。语言选型不是炫技,能稳定交付、方便维护、适合设备资源才是关键。
六、验收点
选语言前先验证:
- 交叉编译是否顺畅。
- 运行时大小。
- 内存占用。
- 启动时间。
- 日志和崩溃排查方式。
- 和 C 库集成。
- OTA 后兼容性。
先做最小原型,再决定是否用于产品。
- 本文链接: https://blog.hansong.icu/2026/06/26/Embedded_Linux_Series_31_Language_Choice/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。