uboot启动过程二阶段代码简单分析(PDK7105开发板 sh架构)
通过前面的汇编代码的分析可以得到,第二阶段从
lib_sh/board.c中的start_sh4boot 函数开始.
程序流程为:
soc_init //在cpu/sh/stx7105/stx7105.c中 初始化时钟和网卡地址,保存设备ID号
timer_init //在lib_sh/time.c中 设置定时器
board_init //在board/pdk7105/pdk7105.c中 这个由开发人员来配置 大概是初始化SPI 网卡 PIO等
env_init //initialize environment 根据image的启动地点来确定函数位置,
//在include/configs/pdk7105.h中我们配置从nand启动,所以这个函数在
//common/env_nand.c中 检查Flash上的环境参数
init_baudrate //initialze baudrate settings 在lib_sh/board.c中
serial_init //serial communications setup 这个由宏CONFIG_STM_ASC_SERIAL控制 所以被定义在
//drivers/serial/stm-asc.c中 初始化asc(异步串行控制器)
console_init_f //Initial console 在common/console.c中 初始化控制台
checkboard //在board/pdk7105/pdk7105.c中 检查CPU的工作模式
display_banner //在lib_sh/board.c中 打印U-boot的版本,编译的时间
init_func_ram //在lib_sh/board.c中 配置可以用ram的大小,显示RAM大小
flashWriteEnable //configure available FLASH banks 在board/pdk7105/pdk7105.c中
mem_malloc_init //initialize malloc() area 在lib_sh/board.c中
nand_init // go init the NAND 在 drivers/mtd/nand.c中由宏CONFIG_CMD_NAND控制
spi_init // go init the SPI 在 cpu/sh/spi.c中 由宏CONFIG_SPI控制 初始化SPI
env_init_after_spi_done //在cpu/sh/env_eeprom.c中 由宏CFG_ENV_IS_IN_EEPROM和CFG_BOOT_FROM_SPI
//控制 检查eeprom上的环境参数
env_relocate // Allocate environment function pointers etc. 在common/env_common.c中
// 配置环境变量并重新定位
pci_init //Do pci configuration 在drivers/pci/pci.c中 由宏CONFIG_PCI控制
devices_init //Initialize devices 在common/devices.c中 初始化外设 如I2C等
jumptable_init //在common/exports.c中 初始化全局数据表中的跳转表
console_init_r //Initialize the console after the relocation and devices init) 初始化控制台
misc_init_r // 根据平台初始化设备,没有在STX平台下面找到这个函数原型 所以没有用到
eth_initialize //在net/eth.c中 初始化网络 由宏CONFIG_CMD_NET控制
main_loop //在common/main.c中 监控串口的输入 如果没有就根据bootcmd这个环境变量载入内核
阅读(2053) | 评论(0) | 转发(0) |