3353|1

2781

帖子

419

TA的资源

五彩晶圆(中级)

楼主
 

DSP-Sitara课程学习分享6--uboot入门start.S [复制链接]

编译U-boot的方法在本论坛搜一下就可以了,我就不说了。编译后得到am335x目录,里面就有u-boot.bin和u-boot.lds



1.如何确定哪个文件最先运行呢?
首先进入u-boot-2011.09-psp04.06.00.08目录查看Makefile文件:
看到
#########################################################################
# U-Boot objects....order is important (i.e. start must be first)

OBJS  = $(CPUDIR)/start.o
再看看刚才编译uboot最后输出的信息:
-Ttext 0x402F0400 arch/arm/cpu/armv7/start.o 这句与上面就对应起来了。
所以,可以确定start.o最先运行。


链接脚本u-boot.lds中:
ENTRY(_start)
SECTIONS
{

. = 0x00000000;
     //0x402F0400
. = ALIGN(4);

.text :

{
  arch/arm/cpu/armv7/start.o (.text)
    //从0x402F0400地址开始放置
arch/arm/cpu/armv7/start.o 的代码段
   *(.text)
                  //其他文件所有代码段
}
2.分析start.S文件
对于 uboot的start.S,主要做的事情就是系统各个方面初始化。可以分成这几个部分:
(1)设置 CPU模式
(2)关闭看门狗
(3)关闭中断
(4)设置堆栈 sp 指针
(5)清除 bss 段
(6)异常中断处理
.globl _start
_start: b reset
      /*系统reset 后进入的入口*/
ldr pc, _undefined_instruction
  /*未定义指令,系统出错处理的入口*/
ldr pc, _software_interrupt
/*软中断,monitor 程序的入口*/
ldr pc, _prefetch_abort
/*,预取失败错误*/
ldr     pc, _data_abort         /*取数据失败错误*/
ldr pc, _data_abort

ldr pc, _not_used

ldr pc, _irq
          /*快速中断请求*/
ldr pc, _fiq
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
reset:

bl save_boot_params
//用来指定u-boot传递给内核的默认参
/*
* set the cpu to SVC32 mode
  //进入CPU管理模式
*/
mrs r0, cpsr

bic r0, r0, #0x1f

orr r0, r0, #0xd3

msr cpsr,r0
通过设置ARM 的CPSR 寄存器,让CPU 运行在操作系统保护模式,禁止IRQ 和FIQ 中断
,这是为了防止代码正在执行时, 产生外部中断, 导致程序跳转到异常向量表而无法
正常按顺序执行。

/* Set up the stack*/           设置好栈才能调用C函数
stack_setup:

mov sp, r4

adr r0, _start

cmp r0, r6

moveq r9, #0  /* no relocation. relocation offset(r9) = 0 */

beq clear_bss  /* skip relocation */
m
ov r1, r6   /* r1 <- scratch for copy_loop */

ldr r3, _image_copy_end_ofs

add r2, r0, r3  /* r2 <- source end address     */

小弟能力有限,只能分析到这里

最新回复

Thanks a lot.  详情 回复 发表于 2013-1-20 14:02
点赞 关注
 

回复
举报

535

帖子

0

TA的资源

版主

沙发
 
Thanks a lot.
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表