伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

解析Rockchip平臺U-Boot核心文件:boot_rkimg.c到底做了什么?

jf_44130326 ? 來源:Linux1024 ? 2026-02-03 15:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開發中,U-Boot作為引導程序的中流砥柱,負責初始化硬件、加載內核并啟動系統。對于Rockchip平臺的設備(如常見的開發板、智能終端),boot_rkimg.cU-Boot中專門處理啟動流程的核心文件之一。

今天我們就來深入剖析這個文件,看看它如何管理啟動設備、處理下載/恢復模式,以及加載設備樹(DTB),最終為內核啟動鋪平道路。

wKgZPGkam2uAdqg0AAEIS7J4m90804.png

一、文件定位:Rockchip啟動流程的調度中心

boot_rkimg.cRockchip平臺U-Boot定制化開發的關鍵文件,主要職責包括:

?初始化并選擇啟動設備(如eMMC、SD卡、NVMeSCSI等);

?檢測下載/恢復模式觸發條件(如按鍵、熱鍵);

?加載并驗證設備樹(DTB),為內核啟動提供硬件描述;

?處理Android啟動相關的參數(如bootargs)。

可以說,它是Rockchip設備從U-Boot過渡到內核的橋梁。

二、核心函數解析:一步步看懂啟動邏輯

1.啟動設備管理:確定從哪里啟動

設備啟動的第一步是確定從哪個存儲介質啟動(如eMMCSD卡)。這部分邏輯由多個函數協作完成。

bootdev_init(const char *devtype, const char *devnum)

?功能:初始化指定類型的啟動設備(如mmc、nvmescsi)。

?細節

?根據devtype調用對應設備的初始化函數(如mmc_initialize初始化MMC設備,nvme_scan_namespace掃描NVMe設備);

?驗證設備是否存在,若存在則設置環境變量devtypedevnum(供后續流程使用)。

?舉例:若devtype“mmc”,則初始化MMC控制器并檢查設備是否可用。

boot_devtype_init(void)

?功能:按照優先級確定最終的啟動設備(核心邏輯)。

?優先級順序

a.配置參數:從平臺配置中解析啟動設備(param_parse_assign_bootdev);

b.ATAGS:從ATAGS中獲取啟動設備(param_parse_atags_bootdev,僅部分平臺支持);

c.掃描列表:若前兩步失敗,調用rk_board_scan_bootdev掃描默認設備列表;

d.默認值:若所有掃描失敗,默認使用“mmc 0”eMMC設備)。

?輸出:打印啟動設備來源(如“Bootdev (assign): mmc 0”)。

get_bootdev_type(void)

?功能:根據啟動設備類型(devtype)設置系統參數,為內核傳遞啟動信息。

?細節

?映射設備類型到枚舉值(如“mmc”對應IF_TYPE_MMC,“nvme”對應IF_TYPE_NVME);

?bootargs中添加存儲介質信息(如storagemedia=emmc)和Android啟動模式(如androidboot.mode=normal);

?兼容新舊Android版本規則(舊版本需指定介質作為模式,新版本統一用“normal”“charger”)。

rockchip_get_bootdev(void)

?功能:獲取啟動設備的塊設備描述符(struct blk_desc),供后續讀寫操作使用。

?流程

a.調用boot_devtype_init確保啟動設備已初始化;

b.通過設備類型和編號獲取blk_desc(塊設備描述符,包含設備大小、塊大小等信息);

c.若為MMC設備,額外打印時序模式(如“HS400”)和時鐘頻率。

2.下載與恢復模式:應對特殊啟動場景

U-Boot需支持下載模式(燒錄固件)和恢復模式(系統修復),這些邏輯由以下函數實現。

rockchip_dnl_key_pressed(void)

?功能:檢測下載按鍵是否按下(弱函數,可被板級代碼覆蓋)。

?實現

?若支持按鍵設備(CONFIG_DM_KEY),直接讀取按鍵狀態;

?若支持ADCCONFIG_ADC),通過ADC采樣判斷按鍵是否按下(如音量鍵,采樣值在0~30范圍內視為按下)。

setup_download_mode(void)

?功能:根據按鍵或熱鍵狀態,決定進入下載模式、恢復模式或fastboot模式。

?流程

a.若下載按鍵按下或檢測到HK_ROCKUSB_DNL熱鍵:

檢測USB總線供電(rockchip_u2phy_vbus_detect),若供電正常則進入下載模式(執行“download”命令);

若供電異常,進入恢復模式(設置reboot_mode=recovery-key)。

a.若檢測到HK_FASTBOOT熱鍵,進入fastboot模式(設置reboot_mode=fastboot)。

board_run_recovery_wipe_data(void)

?功能:觸發恢復模式并擦除數據(如用戶執行恢復出廠設置)。

?流程

a.找到misc分區(存儲啟動控制信息的特殊分區);

b.misc分區寫入bootloader_message(包含命令boot-recovery和參數--wipe_data);

c.設置reboot_mode=recovery并重啟,觸發恢復模式。

3.設備樹(DTB)處理:為內核提供硬件描述

設備樹(DTB)是內核識別硬件的關鍵,boot_rkimg.c負責加載和驗證DTB。

dtb_scan(void *fdt, int where)

?功能:從不同位置掃描并加載DTB(按優先級嘗試)。

?掃描位置

a.分發版DTBLOCATE_DISTRO):從可啟動分區加載預定義路徑的DTB(如/boot/dtb);

b.資源鏡像LOCATE_RESOURCE):從Rockchip資源鏡像中提取DTB;

c.FIT鏡像LOCATE_FIT):從FIT鏡像(一種多組件鏡像格式)的images/fdt節點加載DTB。

rockchip_read_dtb_file(void *fdt)

?功能:加載DTB到指定內存地址,并進行初始化。

?流程

a.調用dtb_scan嘗試從不同位置加載DTB

b.DTB分配內存(sysmem_alloc_base),確保內核可訪問;

c.執行設備樹修復(rk_board_early_fdt_fixup,板級定制化修正)和Android相關的設備樹疊加(android_fdt_overlay_apply)。

rockchip_ram_read_dtb_file(void *img, void *fdt)

?功能:從內存中的鏡像(如已加載的Android啟動鏡像或FIT鏡像)中提取DTB

?細節

?若為Android鏡像:跳過內核和ramdisk區域,提取后續的DTB;

?若為FIT鏡像:從images/fdtimages/resource節點提取DTB數據。

三、在U-Boot啟動流程中的作用

boot_rkimg.c貫穿U-Boot啟動的多個關鍵階段,簡單來說,它的作用是:

1.啟動前準備:確定啟動設備,初始化硬件接口MMCNVMe等),為后續加載鏡像鋪路;

2.模式判斷:檢測特殊按鍵或熱鍵,決定進入正常啟動、下載模式還是恢復模式;

3.內核啟動鋪墊:加載并驗證DTB,設置內核啟動參數(bootargs),確保內核能正確識別硬件。

沒有它,Rockchip設備就無法確定從哪里啟動、如何適配硬件,更無法響應燒錄或恢復等特殊操作。

四、總結

boot_rkimg.cRockchip平臺U-Boot中連接硬件與內核的核心樞紐。它通過精細化的設備管理、靈活的模式切換和可靠的DTB處理,確保設備從U-Boot平穩過渡到內核啟動。

對于開發者而言,理解這個文件的邏輯有助于:

?調試啟動設備識別問題(如找不到eMMC”);

?定制化啟動流程(如添加新的啟動設備類型);

?修復DTB加載失敗等常見啟動故障。

下次調試Rockchip設備啟動問題時,不妨從這個文件入手,或許能快速定位癥結所在~



聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    U-boot的基本介紹

    從本文開始,將陸續推送“手把手教你移植U-boot”系列文章,目標是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認硬件開發平臺
    發表于 07-14 16:52 ?4247次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    U-Boot的啟動及移植分析

    bootloader 開發是嵌入式系統必不可少而且十分重要的部分,U-Boot 為功能強大的bootloader 開發軟件。本文詳細分析了U-Boot 的啟動流程,并結合其源碼,闡述了U-Boot 在S3
    發表于 09-01 16:34 ?27次下載

    Porting U-Boot to the Control

    In this paper, the way of porting U-Boot to Control Computer Based MPC8349 will beintroduced
    發表于 01-25 15:45 ?13次下載

    u-boot的Makefile分析

    u-boot的Makefile分析 U-BOOT是一個LINUX下的工程,在編譯之前必須已經安裝對應體系結構的交叉編譯環境,這里只針對ARM,編譯器系列軟件為arm-linux-*。 U-BOOT的下載
    發表于 05-17 09:16 ?2293次閱讀

    嵌入式U-BOOT的啟動流程及移植

    S3C44B0開發板上的移植方法和步驟。 u-boot是一個功能強大的bootloader開發軟件,適用的CPU平臺
    發表于 02-25 16:00 ?59次下載

    基于S3C2440的U-Boot開機logo的設計

    在對U-Boot進行深入分析的基礎上,同時對S3C2440的LCD控制器原理以及INNOLUX 7寸LCD的成像原理進行分析,最后結合系統軟硬件特性實現基于U-Boot的開機logo。通過實驗驗證表明,在
    發表于 12-06 15:14 ?96次下載
    基于S3<b class='flag-5'>C</b>2440的<b class='flag-5'>U-Boot</b>開機logo的設計

    u-boot學習指南

    u-boot 是免費的,我們做嵌入式的一般只需要使用 u-boot 即可,但如果你想成為一個比較強的嵌入式系統工程師,而且還做了自己開發板,那么還是要學習一下如果將網上下載的通用 u-boot
    發表于 11-17 15:54 ?2次下載

    u-boot簡介

    U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目。U-Boot的作用是系統引導。U-Boot從FADSROM、8xxROM、PPCBOOT
    發表于 10-14 11:17 ?3993次閱讀

    詳解U-Boot引導內核分析

    bootm命令是用來引導經過U-Boot的工具mkimage打包后的kernel image的。U-Boot源代碼的tools/目錄下有mkimage工具,這個工具可以用來制作不壓縮或者壓縮的多種可啟動映象文件
    的頭像 發表于 04-13 15:22 ?5952次閱讀
    詳解<b class='flag-5'>U-Boot</b>引導內核分析

    fireflyAIO-3399C主板U-Boot介紹

    RK U-Boot 基于開源的 U-Boot 進行開發,工作模式有啟動加載模式和下載模式。
    的頭像 發表于 12-04 10:31 ?2052次閱讀

    fireflyAIO-3288C主板U-Boot介紹

    RK U-Boot 基于開源的 U-Boot 進行開發,工作模式有啟動加載模式和下載模式。
    的頭像 發表于 12-16 13:52 ?1827次閱讀
    fireflyAIO-3288<b class='flag-5'>C</b>主板<b class='flag-5'>U-Boot</b>介紹

    深度解析U-Boot網絡實現

    對于U-Boot而言,并沒有完整的實現上述模型,u-boot需要控制固件的尺寸,所以根據需要做了一些簡化,其拓撲框架如下圖所示:
    發表于 02-07 11:53 ?2次下載
    深度<b class='flag-5'>解析</b><b class='flag-5'>U-Boot</b>網絡實現

    U-Boot架構淺析

    導讀:嵌入式Linux系統搭建,bootloader是必不可少的一環,而U-Boot已成嵌入式Linux事實標準。所以較為深入的分析U-Boot的設計,對于更...
    發表于 02-07 11:56 ?7次下載
    <b class='flag-5'>U-Boot</b>架構淺析

    u-boot armv8鏈接腳本

    u-boot armv8鏈接腳本 在進行源碼分析之前,首先看看u-boot的鏈接腳本,通過鏈接腳本可以從整體了解一個u-boot的組成,并且可以在啟動分析中知道某些邏輯是在完成什么工作。 在
    的頭像 發表于 12-07 11:19 ?1641次閱讀

    深入解析U-Boot image.c:RK平臺鏡像處理核心邏輯

    在瑞芯微(RK)平臺的嵌入式開發中,U-Boot作為核心的啟動加載程序,負責完成鏡像解析、校驗、加載等關鍵流程。而image.c正是
    的頭像 發表于 02-24 16:46 ?1725次閱讀
    深入<b class='flag-5'>解析</b><b class='flag-5'>U-Boot</b> image.<b class='flag-5'>c</b>:RK<b class='flag-5'>平臺</b>鏡像處理<b class='flag-5'>核心</b>邏輯