一、uboot启动第2阶段总结
第二阶段主要是对开发板板级的硬件、软件数据结构进行初始化。
第一步:为gd,bd分配内存空间
第二步:循环执行init_sequence里的初始化函数
init_sequence:
cpu_init: 空函数
board_init: 网卡、机器码、内核传参内存地址
dm9000_pre_init SOC内部SROM控制器初始化,因为和外部网卡DM9000的通信使用的是SROM接口,所以要对这个SROM控制器进行初始化
interrupt_init: pwm timer4 定时10ms
env_init:
init_baudrate: gd数据结构中波特率
serial_init: 空的
console_init_f: 空的
display_banner: 打印启动信息
print_cpuinfo: 打印CPU的时钟设置信息
checkboard: 打印开发板名字
dram_init: gd数据结构中DDR信息
display_dram_config: 打印DDR配置信息表
第三步:初始化uboot堆内存管理器
mem_malloc_init
第四步:soc的SD/MMC控制器初始化和外部SD/MMC卡的初始化
mmc_initialize
INIT_LIST_HEAD: 设置SD/MMC设备链表
cpu_mmc_init: 对SD/MMC控制器初始化
setup_hsmmc_clock: 时钟设置
setup_hsmmc_cfg_gpio: GPIO设置
smdk_s3c_hsmmc_init: SD/MMC管理的数据结构的设置
smdk_s3c_hsmmc_init: 从SD/MMC设备链表中找到要初始化的SD/MMC设备
mmc_init: 外部SD/MMC卡的初始化,发不同的命令,读取对应的响应,使之从idle状态跳转到工作状态,同时读取卡的信息。
第五步:环境变量重定位,将SD卡中的环境变量读到内存中
env_relocate
第六步:设定IP地址
gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
第七步:设定板子的网卡物理地址
gd->bd->bi_enetaddr
第八步:其他设备的初始化,之前没有进行过初始化的设备要进行初始化。
devices_init
第九步:跳转表设置,uboot中没有使用
jumptable_init
第十步:控制台第二阶段初始化
console_init_r
第十一步:中断使能,uboot中没有使用中断,所以该函数是空的。
enable_interrupts
第十二步:设置两个全局变量load_addr和copy_filename
第十三步:开发板最后一级初始化,要在最后时刻初始化的东西在这里进行初始化
board_late_init x210中该函数为空
第十四步:网卡初始化,
eth_initialize, 网卡初始化在之前的board_init已经实现,因此这里函数为空。
第十五步:LCD初始化合显示logo
x210_preboot_init
第十六步:检查自动更新,实现量产烧录功能
check_menu_update_from_sd
update_all
第十七步:uboot主循环
main_loop
二、启动结果特征总结
1.第一阶段为汇编阶段、第二阶段为C阶段
第一阶段首先是start.S, 然后调用lowlevel.S, 最后调用start_armbooot.c,进入第二阶段
2.第一阶段在SRAM中、第二阶段在DRAM中
3.第一阶段注重soc内部、第二阶段注重soc外部board内部
三、移植时的注意点
1.x210_sd.h头文件中的宏定义
宏定义会影响程序编译的走向,因此要对这个头文件要了解,很多时候只需要修改头文件,而不需要修改代码。
2.特定硬件的初始化函数位置
要对硬件的初始化函数的位置要了解,这样才能当硬件驱动不正常的时候,才知道去哪里查程序问题。
上一篇:cortex-a8 uboot系列:第十一章 uboot源码分析 uboot如何启动内核1
下一篇:cortex-a8 uboot系列:第九章 uboot源码分析5-启动第二阶段
推荐阅读最新更新时间:2024-11-13 12:21
设计资源 培训 开发板 精华推荐
- LTC3355 的典型应用 - 具有集成 SCAP 充电器和备用稳压器的 20V 1A 降压型 DC/DC
- 基于 NCD9830 8 位、8 通道 ADC 的 NCD9830EVB 评估板
- 2.5寸FPV穿越机机架
- ADR5041A 2.5 Vout 负精密基准配置的典型应用
- TB2932HQ 最大功率 49W BTL x 4ch 音频功率的典型应用
- LT1634CCZ-2.5 微功率电压和电流基准的典型应用
- LTC4217 热插拔控制器的典型应用,电流由 ADC 监控
- 适用于STM32F042K6 MCU的STM32 Nucleo-32开发板,支持Arduino nano连接
- 时钟可调、高精度、四阶二阶、模拟滤波器构建块
- STR71x 微控制器电源管理应用电路