哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread 中設(shè)備樹的適配方法 | 技術(shù)集結(jié)

RT-Thread官方賬號(hào) ? 2026-04-04 18:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文基于RT-Thread現(xiàn)有的DM(設(shè)備模型)框架,以Rock2F開發(fā)板為例,系統(tǒng)梳理了RK3528 SoC的快速移植流程,涵蓋了CLK、Pinctrl、ADC、NVMEM、Thermal、RNG等關(guān)鍵驅(qū)動(dòng)的適配方法。

目錄


前提


產(chǎn)品介紹


準(zhǔn)備


開始移植


DM 移植要素


查看需要移植的驅(qū)動(dòng)


開始移植驅(qū)動(dòng)


啟動(dòng)地址


工具鏈配置


Earlycon


配置啟動(dòng)


開始啟動(dòng)


代碼倉(cāng)庫(kù)

1 前提

bsp/rockchip中,可以看到目前已經(jīng)以 DM 的方式支持了RK3566,RK3568RK3576,RK3588等 SoC,接下來(lái)我們對(duì)來(lái)以 Rockchip RK3528 Rock2F 為例,簡(jiǎn)要說(shuō)明 Rockchip 新 BSP 移植的流程。

2 產(chǎn)品介紹

官方網(wǎng)站:https://docs.radxa.com/rock2/rock2f

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

3 準(zhǔn)備

這里筆者多準(zhǔn)備了個(gè)樹莓派 5 用的 FPC Connector with PCIe 2.0 用于 PCIe 的功能驗(yàn)證:

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

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

接入串口,把板子啟動(dòng)起來(lái):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:~$

上下、左右滑動(dòng)查看

然后通過(guò)dtc工具,把SBC的設(shè)備樹搞出來(lái):

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

4 開始移植

bsp/rockchip/dm中已經(jīng)了一定的 DM 驅(qū)動(dòng),也就是說(shuō),只要移植部分RK3528沒(méi)有并且需要的驅(qū)動(dòng)即可:

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

來(lái)源:https://github.com/RT-Thread/rt-thread/tree/master/bsp#-rockchip

5 DM 移植要素

在 DM 大部分平臺(tái)中,以下驅(qū)動(dòng)一般都是要提前確認(rèn)并準(zhǔn)備的:

PIC:中斷控制器

CLK:設(shè)備時(shí)鐘

Pinctrl:設(shè)備引腳復(fù)用

Power-Domain:設(shè)備電源

UART:調(diào)試串口

以上設(shè)備基本可以保證一個(gè) BSP 可以正常啟動(dòng)。

6 查看需要移植的驅(qū)動(dòng)

在設(shè)備樹中,我們可以看到大量以rockchip,rk3528-開頭的 compatible 的設(shè)備節(jié)點(diǎn),由于設(shè)備樹支持驅(qū)動(dòng)向下兼容,我們需要得知哪些節(jié)點(diǎn)是 Rockchip 在RK3528上新加的 IP 或者設(shè)備配置,所以下一步我們先把 rockchip linux 的源碼 clone 下來(lái):https://github.com/rockchip-linux/kernel/tree/develop-6.6

在 drivers 目錄下,查找RK3528相關(guān)的驅(qū)動(dòng):

[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

上下、左右滑動(dòng)查看

我們把關(guān)注點(diǎn)放到幾個(gè)重要的模塊上:

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

另外,部分驅(qū)動(dòng)未必使用 RK3528 來(lái)命名,所以還是需要以設(shè)備樹為主,比如這個(gè) RNG 設(shè)備:

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";};

上下、左右滑動(dòng)查看

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

7 開始移植驅(qū)動(dòng)

也就是說(shuō),我們只要支持clkpinctrl,Rock2F 就應(yīng)該可以跑起來(lái)了,然后再去支持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)>;};

上下、左右滑動(dòng)查看

這個(gè)在 DM 中已經(jīng)移植了,打開RT_PIC_ARM_GIC就可以直接用。

CLK 移植

參考 RK3568

RK3568為例,我們可以看到 DM 已經(jīng)集成相當(dāng)多 CLK 接入模塊(有些新的 Rockchip SoC 可能需要補(bǔ)充新模塊):

[...]#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[...]

上下、左右滑動(dòng)查看

而每增加一個(gè)新驅(qū)動(dòng),就是要填充 CLK Cells 表,每個(gè)設(shè)備的 CLK 都有獨(dú)立描述,可以參考 TRM 和 Linux 的實(shí)現(xiàn):

[...]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),};[...]

上下、左右滑動(dòng)查看

然后在 platform bus 注冊(cè)接口 probe 中,將 CLK 注冊(cè)進(jìn)系統(tǒng),同時(shí)注冊(cè)Reset設(shè)備復(fù)位模塊進(jìn)系統(tǒng):

[...]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 */}};staticstructrt_platform_driverclk_rk3568_driver ={ .name="clk-rk3568", .ids= clk_rk3568_ofw_ids, .probe= clk_rk3568_probe,};staticintclk_rk3568_register(void){ rt_platform_driver_register(&clk_rk3568_driver); return0;}INIT_SUBSYS_EXPORT(clk_rk3568_register);

上下、左右滑動(dòng)查看

實(shí)現(xiàn) RK3528

根據(jù)設(shè)備樹可以看到RK3528有一個(gè)基于 syscon 的 CRU,和一個(gè)主 CRU:

grf: syscon@ff300000 { compatible ="rockchip,rk3528-grf","syscon","simple-mfd"; reg = <0x00xff3000000x00x90000>; grf_cru: grf-clock-controller { compatible ="rockchip,rk3528-grf-cru"; #clock-cells =<1>; };};cru: clock-controller@ff4a0000 { compatible ="rockchip,rk3528-cru"; reg = <0x00xff4a00000x00x30000>; rockchip,grf = <&grf>; #clock-cells =<1>; #reset-cells =<1>; assigned-clocks = <&cru XIN_OSC0_DIV>, <&cru PLL_GPLL>, <&cru PLL_PPLL>, <&cru PLL_CPLL>, <&cru?CLK_MATRIX_250M_SRC>, <&cru?CLK_MATRIX_500M_SRC>, <&cru?CLK_MATRIX_50M_SRC>, <&cru?CLK_MATRIX_100M_SRC>, <&cru?CLK_MATRIX_150M_SRC>, <&cru?CLK_MATRIX_200M_SRC>, <&cru?CLK_MATRIX_300M_SRC>, <&cru?CLK_MATRIX_339M_SRC>, <&cru?CLK_MATRIX_400M_SRC>, <&cru?CLK_MATRIX_600M_SRC>, <&cru?CLK_PPLL_50M_MATRIX>, <&cru?CLK_PPLL_100M_MATRIX>, <&cru?CLK_PPLL_125M_MATRIX>, <&cru ACLK_BUS_VOPGL_ROOT>, <&cru ACLK_VO_ROOT>, <&cru ACLK_VPU_ROOT>, <&cru ACLK_VPU_L_ROOT>; assigned-clock-rates = <32768>, <1188000000>, <1000000000>, <996000000>, <250000000>, <500000000>, <50000000>, <100000000>, <150000000>, <200000000>, <300000000>, <340000000>, <400000000>, <600000000>, <50000000>, <100000000>, <125000000>, <500000000>, <340000000>, <300000000>, <200000000>;};

上下、左右滑動(dòng)查看

接下來(lái)如法炮制即可,這里我們只展示需要移植的關(guān)鍵:


/* 導(dǎo)入必要的時(shí)鐘 ID */#include[...]/* PLL 的時(shí)鐘頻率表 */staticstructrockchip_pll_rate_tablerk3528_pll_rates[] ={[...]};[...]/* CPU 的時(shí)鐘頻率表 */staticstructrockchip_cpu_clk_rate_tablerk3528_cpu_clk_rates[] ={[...]};/* CPU 的時(shí)鐘寄存器信息 */staticconststructrockchip_cpu_clk_reg_datark3528_cpu_clk_data ={[...]};/* 定義各種時(shí)鐘父級(jí)表 */PNAME(mux_pll_p) ="xin24m";PNAMES(mux_24m_32k_p) = {"xin24m","clk_32k"};[...]/* 定義各種 PLL Cell 信息 */staticstructrockchip_pll_clk_cellrk3528_pll_apll = PLL_RAW(pll_type_rk3328, PLL_APLL,"apll", mux_pll_p,1, RT_CLK_F_IS_CRITICAL, RK3528_PLL_CON(0), RK3528_MODE_CON, 0,0, RK3528_GRF_SOC_STATUS0,0, rk3528_pll_rates);[...]/* 定義各種 fracmux 子 cell 信息 */staticstructrockchip_clk_cellrk3528_uart0_fracmux = MUX_RAW(CLK_UART0,"clk_uart0", sclk_uart0_src_p, RT_CLK_F_SET_RATE_PARENT, RK3528_CLKSEL_CON(6),0,2, MFLAGS);[...]/* 定義各種 fracmux 子 cell 信息 */staticstructrockchip_clk_cellrk3528_uart0_fracmux = MUX_RAW(CLK_UART0,"clk_uart0", sclk_uart0_src_p, RT_CLK_F_SET_RATE_PARENT, RK3528_CLKSEL_CON(6),0,2, MFLAGS);[...]/* 填充 RT-Thread Cells 表,所有的 CRU 的 Cells 都需要在這里注冊(cè) */staticstructrt_clk_cell *rk3528_clk_cells[] ={ [PLL_APLL] = &rk3528_pll_apll.rk_cell.cell, [PLL_CPLL] = &rk3528_pll_cpll.rk_cell.cell, [PLL_GPLL] = &rk3528_pll_gpll.rk_cell.cell, [PLL_PPLL] = &rk3528_pll_ppll.rk_cell.cell, [PLL_DPLL] = &rk3528_pll_dpll.rk_cell.cell, [ARMCLK] = CPU(ARMCLK,"armclk", &rk3528_pll_apll.rk_cell, &rk3528_pll_gpll.rk_cell, rk3528_cpu_clk_rates, RT_ARRAY_SIZE(rk3528_cpu_clk_rates), &rk3528_cpu_clk_data), /* top */ [CLK_MATRIX_250M_SRC] = COMPOSITE(CLK_MATRIX_250M_SRC,"clk_250m_src", mux_gpll_cpll_p, RT_CLK_F_IS_CRITICAL, RK3528_CLKSEL_CON(1),15,1, MFLAGS,10,5, DFLAGS, RK3528_CLKGATE_CON(0),5, GFLAGS),[...]};/* 填充 RT-Thread Cells 表,所有的 GRF CRU 的 Cells 都需要在這里注冊(cè) */staticstructrt_clk_cell *rk3528_grfclk_cells[] ={ [SCLK_SDMMC_DRV] = MMC(SCLK_SDMMC_DRV,"sdmmc_drv","cclk_src_sdmmc0", RK3528_SDMMC_CON0,1), [SCLK_SDMMC_SAMPLE] = MMC(SCLK_SDMMC_SAMPLE,"sdmmc_sample","cclk_src_sdmmc0", RK3528_SDMMC_CON1,1), [SCLK_SDIO0_DRV] = MMC(SCLK_SDIO0_DRV,"sdio0_drv","cclk_src_sdio0", RK3528_SDIO0_CON0,1), [SCLK_SDIO0_SAMPLE] = MMC(SCLK_SDIO0_SAMPLE,"sdio0_sample","cclk_src_sdio0", RK3528_SDIO0_CON1,1), [SCLK_SDIO1_DRV] = MMC(SCLK_SDIO1_DRV,"sdio1_drv","cclk_src_sdio1", RK3528_SDIO1_CON0,1), [SCLK_SDIO1_SAMPLE] = MMC(SCLK_SDIO1_SAMPLE,"sdio1_sample","cclk_src_sdio1", RK3528_SDIO1_CON1,1),};/* 和 RK3568 一致的 CLK 注冊(cè)流程... */

上下、左右滑動(dòng)查看

RK3528 CLK 是新驅(qū)動(dòng)文件,需要在bsp/rockchip/dm/clk/Kconfigbsp/rockchip/dm/clk/SConscript注冊(cè)。

Pinctrl 移植

同樣是參考其他 SoC 的方式,Rockchip 的 pinctrl 設(shè)計(jì)中,主要是mux IO復(fù)用,pull 上拉drive 強(qiáng)度,schmitt trigger特性四大接口,不同平臺(tái)有不同的寫法和軟件修復(fù),在bsp/rockchip/dm/pinctrl/pinctrl-rockchip.c添加:

[...]staticrt_err_trk3528_set_mux(structrockchip_pin_bank *pin_bank,intpin,intmux)[...]staticrt_err_trk3528_set_pull(structrockchip_pin_bank *pin_bank,intpin,intpull)[...]staticrt_err_trk3528_set_drive(structrockchip_pin_bank *pin_bank,intpin,intstrength)[...]staticrt_err_trk3528_set_schmitt(structrockchip_pin_bank *pin_bank,intpin,intenable)[...]/* 填充 Rockchip SoC GPIO 表 */staticstructrockchip_pin_bank rk3528_pin_banks[] ={[...]};/* 填充 Rockchip pinctrl SoC 數(shù)據(jù)描述表 */staticstructrockchip_pin_ctrlrk3528_pin_ctrl ={ .pin_banks = rk3528_pin_banks, .banks_nr = RT_ARRAY_SIZE(rk3528_pin_banks), .label ="RK3528-GPIO", .type = RK3528, .grf_mux_offset =0x0, .set_mux = rk3528_set_mux, .set_pull = rk3528_set_pull, .set_drive = rk3528_set_drive, .set_schmitt = rk3528_set_schmitt,};[...]/* 添加設(shè)備樹匹配 ID 和 SoC 數(shù)據(jù) */staticconststructrt_ofw_node_idrockchip_pinctrl_ofw_ids[] ={[...] { .compatible ="rockchip,rk3528-pinctrl", .data = &rk3528_pin_ctrl },[...]

上下、左右滑動(dòng)查看

ADC 移植

Rockchip 的 ADC 移植非常簡(jiǎn)單,只需要針對(duì)不同的平臺(tái)增加 ADC 通道描述即可,在bsp/rockchip/dm/adc/adc-rockchip_saradc.c添加

staticconststructsaradc_channelrockchip_rk3528_channels[] ={ SARADC_CHANNEL(0,"adc0",10), SARADC_CHANNEL(1,"adc1",10), SARADC_CHANNEL(2,"adc2",10), SARADC_CHANNEL(3,"adc3",10),};/* SoC 使用的 ADC 采用不同版本的訪問(wèn)方式,需要根據(jù)手冊(cè)選擇對(duì)應(yīng)版本的接口 */staticconststructrockchip_saradc_soc_datark3528_saradc_data ={ .channels = rockchip_rk3528_channels, .num_channels = RT_ARRAY_SIZE(rockchip_rk3528_channels), .clk_rate =1000000, .start = rockchip_saradc_start_v2, .read = rockchip_saradc_read_v2,};[...]/* 添加設(shè)備樹匹配 ID 和 SoC 數(shù)據(jù) */staticconststructrt_ofw_node_idrockchip_saradc_ofw_ids[] ={[...] { .compatible ="rockchip,rk3528-saradc", .data = &rk3528_saradc_data, },[...]

上下、左右滑動(dòng)查看

NVMEM 移植

NVMEM 就更簡(jiǎn)單了,只要添加 otp 內(nèi)存的長(zhǎng)度,以及 otp 的讀取接口版本就行,在bsp/rockchip/dm/nvmem/nvmem-rockchip-otp.c中添加:

[...]staticconststructrockchip_otp_datark3528_data ={ .size =0x80, .read = rk3568_otp_read,};/* 添加設(shè)備樹匹配 ID 和 SoC 數(shù)據(jù) */staticconststructrt_ofw_node_idrockchip_otp_ofw_ids[] ={[...] { .compatible ="rockchip,rk3528-otp", .data = &rk3528_data, },[...]

上下、左右滑動(dòng)查看

Thermal 移植

Thermal 這塊 Rockchip 有新增加版本的接口,另外需要填充平臺(tái)溫度信息,在bsp/rockchip/dm/thermal/thermal-rockchip_tsadc.c添加:

[...]/* 填充通道值和溫度的查詢表 */staticconststructtsadc_tablerk3528_code_table[] ={[...]}/* 填充 SoC 溫度傳感器實(shí)現(xiàn)表 */staticconststructrockchip_tsadc_chiprk3528_tsadc_data ={ .chn_offset =0, .chn_num =1,/* one channels for tsadc */ /* 因?yàn)橹挥?CPU,所以使用默認(rèn)傳感器名稱就行 */ .chn_name = chn_name_common,[...] /* 新版本的接口需要根據(jù)硬件手冊(cè)實(shí)現(xiàn) */ .initialize = rk_tsadcv11_initialize, .irq_ack = rk_tsadcv4_irq_ack, .control = rk_tsadcv4_control, .get_temp = rk_tsadcv4_get_temp, .set_alarm_temp = rk_tsadcv3_alarm_temp, .set_tshut_temp = rk_tsadcv3_tshut_temp, .set_tshut_mode = rk_tsadcv4_tshut_mode,[...]}[...]/* 添加設(shè)備樹匹配 ID 和 SoC 數(shù)據(jù) */staticconststructrt_ofw_node_id rockchip_tsadc_ofw_ids[] ={[...] { .compatible ="rockchip,rk3528-tsadc", .data = &rk3528_tsadc_data, },[...]};

上下、左右滑動(dòng)查看

RNG 移植

RNG 這塊 Rockchip 有新增加版本的接口,在bsp/rockchip/dm/hwcrypto/hw-rng-rockchip.c添加:

[...]/* 根據(jù)硬件手冊(cè)實(shí)現(xiàn)新版本的版本初始化和讀隨機(jī)數(shù)接口 */staticconststructrockchip_rng_soc_datarkrng_soc_data ={ .init= rkrng_init, .read = rkrng_read,};/* 添加設(shè)備樹匹配 ID 和 SoC 數(shù)據(jù) */staticconststructrt_ofw_node_idrockchip_rng_ofw_ids[] ={[...] { .compatible ="rockchip,rkrng", .data = &rkrng_soc_data, },[...]

上下、左右滑動(dòng)查看

8 啟動(dòng)地址

由于我們是直接替換板子的 Linux 運(yùn)行,我們需要得知 u-boot 會(huì)把 Linux/RT-Thread 加載到哪里:

radxa@rock-2f:~$ sudo cat /proc/iomem | grep -iE Kernel 00410000-019affff : Kernel code 02050000-024cffff : Kernel data

也就是差不多 0x410000 的位置,由于當(dāng)前運(yùn)行的是 RT-Smart 版本,所以將ARCH_TEXT_OFFSET配置為0x410000,ARCH_RAM_OFFSET配置為0x0。

9 工具鏈配置

注意 Rock2F 采用 Cortex-A53,RK3500 默認(rèn)采用 Cortex-A55 ARMv8.2 以上的選項(xiàng),因此可能造成部分指令無(wú)法正常使用,編譯參數(shù)需要做最小兼容:

# For Cortex-A55/A76 # DEVICE = ' -g -march=armv8.2-a -mtune=cortex-a55 -fdiagnostics-color=always' # For Cortex-A53/A72 DEVICE=' -g -mcpu=cortex-a53 -fdiagnostics-color=always'

10 Earlycon

我們上機(jī)運(yùn)行前,可能會(huì)遇到連啟動(dòng) Logo 都看不到系統(tǒng)就掛了的情況,還需要啟用早期調(diào)試串口:

[...]chosen { [...] bootargs ="console=ttyFIQ0,1500000n8"; [...]};[...]aliases { [...] serial0 ="/serial@ff9f0000"; [...]};[...]serial@ff9f0000{ compatible ="rockchip,rk3528-uart","snps,dw-apb-uart"; reg = <0x000xff9f00000x000x100>; [...]};[...]fiq-debugger{ compatible ="rockchip,fiq-debugger"; rockchip,serial-id = <0>; [...]};[...]

上下、左右滑動(dòng)查看

一目了然,早期的串口地址就是0xff9f0000,IP 仍然是 DWC 的 8250 串口。

11 配置啟動(dòng)

先通過(guò) Linux 的/boot內(nèi)容獲取 SBC 的啟動(dòng)方式:

radxa@rock-2f:~$ls /bootconfig-6.1.43-26-rk2312 extlinux uEnv.txtdtbo hw_intfc.conf vmlinuz-6.1.43-26-rk2312dtbo_old initrd.img-6.1.43-26-rk2312efi System.map-6.1.43-26-rk2312radxa@rock-2f:~$lsblkNAME MAJ:MINRM SIZEROTYPEMOUNTPOINTSmmcblk1 179:0 0 29.7G 0disk├─mmcblk1p1 179:1 0 16M 0part /config├─mmcblk1p2 179:2 0 300M 0part /boot/efi└─mmcblk1p3 179:3 0 29.4G 0part /

上下、左右滑動(dòng)查看

是熟悉的 extlinux 啟動(dòng)腳本:

radxa@rock-2f:~$ cat /boot/extlinux/extlinux.conf## /boot/extlinux/extlinux.conf#### IMPORTANT WARNING#### The configuration of this file is generated automatically.## Do not edit this file manually, use: u-boot-updatedefaultl0menutitle U-Boot menuprompt1timeout10labell0 menulabel Debian GNU/Linux12(bookworm)6.1.43-26-rk2312 linux/boot/vmlinuz-6.1.43-26-rk2312 initrd/boot/initrd.img-6.1.43-26-rk2312 fdtdir/usr/lib/linux-image-6.1.43-26-rk2312/ appendroot=UUID=92e064a6-51dc-4433-9ae4-81e8f397a2bc console=ttyFIQ0,1500000n8 quiet splash loglevel=4rw earlycon consoleblank=0console=tty1 coherent_pool=2M irqchip.gicv3_pseudo_nmi=0cgroup_enable=cpuset cgroup_memory=1cgroup_enable=memory swapaccount=1kasan=offlabell0r menulabel Debian GNU/Linux12(bookworm)6.1.43-26-rk2312 (rescue target) linux/boot/vmlinuz-6.1.43-26-rk2312 initrd/boot/initrd.img-6.1.43-26-rk2312 fdtdir/usr/lib/linux-image-6.1.43-26-rk2312/ appendroot=UUID=92e064a6-51dc-4433-9ae4-81e8f397a2bc console=ttyFIQ0,1500000n8 splash loglevel=4rw earlycon consoleblank=0console=tty1 coherent_pool=2M irqchip.gicv3_pseudo_nmi=0cgroup_enable=cpuset cgroup_memory=1cgroup_enable=memory swapaccount=1kasan=offsingle

上下、左右滑動(dòng)查看

我們只需要在label l0前面增加一個(gè)啟動(dòng) RT-Thread 的菜單:

labelrt-thread menuRT-Thread linux/boot/rtthread.bin fdtdir/usr/lib/linux-image-6.1.43-26-rk2312/ appendearlycon=uart8250,mmio32,0xff9f0000 console=ttyFIQ0,1500000n8 root=sd1p0 rootfstype=elm rootwait rw

上下、左右滑動(dòng)查看

12 開始啟動(dòng)

將 rtthread.bin 鏡像放到/boot中(注意在 MMC 的第三個(gè)分區(qū)上),然后啟動(dòng)板子,在啟動(dòng)菜單中輸入 ‘1’ 啟動(dòng) RT-Thread:

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

然后可以看到我們就進(jìn) MSH 了:

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

我們直接使用了 DM 中大量復(fù)用的設(shè)備驅(qū)動(dòng),所以可以看看目前系統(tǒng)多少設(shè)備已經(jīng)支持了:

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

除了 SDMMC、NVME 我們可以直接掛載測(cè)試,其他的接口測(cè)試可以參考官方文檔:https://docs.radxa.com/rock2/rock2f/getting-started/interface-usage/pin-40-test

再查看系統(tǒng)其他部分子模塊狀態(tài):

中斷域

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

在中斷域中可以看到設(shè)備觸發(fā)中斷的次數(shù),以及中斷的級(jí)聯(lián)關(guān)系,親和性等信息,比如 NVME 使用 DWC PCI INTx 中斷,DWC PCI INTx 中斷級(jí)聯(lián)到了 rk-pcie 的 GICv2 上。

溫控域

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

在溫控域中可以看到帶溫度傳感器的設(shè)備的溫度,以及其扇熱方式,扇熱機(jī)制和觸發(fā)溫度。當(dāng)前溫控域只有 CPU,采用 CPU DVFS 的方式進(jìn)行扇熱,由于 DVFS 還未提交至主線,這里顯示不支持

時(shí)鐘域(僅顯示部分)

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

在時(shí)鐘域中可以看到系統(tǒng)各個(gè)時(shí)鐘的名稱和頻率,以及打開次數(shù),還有關(guān)聯(lián)到的設(shè)備,時(shí)鐘的父級(jí)關(guān)系等。

LED


可以看到 LED 以心跳的方式進(jìn)行工作,這符合設(shè)備樹指定的工作方式:

gpio-leds { compatible ="gpio-leds"; state-led { gpios = <&gpio3?RK_PC1?GPIO_ACTIVE_LOW>; linux,default-trigger ="heartbeat"; };};

上下、左右滑動(dòng)查看

13 代碼倉(cāng)庫(kù)

我們可以看看我們?nèi)康男薷男畔ⅲ?/p>

[gui@gui-pc rockchip]$ git status .位于分支 rockchip_rk3528尚未暫存以備提交的變更: (使用"git add <文件>..."更新要提交的內(nèi)容) (使用"git restore <文件>..."丟棄工作區(qū)的改動(dòng)) 修改: dm/adc/adc-rockchip_saradc.c 修改: dm/clk/Kconfig 修改: dm/clk/SConscript 修改: dm/hwcrypto/hw-rng-rockchip.c 修改: dm/include/pinctrl-rockchip.h 修改: dm/nvmem/nvmem-rockchip-otp.c 修改: dm/pinctrl/pinctrl-rockchip.c 修改: dm/thermal/thermal-rockchip_tsadc.c 修改: rk3500/README.md 修改: rk3500/README_ZH.md 修改: rk3500/rtconfig.h 修改: rk3500/rtconfig.py未跟蹤的文件: (使用"git add <文件>..."以包含要提交的內(nèi)容) dm/clk/clk-rk3528.c dm/include/dt-bindings/clock/rk3528-cru.h修改尚未加入提交(使用"git add"和/或"git commit -a")

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 設(shè)備
    +關(guān)注

    關(guān)注

    2

    文章

    4876

    瀏覽量

    73834
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    26

    文章

    6386

    瀏覽量

    120282
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1634

    瀏覽量

    45140
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RT-Thread Vector軟件包:嵌入式開發(fā)的動(dòng)態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    RT-Thread Vector軟件包:嵌入式開發(fā)的動(dòng)態(tài)數(shù)組容器 | 技術(shù)集結(jié)
    的頭像 發(fā)表于 01-25 09:33 ?5575次閱讀
    <b class='flag-5'>RT-Thread</b> Vector軟件包:嵌入式開發(fā)的動(dòng)態(tài)數(shù)組容器 | <b class='flag-5'>技術(shù)</b><b class='flag-5'>集結(jié)</b>

    移植RT-Thread的原理與方法

    ,在rtt論壇搜索“國(guó)產(chǎn)MCU移植”即可閱讀。本文不介紹具體移植步驟,而是如往常一樣,分享移植的原理與方法。 移植原理 移植一款軟件,無(wú)非是獲取源碼,修改其中與硬件相關(guān)的代碼以適配目標(biāo)硬件。移植rt-thread也是如此,首要任
    的頭像 發(fā)表于 09-17 09:41 ?1w次閱讀

    RT-Thread全球技術(shù)大會(huì):螢石研發(fā)團(tuán)隊(duì)使用RT-Thread技術(shù)挑戰(zhàn)

    RT-Thread全球技術(shù)大會(huì):研發(fā)團(tuán)隊(duì)使用RT-Thread技術(shù)挑戰(zhàn) ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 11:36 ?2601次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):螢石研發(fā)團(tuán)隊(duì)使用<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>技術(shù)</b>挑戰(zhàn)

    2022 RT-Thread全球技術(shù)大會(huì):螢石EZIOT SDK對(duì)RT-Thread的支持

    2022 RT-Thread全球技術(shù)大會(huì):RT-Thread在攝像頭及IoT設(shè)備上的實(shí)踐經(jīng)驗(yàn)分享
    的頭像 發(fā)表于 05-27 11:08 ?2000次閱讀
    2022 <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):螢石EZIOT SDK對(duì)<b class='flag-5'>RT-Thread</b>的支持

    RT-Thread全球技術(shù)大會(huì):Kconfig在RT-Thread的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):Kconfig在RT-Thread的工作機(jī)制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?2482次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):Kconfig在<b class='flag-5'>RT-Thread</b><b class='flag-5'>中</b>的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:34 ?2967次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):<b class='flag-5'>RT-Thread</b>測(cè)試用例集合案例

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 簡(jiǎn)介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡(jiǎn)介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_CAN 設(shè)備

    RT-Thread文檔_CAN 設(shè)備
    發(fā)表于 02-22 18:34 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_CAN <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_PWM 設(shè)備

    RT-Thread文檔_PWM 設(shè)備
    發(fā)表于 02-22 18:35 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_PWM <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_SPI 設(shè)備

    RT-Thread文檔_SPI 設(shè)備
    發(fā)表于 02-22 18:36 ?3次下載
    <b class='flag-5'>RT-Thread</b>文檔_SPI <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_WATCHDOG 設(shè)備

    RT-Thread文檔_WATCHDOG 設(shè)備
    發(fā)表于 02-22 18:36 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_WATCHDOG <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_SENSOR 設(shè)備

    RT-Thread文檔_SENSOR 設(shè)備
    發(fā)表于 02-22 18:37 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_SENSOR <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_AUDIO 設(shè)備

    RT-Thread文檔_AUDIO 設(shè)備
    發(fā)表于 02-22 18:38 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_AUDIO <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_Pulse Encoder 設(shè)備

    RT-Thread文檔_Pulse Encoder 設(shè)備
    發(fā)表于 02-22 18:39 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_Pulse Encoder <b class='flag-5'>設(shè)備</b>
    焉耆| 武陟县| 师宗县| 喜德县| 南陵县| 榆林市| 界首市| 江川县| 长岭县| 永兴县| 山东| 武义县| 丘北县| 临城县| 永寿县| 禹州市| 保山市| 台湾省| 文成县| 武城县| 布拖县| 台北市| 阜平县| 苏尼特右旗| 若尔盖县| 健康| 故城县| 扎兰屯市| 广饶县| 巨野县| 泗水县| 驻马店市| 甘谷县| 祁连县| 白银市| 东乡| 星座| 新源县| 库尔勒市| 桓仁| 龙胜|