【Rockchip】三、Linux SDK实战:从DTS定制到固件升级——以RV1126/RV1109串口与电源域改造为例
1. 项目背景与需求拆解
最近接手了一个雷达通信项目,需要把RV1126/RV1109开发板的摄像头接口改造成UART串口。这个需求听起来简单,但实际操作起来涉及到硬件电路改造、内核DTS修改、固件编译烧录等一系列技术环节。刚开始接触Rockchip平台时,我也被这些专业术语搞得一头雾水,经过几次实战才摸清门道。
具体来说,我们需要解决两个核心问题:首先是硬件接口的转换,开发板默认的摄像头接口需要重新配置为UART3/UART4;其次是电源适配问题,雷达模块需要3.3V供电,而开发板默认输出是1.8V。这两个需求都需要通过修改设备树(DTS)文件来实现,这也是嵌入式Linux开发中最关键的硬件抽象层配置。
2. 设备树(DTS)深度改造实战
2.1 摄像头接口的UART改造
打开SDK中的设备树文件(rv1126-evb-v10.dtsi),首先要找到摄像头相关的节点。这个文件就像是开发板的"硬件说明书",所有外设的配置信息都在这里。我通常在arch/arm/boot/dts目录下直接搜索"cif"关键字,很快就能定位到相关配置。
注释掉原有摄像头配置时要注意语法规范:
// &cif { // status = "disabled"; // };然后添加UART节点配置:
&uart3 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart3m0_xfer>; }; &uart4 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart4m0_xfer>; };这里有个容易踩坑的地方:pinctrl配置必须与硬件原理图上的引脚复用设置一致。我曾经因为漏掉这个配置导致串口无法正常工作,排查了半天才发现问题。
2.2 电源域电压调整技巧
电源域改造需要特别谨慎,RV1126的VCCIO6电源域默认输出1.8V,我们需要调整为3.3V。在dts文件中找到如下节点:
&vccio6 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; regulator-init-microvolt = <3300000>; };修改后务必检查三点:
- 确认电压值单位是微伏(μV)
- 确保min/max范围包含目标电压
- init电压要与目标值一致
这里有个重要安全提示:一定要先烧录新固件再修改硬件电路!我有次手快先改了电阻位置,结果芯片直接冒烟,损失了一块价值不菲的开发板。
3. 内核编译与固件打包
3.1 高效编译技巧
在SDK根目录执行编译命令时,我推荐使用以下组合:
./build.sh kernel -j$(nproc)这个-j参数会根据CPU核心数自动设置并行编译任务数,能大幅缩短编译时间。编译完成后,控制台会显示"Kernel build completed!"的提示。
验证编译是否成功的最快方法是检查生成的文件:
ls -lh kernel/arch/arm/boot/zImage ls -lh kernel/resource.img这两个文件的时间戳应该是最新的。
3.2 固件打包的注意事项
执行mkfirmware.sh时经常会遇到两个问题:一是依赖缺失导致打包失败,二是生成的固件大小异常。我的经验是:
- 打包前先清理旧文件:
rm -rf rockdev/*检查打包日志中的warning信息,特别是分区表相关提示
最终生成的boot.img文件通常在50-70MB左右,如果发现只有几MB,肯定是打包过程出了问题
4. 固件烧录的实战经验
4.1 Loader模式烧录详解
Loader模式是最常用的烧录方式,但实际操作中容易遇到设备识别问题。我总结的可靠步骤是:
- 开发板完全断电
- 按住Recovery键不放
- 插入USB线
- 保持按键3秒后松开
这时RKDevTool应该显示"发现一个LOADER设备"。如果显示未知设备,可以尝试以下方法:
- 更换USB端口
- 检查驱动是否安装正确
- 换条质量好的USB线
4.2 Maskrom模式应急方案
当Loader模式失效时,Maskrom就是最后的救命稻草。进入这个模式需要精准的按键时序:
- 开发板断电状态下按住Update键
- 快速点按Reset键一次
- 立即松开所有按键
成功进入Maskrom后,烧录时记得勾选Loader文件,这个文件一般位于SDK的rkbin目录下。我习惯使用v2.7.1版本的烧录工具,新版本反而经常出现兼容性问题。
5. 硬件电路改造要点
完成软件烧录后,最后一步是修改硬件电路。RV1126开发板背面通常会有标注VCCIO6的电阻位置,改造步骤是:
- 找到R100和R101电阻
- 将R100从1-2位置改为2-3位置
- 移除R101电阻(或改为0Ω跳线)
使用万用表测量确认电压输出已经变为3.3V后,就可以连接雷达模块进行测试了。这里特别提醒:所有操作都要在断电状态下进行,测量时再通电,避免短路风险。
6. 调试技巧与问题排查
实际项目中,最耗时的往往是调试阶段。我总结了几条实用技巧:
- 串口调试先确认底层是否通:
stty -F /dev/ttyS3 115200 echo "test" > /dev/ttyS3用示波器测量对应引脚应该有波形输出
- 电源问题排查顺序:
- 测量PMIC输出电压
- 检查LDO使能信号
- 确认负载是否短路
- 内核日志分析命令:
dmesg | grep -i uart cat /proc/device-tree/xxx遇到特别棘手的问题时,我会用二分法排查:先还原到上一个可用版本,然后逐步添加修改,直到问题复现,这样能快速定位问题根源。
