从开发板到自研板:RK3568设备树移植与定制编译实战
1. RK3568设备树移植入门指南第一次接触RK3568设备树移植的工程师往往会被dts文件中密密麻麻的节点和属性搞得晕头转向。我刚开始做这块的时候光是看那7000多行的代码就头疼。但其实只要掌握几个关键点移植工作就会变得清晰很多。设备树本质上就是个硬件描述文件你可以把它想象成装修房子的设计图。开发板厂商提供的dts文件就像是精装房的施工图纸。而我们要做的就是根据自己房子的户型硬件设计在这份图纸上做适当修改。RK3568的设备树结构通常包含以下几个重要部分CPU核心配置cpus节点内存映射memory节点时钟系统clocks节点各种外设控制器i2c、spi、pwm等节点2. 从开发板到自研板的移植流程2.1 获取基础设备树文件以创龙TL3568开发板为例官方BSP包通常会在编译后生成tl3568-evm.dtb文件。这个二进制设备树文件就是我们移植的基础。我建议先把它拷贝到工作目录cp /path/to/tl3568-evm.dtb ~/workspace/2.2 反编译设备树直接看二进制的dtb文件肯定不行我们需要用dtc工具把它转回可读的dts格式dtc -I dtb -O dts -o pl.dts tl3568-evm.dtb这个命令执行后会产生大量警告但不用紧张这些警告大多是关于phandle引用的不会影响我们的移植工作。2.3 关键节点识别技巧打开生成的pl.dts文件你会看到类似这样的CPU配置cpus { #address-cells 0x2; #size-cells 0x0; cpu0 { device_type cpu; compatible arm,cortex-a55; reg 0x0 0x0; enable-method psci; clocks 0x2 0x0; }; // 其他CPU核心... };对于自研板来说CPU部分通常不需要修改除非你的设计使用了不同的核心配置。3. 外设配置实战以I2C为例3.1 定位I2C控制器在7000多行代码中找到特定外设确实不容易。我常用的方法是先查芯片手册找到I2C1控制器的物理地址比如0xFF110000然后在dts文件中搜索这个地址i2c1: i2cff110000 { compatible rockchip,rk3568-i2c; reg 0x0 0xff110000 0x0 0x1000; interrupts GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH; clocks cru CLK_I2C1, cru PCLK_I2C1; clock-names i2c, pclk; pinctrl-0 i2c1_xfer; pinctrl-names default; #address-cells 1; #size-cells 0; status disabled; };3.2 启用外设控制器找到节点后最关键的是把status属性从disabled改为okaystatus okay;但仅仅这样还不够还需要检查pinctrl配置是否正确。有时候开发板的引脚复用配置和你的硬件设计不同这会导致外设无法正常工作。4. 电源管理关键配置4.1 RK809电源芯片配置RK3568开发板通常使用RK809作为电源管理芯片这个配置千万不能改错rk809: pmic20 { compatible rockchip,rk809; reg 0x20; interrupt-parent gpio0; interrupts RK_PA7 IRQ_TYPE_LEVEL_LOW; pinctrl-names default; pinctrl-0 pmic_int; rockchip,system-power-controller; #clock-cells 1; clock-output-names rk808-clkout1, rk808-clkout2; regulators { // 各种电源轨配置... }; };如果错误地禁用这个节点status disabled系统将无法正常启动。我在第一次移植时就犯过这个错误结果花了半天时间排查启动失败的原因。4.2 电压域配置另一个容易出问题的是电压域voltage domain配置vcc3v3_sys: vcc3v3-sys { compatible regulator-fixed; regulator-name vcc3v3_sys; regulator-always-on; regulator-boot-on; regulator-min-microvolt 3300000; regulator-max-microvolt 3300000; vin-supply vcc5v0_sys; };这些配置必须与你的硬件电源设计完全匹配否则轻则外设工作不正常重则损坏硬件。5. 编译与验证技巧5.1 编译环境搭建建议使用官方提供的docker编译环境可以避免很多依赖问题docker run -it --name rk3568-build -v $(pwd):/home/workspace rockchip-bsp:latest5.2 增量编译技巧全编译一次可能需要20-30分钟但修改设备树后可以只编译设备树make ARCHarm64 tl3568-evm.dtb编译完成后新的dtb文件会输出到kernel/arch/arm64/boot/dts/rockchip/目录下。5.3 启动日志分析烧录后通过串口查看启动日志特别重要。重点关注这几类信息[ 0.456789] rk3568-pinctrl pinctrl: pin gpio0-7 already requested by vcc5v0-host-regulator; cannot claim for i2c1-xfer这类错误通常表示引脚复用冲突需要检查pinctrl配置。6. 常见问题排查指南6.1 外设无法识别如果发现某个外设比如I2C设备在系统中看不到建议按这个流程排查检查设备树中对应控制器的status是否为okay确认时钟配置正确clocks属性验证pinctrl配置是否与硬件设计一致检查电源是否正常特别是3.3V和1.8V轨6.2 系统启动失败启动卡住或者不断重启时首先确认电源管理芯片配置正确检查内存配置是否与你的硬件匹配查看电压域配置是否正确确认bootargs参数没有冲突6.3 性能问题如果系统运行缓慢检查CPU频率调节是否正常确认thermal-zones配置正确查看DDR频率设置是否合理移植设备树是个需要耐心的工作我第一次完整移植RK3568设备树花了整整一周时间。但掌握方法后现在通常1-2天就能完成基础移植。最重要的是保持清晰的文档记录每次修改都要注明原因这样排查问题时才能快速定位。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2619546.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!