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 函数:主循环,处理命令。

相关推荐
爱莉希雅&&&29 分钟前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
不羁的木木36 分钟前
《HarmonyOS技术精讲》四:驱动开发入门 ── 标准外设与非标USB串口
驱动开发·华为·harmonyos
z2005093036 分钟前
【linux学习】深入理解linux文件I/O,从C标准库到内核态
linux·学习·操作系统
weixin_307779131 小时前
面向高性能保密计算的定制 Linux 系统构建与自动部署方案
linux·安全·网络安全·性能优化·系统安全
着迷不白1 小时前
五、文本处理工具+正则表达式
linux·运维·服务器
载数而行5202 小时前
Linux 4常用指令(文件/时间/搜索查找/压缩解压指令)
linux
不做无法实现的梦~2 小时前
MAVLink 协议教程
linux·stm32·嵌入式硬件·算法
实心儿儿2 小时前
Linux —— 线程控制(2)
linux·运维·服务器
烛衔溟3 小时前
TypeScript 模块与声明文件全解
linux·ubuntu·typescript
量子炒饭大师3 小时前
【Linux系统编程:进程概念】——【从 冯诺依曼系统体系结构 到 操作系统】
linux·运维·服务器·操作系统·冯诺依曼