1. 嵌入式系统Bring Up的核心概念第一次拿到一块全新的开发板时那种既兴奋又忐忑的心情我至今记忆犹新。Bring Up就像是给一个刚出生的电子设备做全面体检从确认它能正常呼吸通电到能够开口说话输出调试信息每一步都充满挑战。Bring Up本质上是一个系统唤醒的过程主要包括硬件验证、Bootloader配置、内核移植和驱动调试四个关键阶段。我习惯把这个过程比作教一个新生儿首先要确保它的身体器官都健全硬件检查然后教会它最基本的生存技能Bootloader接着培养认知能力内核最后让它掌握各种生活技能驱动。在实际项目中我遇到过各种千奇百怪的Bring Up问题。有一次一块基于RK3568的开发板死活不启动最后发现竟然是电源时序问题——PMIC的上电顺序搞反了。还有一次IMX6ULL的板子串口始终没输出折腾了两天才发现是UART电平转换芯片的使能脚没配置。提示建议准备一个checklist记录每个验证步骤这个习惯帮我节省了无数调试时间2. 硬件验证从开箱到通电拿到新板子时千万别急着上电。我通常会先做三件事目检、测量和最小系统测试。有一次因为跳过目检直接通电结果烧了一块价值上万的开发板——背面有个显眼的焊锡短路都没发现。万用表是硬件验证的最佳搭档。我养成的习惯是测量所有电源对地阻抗确保没有短路检查复位电路电压是否正常验证晶振是否起振用示波器更准确确认调试接口电压电平对于国产芯片要特别注意电源设计。比如全志H616的CVBS电路需要1.8V供电如果误接3.3V就会导致芯片发烫。我有个同事就因此烧过三块样板后来我们在checklist上用红字标注了这个注意事项。3. Bootloader移植与配置实战U-Boot是目前最常用的Bootloader但它的配置绝对是个技术活。记得第一次移植U-Boot到RK3399时我整整花了一周时间才搞明白trust.img的作用。以Rockchip平台为例典型的镜像烧录顺序是sudo dd ifidbloader.img of/dev/sdb seek64 sudo dd ifuboot.img of/dev/sdb seek16384 sudo dd iftrust.img of/dev/sdb seek24576设备树是另一个容易出问题的地方。有一次在Banana Pi R64上以太网始终无法工作最后发现是设备树里的phy地址写错了。建议在移植时先使用官方提供的设备树文件逐步修改适配自己的硬件使用fdtdump工具验证修改结果4. 内核移植与驱动调试技巧内核配置就像是在玩一个超复杂的拼图游戏。我的经验是先从defconfig开始然后通过menuconfig逐步添加需要的功能。曾经为了给IMX6ULL添加LCD支持我不得不深入研究framebuffer驱动的实现原理。驱动调试最有效的方法就是printk。我有个调试笔记本专门记录各种设备的调试技巧网卡驱动先看phy是否被正确识别USB设备检查dmesg中的枚举过程触摸屏用evtest工具测试原始数据对于I2C设备这个小技巧很实用# 扫描I2C总线上的设备 i2cdetect -y 15. 常见问题排查指南串口没有输出是最常见的问题之一。我的排查步骤通常是确认串口线连接正确TX/RX不要接反检查波特率设置特别是早期Bootloader阶段验证串口电平3.3V还是1.8V查看芯片手册确认UART引脚复用配置电源问题也经常让人头疼。有次遇到系统随机重启最后发现是DC-DC转换器的反馈电阻精度不够。现在我的工具箱里常备各种规格的精密电阻这个习惯帮我解决了不少电源问题。6. 高效调试工具推荐除了常规的万用表和示波器有几个软件工具特别实用OpenOCD支持各种调试接口J-Link CommanderARM芯片调试利器sigrok开源逻辑分析仪软件对于嵌入式Linux这些命令我每天都要用dmesg -w # 实时查看内核日志 ls /dev # 检查设备节点 top # 查看系统负载最近发现pyftdi这个Python库特别好用可以通过FTDI芯片实现各种协议的调试特别适合没有专业调试器时的应急使用。