uboot第二阶段

************************************uboot第二阶段**************************************
第二阶段: C阶段
在DRAM中
注重SoC外部Board内部
***************************************************************************************

补充C知识: typedef int (init_fnc_t) (void); //就是对一个 int (void)类型的函数类型进行取别名init_fnc_t
init_fnc_t *init_sequence[] //这里定义一个函数数组
***************************************************************************************


Uboot第二阶段正式开始分析:
init_sequence[] //定义一个函数数组,循环遍利初始化
cpu_init //CPU初始化,空函数,在第一阶段SoC已经初始化好了
board_init //板级初始化(网卡初始化、机械码、内存传参)
dm9000_pre_init //网卡初始化
gd->bd->bi_arch_number = MACH_TYPE; //存放机械码
gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);//0x30000100,内存传参
interrupt_init //定时器初始化
env_init //环境变量初始化
init_baudrate //波特率设置
serial_init //串口初始化,这里是空的
console_init_f //控制台初始化,_f表示第一阶段初始化,_r表示第二阶段,这里是空的
display_banner //显示版本信息
print_cpuinfo //显示各个时钟频率
checkboard //检验开发板名字
init_func_i2c //i2c函数初始化,设置速度和从机
dram_init //DDR初始化,设置几片内存,内存起始地址,内存大小
display_dram_config //打印DDR的配置
mem_malloc_init //初始化uboot自己的堆内存
mmc_initialize //SD/MMC的初始化,为下一步将OS移植到DRAM做准备
nand_init //Nand初始化
env_relocate //环境变量重定位,将SD/Nand中的环境变量,重定位到DRAM中
gd->bd->bi_ip_addr=getenv_IPaddr ("ipaddr")//从环境变量中获取IP地址 gd数据结构赋值
gd->bd->bi_enetaddr[reg] //获取MAC地址 gd数据结构赋值
devices_init //这里是空的,当前第二阶段不需要
jumptable_init //跳转表 只有左值,没有右值,无需要关注
console_init_r //控制台第二初始化,真正的控制台初始化
enable_interrupts //空函数
load_addr
board_late_init //这里是空的
eth_initialize //空的
ide_init //空的
x210_preboot_init //LCD初始化和显示LOGO
check_menu_update_from_sd //检查自动更新,SD卡自动更新进Nand中,有利于工程师刷机,类似于U盘重装系统
main_loop //主循环,用于解析命令,执行命令


猜你喜欢

转载自blog.csdn.net/weixin_37661634/article/details/80460449