uboot启动第二阶段总结,以x210为例

这只是博主的个人见解,如有错误之处,还望指出,一起交流学习!!

uboot启动第二阶段,其实也就是lib_arm/board.c里面的start_armboot函数:

0---比较重要的几个基础数据结构有全局数据结构gd_t、板级信息结构bd_t
1---分配内存,也就是计算gd在内存DDR中的起始地址
2---分配gd_t、bd_t空间,并清零
3---init_sequence,一个很重要的初始化函数,同时其也是一个函数数组指针,下面列举几个比较重要的初始化函数
---cpu_init 主要是cpu内部的初始化
---reloc_init 重定位的初始化
---board_init,    板级硬件初始化
---dm9000_pre_init 网卡初始化
--- gd->bd->bi_arch_number 开发板的机器码,很重要的一个参数,事关能否启动内核
--- gd->bd->bi_boot_params uboot给linux kernel启动时的传参的内存地址
---interrupt_init, 中断初始化,其实追进去发现主要是初始化Timer4,将其做为计时用,也就是bootdelay         
---env_init,    环境变量初始化,看板子是从哪里获取env的,对于x210就是env_movi.c         
---init_baudrate, 波特率初始化,初始化波特率为115200
---serial_init, 串口初始化     
---console_init_f, 控制台第一次初始化(可从_f看出为第一次,后面有以_r结尾的为第二次初始化)
---gd->have_console     
---display_banner, 打印uboot版本信息  
---version_string U_BOOT_VERSION mekefile编译生成的,__DATE__ 日期 __TIME__ 时间     
---print_cpuinfo, 打印cpu信息及各总线频率
---checkboard, 打印板级信息
---init_func_i2c, 初始化i2c   
---dram_init, dram初始化,这是软件架构层次的初始化
---gd->bd->bi_dram[0].start         // 第一片内存的起始地址
        ---gd->bd->bi_dram[0].size          // 第一片内存的大小
---display_dram_config 打印内存(dram)区配置信息
4---mem_malloc_init 初始化堆管理器
5---mmc_initialize 针对特定开发板的mmc初始化
---board_mmc_init
---mmc_init
6---env_relocate 环境变量的重定位
7---gd->bd->bi_ip_addr gd->bd->bi_enetaddr 确定板子的ip地址和mac地址
8---devices_init 设备初始化
9---jumptable_init jumptable跳转表,本身是一个函数指针数组
10--console_init_r 控制台的第二阶段初始化
11--enable_interrupts CPSR中总中断标志位的使能
12--getenv ("loadaddr") getenv ("bootfile") 这两个环境变量都是内核启动有关的
13--board_late_init 开发板级别的一些初始化
14--eth_initialize 网卡相关的初始化,芯片本身的初始化
15--x210_preboot_init 启动时的lcd和logo显示相关的
16--check_menu_update_from_sd 自动更新的功能
17--main_loop 进入死循环,接收命令、解析命令、执行命令




                                                    

你可能感兴趣的:(uboot)