91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

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

wKgZPGkam2uAdqg0AAEIS7J4m90804.png

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

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

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

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

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

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

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

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

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

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

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

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

?細節(jié)

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

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

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

boot_devtype_init(void)

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

?優(yōu)先級順序

a.配置參數(shù):從平臺配置中解析啟動設備(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)

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

?細節(jié)

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

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

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

rockchip_get_bootdev(void)

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

?流程

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

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

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

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

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

rockchip_dnl_key_pressed(void)

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

?實現(xiàn)

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

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

setup_download_mode(void)

?功能:根據(jù)按鍵或熱鍵狀態(tài),決定進入下載模式、恢復模式或fastboot模式。

?流程

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

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

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

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

board_run_recovery_wipe_data(void)

?功能:觸發(fā)恢復模式并擦除數(shù)據(jù)(如用戶執(zhí)行恢復出廠設置)。

?流程

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

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

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

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

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

dtb_scan(void *fdt, int where)

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

?掃描位置

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

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

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

rockchip_read_dtb_file(void *fdt)

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

?流程

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

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

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

rockchip_ram_read_dtb_file(void *img, void *fdt)

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

?細節(jié)

?若為Android鏡像:跳過內核和ramdisk區(qū)域,提取后續(xù)的DTB

?若為FIT鏡像:從images/fdtimages/resource節(jié)點提取DTB數(shù)據(jù)。

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

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

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

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

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

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

四、總結

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

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

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

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

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

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



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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    U-boot的基本介紹

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

    U-Boot的啟動及移植分析

    bootloader 開發(fā)是嵌入式系統(tǒng)必不可少而且十分重要的部分,U-Boot 為功能強大的bootloader 開發(fā)軟件。本文詳細分析了U-Boot 的啟動流程,并結合其源碼,闡述了U-Boot 在S3
    發(fā)表于 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
    發(fā)表于 01-25 15:45 ?13次下載

    u-boot的Makefile分析

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

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

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

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

    在對U-Boot進行深入分析的基礎上,同時對S3C2440的LCD控制器原理以及INNOLUX 7寸LCD的成像原理進行分析,最后結合系統(tǒng)軟硬件特性實現(xiàn)基于U-Boot的開機logo。通過實驗驗證表明,在
    發(fā)表于 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 即可,但如果你想成為一個比較強的嵌入式系統(tǒng)工程師,而且還做了自己開發(fā)板,那么還是要學習一下如果將網(wǎng)上下載的通用 u-boot
    發(fā)表于 11-17 15:54 ?2次下載

    u-boot簡介

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

    S3C6410的u-boot分析與移植

    S3C6410的u-boot分析與移植
    發(fā)表于 10-31 14:44 ?28次下載
    S3<b class='flag-5'>C</b>6410的<b class='flag-5'>u-boot</b>分析與移植

    詳解U-Boot引導內核分析

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

    fireflyAIO-3399C主板U-Boot介紹

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

    fireflyAIO-3288C主板U-Boot介紹

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

    深度解析U-Boot網(wǎng)絡實現(xiàn)

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

    U-Boot架構淺析

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

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

    在瑞芯微(RK)平臺的嵌入式開發(fā)中,U-Boot作為核心的啟動加載程序,負責完成鏡像解析、校驗、加載等關鍵流程。而image.c正是
    的頭像 發(fā)表于 02-24 16:46 ?1403次閱讀
    深入<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>邏輯