基于RK3576 的 uboot 早期硬件控制:Linux6.1.84 內(nèi)核設(shè)備樹修改與實踐
飛凌嵌入式RK3576開發(fā)板
一、概述
本文介紹通過修改kernel設(shè)備樹,在飛凌嵌入式OK3576-C開發(fā)板上實現(xiàn)在uboot階段拉高GPIO的方法。OK3576-C作為基于RK3576處理器的高性能嵌入式平臺,集成四核Cortex-A76與四核Cortex-A55架構(gòu),為工業(yè)控制、邊緣計算等場景提供強大算力支持。其靈活的硬件配置和完善的軟件生態(tài),使得這類底層硬件控制需求能夠通過標準化的設(shè)備樹配置實現(xiàn),無需復(fù)雜的底層代碼修改。
對于需要在系統(tǒng)啟動早期(uboot階段)控制外設(shè)的應(yīng)用場景,如工業(yè)傳感器使能、外設(shè)復(fù)位控制等,本文方法可有效簡化開發(fā)流程。若需對GPIO進行更精細的控制(如時序精確調(diào)整、多狀態(tài)切換等),則仍需直接修改uboot代碼。
二、明確目標
在修改uboot或kernel設(shè)備樹前,需先明確需求合理性,避免無效開發(fā)。核心是判斷"uboot階段拉高GPIO"是否能滿足硬件設(shè)計目標,關(guān)鍵在于硬件上電初期的GPIO電平狀態(tài)。
2.1 GPIO引腳選擇方法
飛凌嵌入式RK3576開發(fā)板提供了豐富的GPIO資源,分布在多個GPIO組中,可滿足不同外設(shè)的控制需求。需通過以下方式確認GPIO引腳的上電初始狀態(tài)和功能兼容性:
- 查看硬件設(shè)計文檔:飛凌RK3576開發(fā)板提供完整的引腳功能表格、底板原理圖,可聯(liá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) | 低電平 | 
圖1:RK3576開發(fā)板接口布局示意圖
圖2:RK3576開發(fā)板接口布局示意圖
三、修改與驗證方法
本節(jié)以 GPIO2_B4為例(OK3576-C底板PCIe接口的PCIE0_PERSTn引腳),詳細說明設(shè)備樹修改步驟及驗證方法。OK3576-C開發(fā)板提供了PCIe 3.0接口,可擴展高速外設(shè),通過本文方法可在系統(tǒng)啟動早期控制PCIe設(shè)備的復(fù)位狀態(tài)。
3.1 前期準備
- 硬件: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)驗證
先燒寫原廠默認鏡像,驗證GPIO2_B4的原始電平變化:
- 連接調(diào)試串口,打開終端工具(波特率115200,8N1)。飛凌嵌入式RK3576開發(fā)板默認引出調(diào)試串口,方便開發(fā)調(diào)試。
 - 給開發(fā)板上電,觀察串口打印,記錄GPIO2_B4的電平變化(通過萬用表測量)。
 - 默認情況下,該引腳會在 kernel啟動后才被拉高,uboot階段保持低電平。
 
圖3:OK3576開發(fā)板擴展接口示意圖(紅框標注為PCIe接口區(qū)域)
3.3 進入uboot命令行
上電啟動過程中,當串口終端出現(xiàn)以下提示時,按下 CTRL+C可進入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ā)者進行底層硬件調(diào)試。
3.4 理論依據(jù)(RK U-Boot DTB機制)
根據(jù)RK官方手冊《Rockchip_Developer_Guide_UBoot_Nextdev_CN.pdf》的"Kernel-DTB"章節(jié)描述,RK平臺支持"使用kernel DTB初始化uboot外設(shè)",核心機制如下:
二者的作用:
? U-Boot DTB:負責初始化存儲、打印串口等核心設(shè)備;
? Kernel DTB:負責初始化存儲、打印串口以外的設(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機制。所以通常對于外設(shè)的DTS修改,用戶應(yīng)該修改kernel DTB。
飛凌提供的RK3576開發(fā)板 SDK默認啟用了這一機制,使得開發(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)化,將不同功能模塊的配置進行了清晰分離,方便開發(fā)者進行針對性修改。上述修改方法同樣適用于其他GPIO引腳的控制需求,只需替換相應(yīng)的GPIO組和引腳編號即可。
3.6 編譯與驗證
- 編譯kernel:參考SDK中提供的《OK3576-C_Linux編譯手冊》,使用飛凌優(yōu)化的編譯腳本(build.sh)可快速完成編譯,生成新的boot.img(包含修改后的設(shè)備樹)。
 - 燒寫鏡像:使用RK燒錄工具(如RKDevTool),單獨燒寫boot.img到開發(fā)板。飛凌嵌入式RK3576開發(fā)板支持TF卡、USB、網(wǎng)絡(luò)等多種燒錄方式,方便開發(fā)調(diào)試。
 - 
				電平驗證:
				
- 上電后,立即用萬用表測量R354電阻兩端電平。
 - 進入uboot命令行(CTRL+C),觀察電平是否保持高電平(若為高,則修改生效)。
 - 繼續(xù)啟動kernel,確認電平持續(xù)穩(wěn)定(無異常拉低)。
 
 
四、OK3576-C開發(fā)板優(yōu)勢與總結(jié)
OK3576-C開發(fā)板作為飛凌嵌入式基于RK3576打造的高性能開發(fā)平臺,不僅提供了強大的計算能力,還通過完善的硬件設(shè)計和軟件支持,為底層硬件控制提供了便捷的實現(xiàn)途徑。本方法通過利用RK U-Boot的kernel DTB機制,無需修改uboot代碼,僅通過修改kernel設(shè)備樹即可實現(xiàn)uboot階段拉高GPIO,適用于對控制精度要求不高的場景。
除了本文介紹的GPIO控制功能外,OK3576還具備以下優(yōu)勢,使其成為工業(yè)控制、智能設(shè)備等領(lǐ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è)擴展
 - 完善的軟件生態(tài):支持Linux、Android等操作系統(tǒng),提供完整的SDK和開發(fā)文檔,降低開發(fā)門檻
 - 工業(yè)級設(shè)計:支持寬溫(-40℃~85℃),抗干擾能力強,適合工業(yè)環(huán)境
 - 專業(yè)技術(shù)支持:為客戶提供從硬件設(shè)計到軟件開發(fā)的全流程技術(shù)支持
 
本方法的核心要點如下:
- 硬件優(yōu)先:確認GPIO上電初始狀態(tài),避免"上電即拉高"需求與軟件控制時序沖突。
 - 節(jié)點配置:使用regulator-fixed兼容驅(qū)動,通過regulator-boot-on確保uboot階段生效。
 - 沖突規(guī)避:注釋掉原設(shè)備樹中對同一GPIO的其他引用(如PCIe reset-gpios),防止引腳復(fù)用沖突。
 - 實測驗證:必須通過萬用表或示波器確認uboot階段和kernel階段的GPIO電平穩(wěn)定性。
 
相關(guān)產(chǎn)品 >
- 
                
FET3576-C核心板
飛凌嵌入式RK3576核心板集成了強大的處理器和豐富的接口,提供出色的計算能力和擴展性。RK3576核心板以其卓越的性能、低功耗和穩(wěn)定性,成為工業(yè)、AIoT、邊緣計算、智能移動終端等領(lǐng)域的理想選擇。無論是數(shù)據(jù)處理還是邊緣計算,RK3576都能為項目提供強大的硬件支持。核心板推薦選擇飛凌嵌入式瑞芯微系列RK3576J業(yè)級核心板、RK3576高性能核心板。 了解詳情
 - 
                
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超強算力NPU;嵌入式3D GPU加之帶有MMU的專用2D硬件引擎,最大限度提升顯示性能;H.265超清硬解碼,最高支持8K分辨率。 了解詳情
 

