在嵌入式开发中,U-Boot作为引导程序的“中流砥柱”,负责初始化硬件、加载内核并启动系统。对于Rockchip平台的设备(如常见的开发板、智能终端),boot_rkimg.c是U-Boot中专门处理启动流程的核心文件之一。
今天我们就来深入剖析这个文件,看看它如何管理启动设备、处理下载/恢复模式,以及加载设备树(DTB),最终为内核启动铺平道路。
一、文件定位:Rockchip启动流程的“调度中心”
boot_rkimg.c是Rockchip平台U-Boot定制化开发的关键文件,主要职责包括:
•初始化并选择启动设备(如eMMC、SD卡、NVMe、SCSI等);
•检测下载/恢复模式触发条件(如按键、热键);
•加载并验证设备树(DTB),为内核启动提供硬件描述;
•处理Android启动相关的参数(如bootargs)。
可以说,它是Rockchip设备从U-Boot过渡到内核的“桥梁”。
二、核心函数解析:一步步看懂启动逻辑
1.启动设备管理:确定“从哪里启动”
设备启动的第一步是确定“从哪个存储介质启动”(如eMMC、SD卡)。这部分逻辑由多个函数协作完成。
bootdev_init(const char *devtype, const char *devnum)
•功能:初始化指定类型的启动设备(如mmc、nvme、scsi)。
•细节:
◦根据devtype调用对应设备的初始化函数(如mmc_initialize初始化MMC设备,nvme_scan_namespace扫描NVMe设备);
◦验证设备是否存在,若存在则设置环境变量devtype和devnum(供后续流程使用)。
•举例:若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),直接读取按键状态;
◦若支持ADC(CONFIG_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.分发版DTB(LOCATE_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/fdt或images/resource节点提取DTB数据。
三、在U-Boot启动流程中的作用
boot_rkimg.c贯穿U-Boot启动的多个关键阶段,简单来说,它的作用是:
1.启动前准备:确定启动设备,初始化硬件接口(MMC、NVMe等),为后续加载镜像铺路;
2.模式判断:检测特殊按键或热键,决定进入正常启动、下载模式还是恢复模式;
3.内核启动铺垫:加载并验证DTB,设置内核启动参数(bootargs),确保内核能正确识别硬件。
没有它,Rockchip设备就无法确定从哪里启动、如何适配硬件,更无法响应烧录或恢复等特殊操作。
四、总结
boot_rkimg.c是Rockchip平台U-Boot中连接硬件与内核的“核心枢纽”。它通过精细化的设备管理、灵活的模式切换和可靠的DTB处理,确保设备从U-Boot平稳过渡到内核启动。
对于开发者而言,理解这个文件的逻辑有助于:
•调试启动设备识别问题(如“找不到eMMC”);
•定制化启动流程(如添加新的启动设备类型);
•修复DTB加载失败等常见启动故障。
下次调试Rockchip设备启动问题时,不妨从这个文件入手,或许能快速定位症结所在~
- 随机文章
- 热门文章
- 热评文章
- 朱婷宣布将在世联赛期间回归中国女排 曾提出退役申请
- 开门红!一季度全国演出市场场次、票房、观演人数均同比增长
- 2024年4月16日“大众30”成份股报告
- 做CT、人工智能模型……古城墙还可以这样保护
- MH迈汇:OPEC+对抑制油价上涨至100美元至关重要
- 黄金若突破2400上看2430,白银继续向高位迈进
- 广西贺州14个乡镇遭受洪涝灾害 受灾人口322人
- 黄金交易提醒:中东紧张局势助力金价周线五连阳,七成分析师看涨后市
- 美国休斯敦警察工会警告城市不安全:大量嫌犯正在街上徘徊
- 以色列引汇市波动,鲍威尔继续影响市场!下周哪些央行可能干预市场?
- 河南新乡通报“母子被同学家长殴打”:打人家长被行拘、罚款
- 非上市银行的2023年:盈利分化,有的倍增有的“腰斩”
- 省地震局:台湾花莲地震,对我省近期震情产生影响的可能性不大
- 1“赛事+”提升城市“流量” 陕西商洛拓经济发展新“赛道”
- 2“五一”临近 持基过节的投资者要注意这几点
- 3华发股份:成功入选“人民优选”品牌 五一黄金周热销30亿
- 4钟鼓楼老街区的古都新事
- 5非常危险!女子摔成粉碎性骨折!又是因为洞洞鞋,夏天多人中招……
- 6金税四期试点上线,财税体制改革拉开帷幕!或有资金借道信创ETF基金(562030)逢跌进场布局
- 7到2027年产业规模达到2000亿元 浙江发布历史经典产业高质量发展计划
- 8初步数据:我国一季度经常账户顺差392亿美元
- 9IDC:24Q1全球PC出货量恢复增长 达到疫情前水平
- 10“发现山西之美”TDC旅游发现者大会举办:共话文旅新生态 邀客体验新玩法
- 11(中国新貌)“国宝”大熊猫:栖居更美境 云游更广天
- 12培养工程领域专业人才 非洲首所交通大学在尼日利亚投入使用
- 13瑞众保险副总裁俞德本出任公司临时负责人
- 1大裁员下,特斯拉两名顶级高管离职
- 2奇瑞将与欧洲高端品牌签署技术平台授权协议
- 32024中国长三角青年企业家交流大会在杭州举办
- 4雷克萨斯GX中东版 全部在售 2023款 2022款 2020款 2019款 2018款成都远卓名车雷克萨斯GX中东版团购钜惠20万 欢迎上门试驾
- 5零跑C16将搭载中创新航磷酸铁锂电池
- 6Q1净利微增7%,宁德时代股东总数较2023年年末减少10728户
- 7哪吒,需要背水一战
- 8“新”中有“机”!创新服务承接新流量 撬动消费升级
- 9非创始版SU7何时交付 小米:工厂生产爬坡 全力提高产能
- 10央媒评卧铺挂帘:谁买的票谁做主
- 11江西南昌首部“多规合一”国土空间总体规划获批
- 12方程豹旗舰硬派越野!豹8正式亮相:仰望U8“青春版”登场
- 13583家族/造型霸气 方程豹豹8量产版发布



