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

原創 2025-11-04 08:52:00 rk3576

RK3576開發板

飛凌嵌入式RK3576開發板

一、概述

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

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

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

二、明確目標

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

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

2.1 GPIO引腳選擇方法

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

  • 查看硬件設計文檔:飛凌RK3576開發板提供完整的引腳功能表格、底板原理圖,可聯系飛凌嵌入式在線客服獲取下載鏈接,文檔中明確標注了各引腳的默認電平、方向(輸入/輸出)、電壓域(如3.3V、1.8V)。
  • 實測驗證:使用萬用表或示波器,在上電瞬間測量引腳電平,記錄初始狀態(高/低)和穩定時間。
連接器引腳號 CPU球號 核心板引腳功能 開發板引腳功能 引腳方向選擇 電平域電壓 開發板引腳功能描述 開發板應用接口 復位狀態
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發送 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開發板引腳布局圖

圖1:RK3576開發板接口布局示意圖

RK3576開發板引腳布局圖

圖2:RK3576開發板接口布局示意圖

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

三、修改與驗證方法

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

3.1 前期準備

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

3.2 原始狀態驗證

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

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

圖3:OK3576開發板擴展接口示意圖(紅框標注為PCIe接口區域)

3.3 進入uboot命令

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

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

飛凌嵌入式RK3576開發板的uboot經過飛凌優化,提供了豐富的調試命令和配置選項,支持通過環境變量配置多種啟動參數,方便開發者進行底層硬件調試。

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

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

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

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

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

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

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

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

通過修改kernel設備樹,添加GPIO拉高節點,實現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";  // 兼容固定電壓調節器驅動(用于GPIO拉高)
+               gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 指定GPIO2_B4,高電平有效
+               enable-active-high;  // 使能信號為高電平
+               regulator-boot-on;  // 系統啟動時使能(uboot階段生效)
+               regulator-always-on;  // 保持常亮(防止被后續驅動關閉)
+               status = "okay";  // 啟用該節點
+       };
+
 };
@@ -1164,7 +1174,7 @@ rgmii_phy1: phy@2 {
 };
 &pcie0 {
-       reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 原PCIe復位GPIO定義
+       //reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 注釋掉,避免引腳沖突
        rockchip,skip-scan-in-resume;
        pinctrl-names = "default";
        status = "okay";

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

3.6 編譯與驗證

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

四、OK3576-C開發板優勢與總結

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

除了本文介紹的GPIO控制功能外,OK3576還具備以下優勢,使其成為工業控制、智能設備等領域的理想選擇:

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

本方法的核心要點如下:

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

相關產品 >

  • FET3576-C核心板

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

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

推薦閱讀 換一批 換一批