基于RK3576 的 uboot 早期硬件控制:Linux6.1.84 內(nèi)核設(shè)備樹修改與實踐

原創(chuàng) 2025-11-04 08:52:00 rk3576

RK3576開發(fā)板

飛凌嵌入式RK3576開發(fā)板

一、概述

本文介紹通過修改kernel設(shè)備樹,在飛凌嵌入式OK3576-C開發(fā)板上實現(xiàn)在uboot階段拉高GPIO的方法。OK3576-C作為基于RK3576處理器的高性能嵌入式平臺,集成四核Cortex-A76與四核Cortex-A55架構(gòu),為工業(yè)控制、邊緣計算等場景提供強(qiáng)大算力支持。其靈活的硬件配置和完善的軟件生態(tài),使得這類底層硬件控制需求能夠通過標(biāo)準(zhǔn)化的設(shè)備樹配置實現(xiàn),無需復(fù)雜的底層代碼修改。

對于需要在系統(tǒng)啟動早期(uboot階段)控制外設(shè)的應(yīng)用場景,如工業(yè)傳感器使能、外設(shè)復(fù)位控制等,本文方法可有效簡化開發(fā)流程。若需對GPIO進(jìn)行更精細(xì)的控制(如時序精確調(diào)整、多狀態(tài)切換等),則仍需直接修改uboot代碼。

本文驗證基于飛凌官方資料《OK3576-C_Linux6.1.84_用戶資料_R2》,該資料包含完整的硬件手冊、驅(qū)動開發(fā)指南和示例代碼,可通過飛凌嵌入式官網(wǎng)獲取。RK其他平臺(如RK3568、RK3588)或其他Linux版本可參考此方法,但需根據(jù)具體硬件手冊調(diào)整引腳定義和設(shè)備樹節(jié)點。

二、明確目標(biāo)

在修改uboot或kernel設(shè)備樹前,需先明確需求合理性,避免無效開發(fā)。核心是判斷"uboot階段拉高GPIO"是否能滿足硬件設(shè)計目標(biāo),關(guān)鍵在于硬件上電初期的GPIO電平狀態(tài)。

若硬件電路需"上電即拉高GPIO"(如繼電器控制、關(guān)鍵模組使能),但目標(biāo)GPIO上電初始狀態(tài)為低電平,則 無法通過軟件解決!需更換硬件設(shè)計:選擇上電后默認(rèn)高電平的GPIO引腳(由硬件電路決定),因為uboot通常在上電2秒后才開始工作,軟件無法控制uboot啟動前的GPIO電平。

2.1 GPIO引腳選擇方法

飛凌嵌入式RK3576開發(fā)板提供了豐富的GPIO資源,分布在多個GPIO組中,可滿足不同外設(shè)的控制需求。需通過以下方式確認(rèn)GPIO引腳的上電初始狀態(tài)和功能兼容性:

  • 查看硬件設(shè)計文檔:飛凌RK3576開發(fā)板提供完整的引腳功能表格、底板原理圖,可聯(lián)系飛凌嵌入式在線客服獲取下載鏈接,文檔中明確標(biāo)注了各引腳的默認(rèn)電平、方向(輸入/輸出)、電壓域(如3.3V、1.8V)。
  • 實測驗證:使用萬用表或示波器,在上電瞬間測量引腳電平,記錄初始狀態(tài)(高/低)和穩(wěn)定時間。
連接器引腳號 CPU球號 核心板引腳功能 開發(fā)板引腳功能 引腳方向選擇 電平域電壓 開發(fā)板引腳功能描述 開發(fā)板應(yīng)用接口 復(fù)位狀態(tài)
LD5 A208 PWM1_CH0_M0 PWM1_CH0_M0 輸出 3.3V PWM1_CH0_M0 - 低電平
LD6
LD7 1U24 UART0_TX_M0_DEBUG UART0_TX_M0_DEBUG 輸出 3.3V UART0發(fā)送 UART0_TX_M0_DEBUG 高電平
LD8 GND GND GND
LD9 AA28 UART0_RX_M0_DEBUG UART0_RX_M0_DEBUG 輸入 3.3V UART0接收 UART0_RX_M0_DEBUG 高電平
LD10
LD11 1W24 I2C2_SCL_M0 I2C2_SCL_M0 輸出 3.3V I2C2時鐘 I2C2_SCL_M0 低電平
LD12
LD13 1W22 PWM0_CH0_M0 PWM0_CH0_M0 輸出 3.3V PWM0_CH0_M0 PWM0_CH0_M0(MIPI屏幕背光PWM) 低電平
RK3576開發(fā)板引腳布局圖

圖1:RK3576開發(fā)板接口布局示意圖

RK3576開發(fā)板引腳布局圖

圖2:RK3576開發(fā)板接口布局示意圖

本方法適用于OK3576-C開發(fā)板的以下應(yīng)用場景:工業(yè)傳感器模組復(fù)位控制、外設(shè)上電使能、自定義擴(kuò)展板硬件初始化等需求,且無需"上電即生效",僅需在kernel驅(qū)動加載前(uboot階段)穩(wěn)定GPIO電平。飛凌提供的OK3576開發(fā)板支持寬溫工作(-40℃~85℃),特別適合工業(yè)環(huán)境下的這類硬件控制需求。

三、修改與驗證方法

本節(jié)以 GPIO2_B4為例(OK3576-C底板PCIe接口的PCIE0_PERSTn引腳),詳細(xì)說明設(shè)備樹修改步驟及驗證方法。OK3576-C開發(fā)板提供了PCIe 3.0接口,可擴(kuò)展高速外設(shè),通過本文方法可在系統(tǒng)啟動早期控制PCIe設(shè)備的復(fù)位狀態(tài)。

3.1 前期準(zhǔn)備

  • 硬件:OK3576-C開發(fā)板(核心板+底板)、PCIe接口設(shè)備(可選)、萬用表、調(diào)試串口線。
  • 軟件:Linux 6.1.84 SDK、交叉編譯工具鏈、串口終端工具(如SecureCRT、MobaXterm)。SDK中包含完整的編譯腳本和示例代碼。
  • 測量點:GPIO2_B4對應(yīng)底板R354電阻(PCIe座與電解電容之間)。

3.2 原始狀態(tài)驗證

先燒寫原廠默認(rèn)鏡像,驗證GPIO2_B4的原始電平變化:

  1. 連接調(diào)試串口,打開終端工具(波特率115200,8N1)。飛凌嵌入式RK3576開發(fā)板默認(rèn)引出調(diào)試串口,方便開發(fā)調(diào)試。
  2. 給開發(fā)板上電,觀察串口打印,記錄GPIO2_B4的電平變化(通過萬用表測量)。
  3. 默認(rèn)情況下,該引腳會在 kernel啟動后才被拉高,uboot階段保持低電平。

圖3:OK3576開發(fā)板擴(kuò)展接口示意圖(紅框標(biāo)注為PCIe接口區(qū)域)

3.3 進(jìn)入uboot命令

上電啟動過程中,當(dāng)串口終端出現(xiàn)以下提示時,按下 CTRL+C可進(jìn)入uboot命令行(此時uboot未移交控制權(quán)給kernel,可測量uboot階段的GPIO電平):

Hit key to stop autoboot('CTRL+C'):  0
---------------------------------------------
0:Exit to console
1:Reboot
2:Display type
---------------------------------------------

飛凌嵌入式RK3576開發(fā)板的uboot經(jīng)過飛凌優(yōu)化,提供了豐富的調(diào)試命令和配置選項,支持通過環(huán)境變量配置多種啟動參數(shù),方便開發(fā)者進(jìn)行底層硬件調(diào)試。

3.4 理論依據(jù)(RK U-Boot DTB機(jī)制)

根據(jù)RK官方手冊《Rockchip_Developer_Guide_UBoot_Nextdev_CN.pdf》的"Kernel-DTB"章節(jié)描述,RK平臺支持"使用kernel DTB初始化uboot外設(shè)",核心機(jī)制如下:

原生的U-Boot只支持使用U-Boot自己的DTB,RK平臺增加了kernel DTB機(jī)制的支持,即使用kernel DTB 去初始化外設(shè)。主要目的是為了兼容外設(shè)板級差異,如:power、clock、display 等。

二者的作用:
? U-Boot DTB:負(fù)責(zé)初始化存儲、打印串口等核心設(shè)備;
? Kernel DTB:負(fù)責(zé)初始化存儲、打印串口以外的設(shè)備(如GPIO、I2C、PCIe等);

U-Boot初始化時先用U-Boot DTB完成存儲、打印串口初始化,然后從存儲上加載Kernel DTB 并轉(zhuǎn)而使用這份DTB繼續(xù)初始化其余外設(shè)。Kernel DTB 的代碼實現(xiàn)在函數(shù): init_kernel_dtb() 。

開發(fā)者一般不需要修改 U-Boot DTB(除非更換打印串口),各平臺發(fā)布的SDK里使用的 defconfig 都已啟用kernel DTB機(jī)制。所以通常對于外設(shè)的DTS修改,用戶應(yīng)該修改kernel DTB。

飛凌提供的RK3576開發(fā)板 SDK默認(rèn)啟用了這一機(jī)制,使得開發(fā)者可以通過修改kernel設(shè)備樹實現(xiàn)對uboot階段硬件的控制,大大簡化了開發(fā)流程。

3.5 kernel設(shè)備樹修改(核心步驟)

通過修改kernel設(shè)備樹,添加GPIO拉高節(jié)點,實現(xiàn)uboot階段控制GPIO。具體修改如下(基于SDK中的arch/arm64/boot/dts/rockchip/OK3576-C-common.dtsi文件):

--- a/arch/arm64/boot/dts/rockchip/OK3576-C-common.dtsi
+++ b/arch/arm64/boot/dts/rockchip/OK3576-C-common.dtsi
@@ -428,6 +428,16 @@ wifi_ext_clk: wifi_ext_clk {
                pinctrl-0 = <&net_5g_pwr_gpio>;
                status = "okay";
        };
+
+       gpio2b4_high_test {
+               compatible = "regulator-fixed";  // 兼容固定電壓調(diào)節(jié)器驅(qū)動(用于GPIO拉高)
+               gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 指定GPIO2_B4,高電平有效
+               enable-active-high;  // 使能信號為高電平
+               regulator-boot-on;  // 系統(tǒng)啟動時使能(uboot階段生效)
+               regulator-always-on;  // 保持常亮(防止被后續(xù)驅(qū)動關(guān)閉)
+               status = "okay";  // 啟用該節(jié)點
+       };
+
 };
@@ -1164,7 +1174,7 @@ rgmii_phy1: phy@2 {
 };
 &pcie0 {
-       reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 原PCIe復(fù)位GPIO定義
+       //reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 注釋掉,避免引腳沖突
        rockchip,skip-scan-in-resume;
        pinctrl-names = "default";
        status = "okay";

飛凌嵌入式RK3576開發(fā)板提供的設(shè)備樹經(jīng)過優(yōu)化,將不同功能模塊的配置進(jìn)行了清晰分離,方便開發(fā)者進(jìn)行針對性修改。上述修改方法同樣適用于其他GPIO引腳的控制需求,只需替換相應(yīng)的GPIO組和引腳編號即可。

3.6 編譯與驗證

  1. 編譯kernel:參考SDK中提供的《OK3576-C_Linux編譯手冊》,使用飛凌優(yōu)化的編譯腳本(build.sh)可快速完成編譯,生成新的boot.img(包含修改后的設(shè)備樹)。
  2. 燒寫鏡像:使用RK燒錄工具(如RKDevTool),單獨燒寫boot.img到開發(fā)板。飛凌嵌入式RK3576開發(fā)板支持TF卡、USB、網(wǎng)絡(luò)等多種燒錄方式,方便開發(fā)調(diào)試。
  3. 電平驗證:
    • 上電后,立即用萬用表測量R354電阻兩端電平。
    • 進(jìn)入uboot命令行(CTRL+C),觀察電平是否保持高電平(若為高,則修改生效)。
    • 繼續(xù)啟動kernel,確認(rèn)電平持續(xù)穩(wěn)定(無異常拉低)。

四、OK3576-C開發(fā)板優(yōu)勢與總結(jié)

OK3576-C開發(fā)板作為飛凌嵌入式基于RK3576打造的高性能開發(fā)平臺,不僅提供了強(qiáng)大的計算能力,還通過完善的硬件設(shè)計和軟件支持,為底層硬件控制提供了便捷的實現(xiàn)途徑。本方法通過利用RK U-Boot的kernel DTB機(jī)制,無需修改uboot代碼,僅通過修改kernel設(shè)備樹即可實現(xiàn)uboot階段拉高GPIO,適用于對控制精度要求不高的場景。

除了本文介紹的GPIO控制功能外,OK3576還具備以下優(yōu)勢,使其成為工業(yè)控制、智能設(shè)備等領(lǐng)域的理想選擇:

  • 強(qiáng)大的處理性能:四核Cortex-A76(2.2GHz)+四核Cortex-A55(1.8GHz)架構(gòu),支持NEON、FPU指令集,滿足復(fù)雜計算需求
  • 豐富的外設(shè)接口:包含PCIe 3.0、SATA 3.0、雙千兆以太網(wǎng)、MIPI-CSI、MIPI-DSI等高速接口,支持多種外設(shè)擴(kuò)展
  • 完善的軟件生態(tài):支持Linux、Android等操作系統(tǒng),提供完整的SDK和開發(fā)文檔,降低開發(fā)門檻
  • 工業(yè)級設(shè)計:支持寬溫(-40℃~85℃),抗干擾能力強(qiáng),適合工業(yè)環(huán)境
  • 專業(yè)技術(shù)支持:為客戶提供從硬件設(shè)計到軟件開發(fā)的全流程技術(shù)支持

本方法的核心要點如下:

  • 硬件優(yōu)先:確認(rèn)GPIO上電初始狀態(tài),避免"上電即拉高"需求與軟件控制時序沖突。
  • 節(jié)點配置:使用regulator-fixed兼容驅(qū)動,通過regulator-boot-on確保uboot階段生效。
  • 沖突規(guī)避:注釋掉原設(shè)備樹中對同一GPIO的其他引用(如PCIe reset-gpios),防止引腳復(fù)用沖突。
  • 實測驗證:必須通過萬用表或示波器確認(rèn)uboot階段和kernel階段的GPIO電平穩(wěn)定性。
飛凌嵌入式提供OK3576-C開發(fā)板完整的技術(shù)資料和示例代碼,包括硬件設(shè)計手冊、驅(qū)動開發(fā)指南、應(yīng)用開發(fā)示例等。如需了解更多產(chǎn)品信息或獲取技術(shù)支持,可訪問飛凌嵌入式官網(wǎng)(http://www.conniekingslandcounseling.com/product/185.html)或聯(lián)系技術(shù)支持團(tuán)隊。

相關(guān)產(chǎn)品 >

  • FET3576-C核心板

    飛凌嵌入式RK3576核心板集成了強(qiáng)大的處理器和豐富的接口,提供出色的計算能力和擴(kuò)展性。RK3576核心板以其卓越的性能、低功耗和穩(wěn)定性,成為工業(yè)、AIoT、邊緣計算、智能移動終端等領(lǐng)域的理想選擇。無論是數(shù)據(jù)處理還是邊緣計算,RK3576都能為項目提供強(qiáng)大的硬件支持。核心板推薦選擇飛凌嵌入式瑞芯微系列RK3576J業(yè)級核心板、RK3576高性能核心板 了解詳情
    FET3576-C核心板
  • OK3576-C開發(fā)板

    RK3576開發(fā)板CPU選用瑞芯微RK3576,采用核心板+底板分體式設(shè)計,采用4個100Pin板對板連接器的方式將處理器的功能引腳以最便利的方式全部引出,并針對不同的功能做了深度優(yōu)化,方便用戶二次開發(fā)的同時簡化用戶設(shè)計,為您的項目提供良好的評估及設(shè)計依據(jù)。RK3576是瑞芯微專為AIoT市場打造的一款高算力、高性能、低功耗的國產(chǎn)化應(yīng)用處理器,集成了4個ARM Cortex-A72和4個 ARM Cortex-A53高性能核;內(nèi)置6TOPS超強(qiáng)算力NPU;嵌入式3D GPU加之帶有MMU的專用2D硬件引擎,最大限度提升顯示性能;H.265超清硬解碼,最高支持8K分辨率。 了解詳情
    OK3576-C開發(fā)板

推薦閱讀 換一批 換一批