嵌入式软件工程师修养
嵌入式工程师的成长,并不取决于会多少 API,而取决于 面对未知问题时的处理方式、工具的熟练程度以及 工程化思维。
一、面对未知问题的解决能力
嵌入式开发的日常,本质上就是不断遇到“没见过的问题”。
1. 信息来源优先级
遇到问题时,应按信息权威性和针对性逐级排查:
官方资料(第一优先级)
- Rockchip 官方文档 / Datasheet / TRM
- SoC Reference Manual
- BSP Release Note
通用知识
- Google(英文优先)
- Wikipedia(概念级问题非常有用)
社区与经验沉淀
- CSDN 站内搜索(中文场景)
- GitHub Issues / Discussions(真实问题+解决过程)
- Firefly 论坛
- 野火论坛
- 正点原子论坛
AI 工具(辅助)
- ChatGPT / Gemini / 豆包 / DS
适合理解概念、定位思路、快速生成排查 checklist,但不能替代官方文档
外援
- 同事 / 群友 / 前辈
- Rockchip 官方技术支持(问题足够清晰时)
2. 搜索技巧
传统搜索引擎
- 参考《搜索引擎的使用方法》 By 吴思含
AI 提问
- 尽量描述完整背景(SoC / OS / Kernel / 现象)
- 明确“你已经尝试过什么”
产品限定词的使用
-
当资料较少时:
rk3588 drm crash→drm crash arm linux
-
当问题与平台强相关时:
- 必须加上
rk3568 / rk3588 / android / linux
- 必须加上
搜索不是一次性行为,而是不断缩小问题空间的过程
二、提问的修养
一个工程师的水平,从提问方式就能看出来。
推荐阅读
- 《提问的艺术》 By 吴思含
- 《提问的智慧》 https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way
具体方式
1. 自助:想清楚再问
- 先搜索,看文档。
- 一句话说清“我最核心的问题是什么”。
2. 问清楚:让人好回答
- 说背景(你的环境、目标、已尝试的操作)。
- 给关键信息(错误日志、版本、相关代码块)。
- 一次聚焦一个具体问题。
3. 有始终:完成对话
- 用“请”、“谢谢”。
- 无论结果如何,都给予反馈。
- 在合适时,帮助其他人。
三、工具的熟练使用
工具能力,决定了你排查问题的效率上限。
软件工具
- VS Code:远程开发、搜索、调试
- Git:分支、回滚、rebase、cherry-pick
- SSH:远程调试、端口转发
- ADB:logcat、shell、pull/push
- Linux 基本命令:grep / sed / awk / find / diff
- VPN:访问官方资料、GitHub
硬件工具
- 万用表:供电、短路、通断判断
- 示波器:时序、波形
- 电烙铁 / 风枪:飞线、补焊
四、工程化笔记习惯
为什么一定要记笔记
- 好记性不如烂笔头
- 多数问题 以后会再次遇到
- 经验如果不沉淀,等于没积累
建议
- 熟悉 Markdown
- 笔记结构化、分层清晰
- 一次问题 = 一篇记录
-
及时记录
不要指望“有空了再整理”
五、客诉与现场问题应对
面对客户问题,第一步不是改代码,而是收集信息。
信息收集清单
- 板型 / 硬件版本
- 系统类型 / 系统版本
- 具体现象
- 连接了哪些外设
- 运行了哪些软件
- 是否稳定复现
- 拍视频 / 照片
- 抓完整日志
六、Bug 定位与解决方法论
基本原则
- 确保环境一致
- 确保稳定复现
- 扩大化解决:但对可能导致问题的代码有多处猜测时,先一次性全部更改验证猜想
- 最小化更改:如果扩大化解决有效,那么在提交代码时需要逐步排除(二分法),确保最后的bug补丁是最小化的,而不涉及不相关的改动
日志手段
dmesgdebug打点adb logcatjournalctl
对比法
- 与正常版本对比
- 与正常设备对比
- 与历史日志对比
七、自动化思维
优秀工程师的共同点: 讨厌重复劳动
原则
- 繁琐的事情 → 脚本化
- 易错的事情 → 工具化
- 重复的事情 → 自动化
示例
- 一键烧录脚本
- 自动抓日志
- 自动环境初始化
不要用脑力,去做机器更擅长的事
结语
技术会过时,但工程能力会一直升值。
留下评论