网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

RT-Thread 中设备树的适配方法 | 技术集结

时间:2026-04-04 18:05

人气:

作者:admin

标签:

导读:本文基于RT-Thread现有的DM(设备模型)框架,以Rock2F开发板为例,系统梳理了RK3528SoC的快速移植流程,涵盖了CLK、Pinctrl、ADC、NVMEM、Thermal、RNG等关键驱动的适配方法。目录前提产品介绍...

本文基于RT-Thread现有的DM(设备模型)框架,以Rock2F开发板为例,系统梳理了RK3528 SoC的快速移植流程,涵盖了CLK、Pinctrl、ADC、NVMEM、Thermal、RNG等关键驱动的适配方法。

目录


前提


产品介绍


准备


开始移植


DM 移植要素


查看需要移植的驱动


开始移植驱动


启动地址


工具链配置


Earlycon


配置启动


开始启动


代码仓库

1 前提

在bsp/rockchip中,可以看到目前已经以 DM 的方式支持了RK3566,RK3568,RK3576,RK3588等 SoC,接下来我们对来以 Rockchip RK3528 Rock2F 为例,简要说明 Rockchip 新 BSP 移植的流程。

2 产品介绍

官方网站:https://docs.radxa.com/rock2/rock2f

da2a377a-300d-11f1-ab55-92fbcf53809c.png

3 准备

这里笔者多准备了个树莓派 5 用的 FPC Connector with PCIe 2.0 用于 PCIe 的功能验证:

da3a1a96-300d-11f1-ab55-92fbcf53809c.png

首先按照 Radxa 官方教程,把 RadxaOS 刷进板子:https://docs.radxa.com/rock2/rock2f/getting-started/install-os

接入串口,把板子启动起来:https://docs.radxa.com/rock2/rock2f/radxa-os/serial

DebianGNU/Linux12rock-2f ttyFIQ0
rock-2f login: radxaPassword:Linuxrock-2f6.1.43-26-rk2312 #26SMP Tue Dec3013:28:44UTC2025aarch64Theprograms included with the Debian GNU/Linux system are free software;theexact distribution terms for each program are described in theindividualfiles in /usr/share/doc/*/copyright.DebianGNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermittedby applicable law.Lastlogin: Thu Jun2614:59:52UTC2025onttyFIQ0radxa@rock-2f:~$

上下、左右滑动查看

然后通过dtc工具,把SBC的设备树搞出来:

radxa@rock-2f:~$sudodtc -I dtb -O dts /sys/firmware/fdt -o Rock2F.dts

4 开始移植

在bsp/rockchip/dm中已经了一定的 DM 驱动,也就是说,只要移植部分RK3528没有并且需要的驱动即可:

da4cd38e-300d-11f1-ab55-92fbcf53809c.png

来源:https://github.com/RT-Thread/rt-thread/tree/master/bsp#-rockchip

5 DM 移植要素

在 DM 大部分平台中,以下驱动一般都是要提前确认并准备的:

PIC:中断控制器

CLK:设备时钟

Pinctrl:设备引脚复用

Power-Domain:设备电源域

UART:调试串口

以上设备基本可以保证一个 BSP 可以正常启动。

6 查看需要移植的驱动

在设备树中,我们可以看到大量以rockchip,rk3528-开头的 compatible 的设备节点,由于设备树支持驱动向下兼容,我们需要得知哪些节点是 Rockchip 在RK3528上新加的 IP 或者设备配置,所以下一步我们先把 rockchip linux 的源码 clone 下来:https://github.com/rockchip-linux/kernel/tree/develop-6.6

在 drivers 目录下,查找RK3528相关的驱动:

[gui@gui-pc drivers]$ grep -riE rk3528clk/rockchip/Makefileclk/rockchip/clk-rk3528.ccpufreq/cpufreq-dt-platdev.cdevfreq/event/rockchip-dfi.cdevfreq/rockchip_bus.cdevfreq/rockchip_dmc.cgpu/arm/mali400/mali/platform/rk/rk.cgpu/drm/rockchip/dw_hdmi-rockchip.cgpu/drm/rockchip/rockchip_drm_tve.cgpu/drm/rockchip/rockchip_drm_vkms.cgpu/drm/rockchip/rockchip_drm_vop2.cgpu/drm/rockchip/rockchip_vop2_reg.ciio/adc/rockchip_saradc.cmmc/host/sdhci-of-dwcmshc.cnet/ethernet/stmicro/stmmac/dwmac-rk.cnvmem/rockchip-otp.cpci/controller/dwc/pcie-dw-rockchip.cphy/rockchip/phy-rockchip-inno-hdmi-phy.cphy/rockchip/phy-rockchip-inno-usb2.cphy/rockchip/phy-rockchip-naneng-combphy.cpinctrl/pinctrl-rockchip.cpmdomain/rockchip/pm-domains.csoc/rockchip/rockchip-cpuinfo.csoc/rockchip/rockchip_pm_config.cthermal/rockchip_thermal.cvideo/rockchip/mpp/mpp_rkvdec2.cvideo/rockchip/mpp/mpp_rkvenc2.c

上下、左右滑动查看

我们把关注点放到几个重要的模块上:

da56e892-300d-11f1-ab55-92fbcf53809c.png

另外,部分驱动未必使用 RK3528 来命名,所以还是需要以设备树为主,比如这个 RNG 设备:

rng: rng@ffc50000{ compatible ="rockchip,rkrng"; reg = <0x00xffc500000x00x200>; interrupts = 23IRQ_TYPE_LEVEL_HIGH>; clocks = <&scmi_clk SCMI_HCLK_TRNG>; clock-names ="hclk_trng"; resets = <&cru SRST_HRESETN_TRNG_NS>; reset-names ="reset";};

上下、左右滑动查看

我们还需要完善dm/hwcrypto/hw-rng-rockchip.c的支持。

7 开始移植驱动

也就是说,我们只要支持clk和pinctrl,Rock2F 就应该可以跑起来了,然后再去支持ADC、NVMEM、Thermal、RNG就算是完成移植了

PIC

这里还是要提一下,RK3528采用的是 GICv2:

gic: interrupt-controller@fed01000 { compatible ="arm,gic-400"; #interrupt-cells =<3>; #address-cells =<0>; interrupt-controller; reg = <0x00xfed0100000x1000>, <0x00xfed0200000x2000>, <0x00xfed0400000x2000>, <0x00xfed0600000x2000>; interrupts = 9(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;};

上下、左右滑动查看

这个在 DM 中已经移植了,打开RT_PIC_ARM_GIC就可以直接用。

CLK 移植

参考 RK3568

以RK3568为例,我们可以看到 DM 已经集成相当多 CLK 接入模块(有些新的 Rockchip SoC 可能需要补充新模块):

[...]#include"clk-rk-composite.h"#include"clk-rk-cpu.h"#include"clk-rk-divider.h"#include"clk-rk-factor.h"#include"clk-rk-fraction-divider.h"#include"clk-rk-gate.h"#include"clk-rk.h"#include"clk-rk-half-divider.h"#include"clk-rk-mmc-phase.h"#include"clk-rk-muxgrf.h"#include"clk-rk-mux.h"#include"clk-rk-pll.h"#defineDBG_TAG"clk.rk3568"#defineDBG_LVL DBG_INFO#include#include[...]

上下、左右滑动查看

而每增加一个新驱动,就是要填充 CLK Cells 表,每个设备的 CLK 都有独立描述,可以参考 TRM 和 Linux 的实现:

[...]staticstructrt_clk_cell *rk3568_clk_cells[] ={ [PLL_APLL] = &rk3568_pll_apll.rk_cell.cell, [PLL_DPLL] = &rk3568_pll_dpll.rk_cell.cell, [PLL_CPLL] = &rk3568_pll_cpll.rk_cell.cell, [PLL_GPLL] = &rk3568_pll_gpll.rk_cell.cell, [PLL_VPLL] = &rk3568_pll_npll.rk_cell.cell, [PLL_NPLL] = &rk3568_pll_vpll.rk_cell.cell, [CPLL_333M] = COMPOSITE_NOMUX(CPLL_333M,"cpll_333m","cpll", RT_CLK_F_IGNORE_UNUSED, RK3568_CLKSEL_CON(79),0,5, DFLAGS, RK3568_CLKGATE_CON(35),8, GFLAGS),[...] FACTOR(0,"clk_gmac0_tx_div5","clk_gmac0",0,1,5), FACTOR(0,"clk_gmac0_tx_div50","clk_gmac0",0,1,50), FACTOR(0,"clk_gmac0_rx_div2","clk_gmac0",0,1,2), FACTOR(0,"clk_gmac0_rx_div20","clk_gmac0",0,1,20), FACTOR(0,"clk_gmac1_tx_div5","clk_gmac1",0,1,5), FACTOR(0,"clk_gmac1_tx_div50","clk_gmac1",0,1,50), FACTOR(0,"clk_gmac1_rx_div2","clk_gmac1",0,1,2), FACTOR(0,"clk_gmac1_rx_div20","clk_gmac1",0,1,20),};[...]

上下、左右滑动查看

然后在 platform bus 注册接口 probe 中,将 CLK 注册进系统,同时注册Reset设备复位模块进系统:

[...]staticrt_err_tclk_rk3568_probe(struct rt_platform_device *pdev){ [...] if((err =rt_clk_register(&cru->clk_parent))) { goto _fail; } rockchip_clk_setup(&cru->provider, cru->clk_parent.cells, cru->clk_parent.cells_nr); if((err =rockchip_register_softrst(&cru->rstc_parent, dev->ofw_node,RT_NULL, cru->provider.reg_base+RK3568_SOFTRST_CON(0),ROCKCHIP_SOFTRST_HIWORD_MASK))) { goto _clk_unregister; } rockchip_register_restart_notifier(&cru->provider,RK3568_GLB_SRST_FST,RT_NULL); returnRT_EOK; [...]}[...]staticconststructrt_ofw_node_idclk_rk3568_ofw_ids[] ={ { .compatible="rockchip,rk3568-cru", .data= (void*)clk_rk3568_cru_init }, { .compatible="rockchip,rk3568-pmucru", .data= (void*)clk_rk3568_pmucru_init }, {/* sentinel *

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信