uboot启动第二阶段分析( 三 )


uboot 第一次启动时,因为没有烧录 env 分区,gd-> 应当为0,这时候会使用 uboot 的默认系统变量,并写入到 SD 卡的 env 分区中
控制台初始化
做的是控制台的第二阶段的初始化,主要是进行控制台的软件方面的配置
重定位了 stdin
网卡芯片初始化
对网卡芯片本身进行初始化
开机logo显示
进行开发板启动前的初始化,开启 lcd 显示开机 logo
logo 一般是使用软件制作的数组
通过sd卡烧录系统
通过 om_sd 会判断开发部的 left 按键是否按下,开发板会在按键按下的时候,进入更新模式,读取 SD 卡中的镜像烧录系统
使用 SD 卡烧录比的方式简单、高效,一般用于量产的场景
死循环
主要是有三个功能
总结
以下来自朱老师总结的 uboot 的工作
init_sequencecpu_init 空的board_init 网卡、机器码、内存传参地址dm9000_pre_init网卡gd->bd->bi_arch_number 机器码gd->bd->bi_boot_params 内存传参地址interrupt_init 定时器env_initinit_baudrate gd数据结构中波特率serial_init空的console_init_f 空的display_banner 打印启动信息print_cpuinfo 打印CPU时钟设置信息checkboard检验开发板名字dram_initgd数据结构中DDR信息display_dram_config 打印DDR配置信息表mem_malloc_init初始化uboot自己维护的堆管理器的内存mmc_initializeinand/SD卡的SoC控制器和卡的初始化env_relocate环境变量重定位gd->bd->bi_ip_addr gd数据结构赋值gd->bd->bi_enetaddr gd数据结构赋值devices_init空的jumptable_init不用关注的console_init_r真正的控制台初始化enable_interrupts 空的loadaddr、bootfile环境变量读出初始化全局变量board_late_init空的eth_initialize空的x210_preboot_init LCD初始化和显示logocheck_menu_update_from_sd 检查自动更新main_loop主循环
我的博客