u-boot移植之二 uboot-2015.04启动分析(未完成)

注:该分析尚未完全完成,根据移植需要再添加内容

启动分析

根据分析可以知道使用arch/arm/cpu/u-boot.lds链接文件,其中".__image_copy_start"没有使用,所以最开始是.vectors段,人口是_start。
并该段在arch/arm/lib/vectors.s中,主要记录了中断向量,然后跳入reset,即arch/arm/cpu/arm920t/start.S的reset标号。
(1)arch/arm/cpu/arm920t/start.S
设置为svc32模式
关看门狗
关中断
设置时钟
cpu_init_crit
关cache
关mmu
lowlevel_init
初始化存储控制器
bl _main
<!-增加跳入SRAM的代码!->
跳到arch/arm/lib/crt0.S执行
(2)arch/arm/lib/crt0.S
_main (在arch/arm/lib/crt0.S中)
设置栈指针
分配全局变量gd的栈空间,并设置r9指向gd。注:gd_t在include/asm-generic/global_datt.h中定义
如果配置了,就分配堆空间,暂时没有发现使用,所以忽略。
最后得到的堆栈空间如"绘图1.vsdx"所示。
清空gd的内存空间。
board_init_f
注:有多个board_init_f函数,根据Makefile和smdk2410的配置,可以得知调用common/board_f.c中的board_init_f
zero_global_data
清空gd结构体对象
initcall_run_list
执行init_sequence_f列表的函数
......
board_early_init_f
设置时钟和GPIO(需要修改)
env_init
由于定义了CONFIG_ENV_IS_IN_NAND(这个按照mini2440分析,实质smdk2410是使用norflash而不是nandflash记录配置)
如果存在环境变量,更新gd->env_addr指向的地址为environment的data变量
init_baud_rate
serial_init
console_init_f
print_cpuinfo
announce_dram_init
dram_init
setup_machine
reserve_global_data
reserve_fdt
reserve_arch
reserve_stacks
setup_dram_config
show_dram_config
以上都要写初始化内容和设置gd的内容
然后在回到ctr0.S中继续执行
跳入relocate_code(arch/arm/lib/relocate.S中)
完成重定向工作
跳转会ctr0.s(注:这里跳转会重定位后的代码,进入relocate_code之前已经计算好lr了)
c_runtime_cpu_setup实质什么都没做
清空bss段
跳转到board_init_r
执行init_sequence_r的函数
...
一系列初始化
...
run_main_loop
循环执行main_loop
进入循环命令行模式
stored_bootdelay
更新stored_bootdelay,并返回bootcmd参数
autoboot_command
加入到时间不中断,就自动启动,来源于bootcmd参数设置。
cli_simple_loop分析 并执行命令
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值