Linux系统移植⑦:uboot启动流程详解-board_init_r执行过程

Linux系统移植⑦:uboot启动流程详解-board_init_r执行过程

在uboot中,board_init_r 是启动流程中的一个关键函数,负责完成板级(board-specific)的后期初始化工作。以下是关于该函数的详细说明:

1. 函数作用

board_init_r 是U-Boot在重定位(relocation)后执行的第二阶段初始化函数,主要完成:

  • 外设初始化:如网卡、存储设备(MMC/NAND)、USB等。
  • 环境变量加载:从Flash或EEPROM中读取环境变量。
  • 命令行准备:初始化命令行解析器,准备接收用户输入。
  • 启动延迟处理:处理bootdelay,等待用户中断或自动启动。
  • 执行主循环:进入main_loop(),处理用户命令或自动启动内核。

其源码如下:

可以看出board_init_r函数中也是通过调用初始化序列 init_sequence_r进行依次初始化

给出部分代码截图和主要函数解释

initr_trace 函数 :如果定义了宏 CONFIG_TRACE 的话就会调用函数 trace_init,初始化和调试跟踪有关的内容。
initr_reloc 函数 :用于设置 gd->flags,标记重定位完成。
initr_caches 函数 :用于初始化 cache,使能 cache。
initr_reloc_global_data 函数 :初始化重定位后 gd 的一些成员变量。
initr_barrier 函数 : I.MX6ULL 未用到。
initr_malloc 函数 :初始化 malloc。
initr_console_record 函数 :初始化控制台相关的内容, I.MX6ULL 未用到,空函数。
bootstage_relocate 函数 :启动状态重定位。
initr_bootstage 函数 :初始化 bootstage 什么的。
board_init 函数 :板级初始化,包括 74XX 芯片, I2C、 FEC、 USB 和 QSPI 等。这里执行的是 mx6ull_alientek_emmc.c 文件中的 board_init 函数。
stdio_init_tables 函数 : stdio 相关初始化。
initr_serial 函数 :初始化串口。
initr_announce 函数 :与调试有关,通知已经在 RAM 中运行。
power_init_board 函数 :初始化电源芯片,正点原子的 I.MX6ULL 开发板没有用到。
initr_flash 函数 :对于 I.MX6ULL 而言,没有定义宏 CONFIG_SYS_NO_FLASH的话函数 initr_flash 才有效。
initr_nand 函数 :初始化 NAND,如果使用 NAND 版本核心板的话就会初始化NAND。
initr_mmc 函数 :初始化 EMMC,如果使用 EMMC 版本核心板的话就会初始EMMC,
initr_env 函数 :初始化环境变量。
initr_secondary_cpu 函数 :初始化其他 CPU 核, I.MX6ULL 只有一个核,因此此函数没用。
stdio_add_devices 函数 :各种输入输出设备的初始化,如 LCD driver, I.MX6ULL使用 drv_video_init 函数初始化 LCD。
initr_jumptable 函数 :初始化跳转表。
console_init_r 函数 : 控制 台初 始 化, 初 始化 完 成以 后 此函 数会 调 用stdio_print_current_devices 函数来打印出当前的控制台设备
interrupt_init 函数 :初始化中断。
initr_enable_interrupts 函数 :使能中断。
initr_ethaddr 函数 :初始化网络地址,也就是获取 MAC 地址。读取环境变量"ethaddr"的值。
board_late_init 函数 :板子后续初始化,此函数定义在文件 mx6ull_alientek_emmc.c中,如果环境变量存储在 EMMC 或者 SD 卡中的话此函数会调用 board_late_mmc_env_init 函数初始化 EMMC/SD。会切换到正在时候用的 emmc 设备
initr_net 函数 :初 始 化 网 络 设 备 , 函 数 调 用 顺 序 为 initr_net->eth_initialize->board_eth_init()
run_main_loop 函数:主循环,处理命令。

相关推荐
LPH31191 小时前
Linux系统安全管理
linux·网络·安全·系统安全
linux行者2 小时前
linux基础重定向及组合重定向
linux·运维
kikumaru7143 小时前
Mac 安装 finalshell
linux·网络·macos
mit6.8244 小时前
[Linux_core] “虚拟文件” | procfs | devfs | 上下文
linux·c语言·c++
我言秋日胜春朝★5 小时前
【Linux网络编程】守护进程
linux·运维·服务器
星沉地动6 小时前
Makefile参考样例5:多个文件夹.c和.cpp混合编译
linux
街灯L6 小时前
【Linux】Tomcat搭建
java·linux·服务器·tomcat
riverz12276 小时前
‘Target closed‘ error in Puppeteer解决
linux
GineLee6 小时前
吉林大学操作系统期末复习整理
linux·服务器·经验分享·架构·硬件工程·安全架构