系统上电时的启动代码分析
2009-05-13 15:00:38来源:未知 阅读 ()
对U-BOOT的第1阶段代码的分析(基于SMDK2410的板子):
都知道U-BOOT分为两个阶段,第一阶段是(~/cpu/arm920t/start.S中)在FLASH上运行(一般情况下),完成对硬件的初始化,
包括看门狗,中断缓存等,并且负责把代码搬移到SDRAM中(在搬移的时候检查自身代码是否在SDRAM中),然后完成C程序运行所需要环境的建立,包括
堆栈的初始化等,最后执行一句跳转指令ldr pc, _start_armboot
_start_armboot: .word start_armboot,
进入到/lib_arm/board.c中的函数void start_armboot (void),从此就进入了第二阶段.这是在很多资料上都有讲述的,所以勿需多言了.
现在对于第一阶段有几个问题,以前我一直是没有搞明白的,既然在FLASH中的代码是把自己拷贝到SDRAM中,那么在S3C2410的内存地址空间,就
有两份的启动代码,第一份就是在FLASH中,第二份就是在SDRAM中.根据链接脚本文件(~/board/smdk2410/u-boot.lds)
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
cpu/arm920t/start.o (.text)
*(.text)
}
. = ALIGN(4);
.rodata : { *(.rodata) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.got : { *(.got) }
. = .;
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;
}
其中的链接命令 . =
0x00000000;表示地址计数器从0地址开始计数,而且_start 是程序代码段的入口,那么*.text中的所有地址标号
(cpu/arm920t/start.S中定义的)就应该从0地址开始计数,那么标号start_armboot(就是void
start_armboot (void)函数的入口地址)应该在FLASH中才对啊,所以按照上边的分析,
ldr pc, _start_armboot
_start_armboot: .word start_armboot
此条语句后,并没有跳转到SDRAM中的void start_armboot (void),而是跳转到了FLASH中的void start_armboot (void)中,
所以就出现了这样的矛盾,在FLASH中有一段代码把自己拷贝到SDRAM中,产生了两份UBOOT可执行的指令流,但是最后却没有跳转到SDRAM中去运行以提高指令执行的速度.
产生以上的认识是基于以下几个认识(肯定是错误的):
1.*.text中的所有地址标号(在链接时确定)是从0地址开始生成的.
2.relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 144页.
现在继续:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:chflags 修改文件标志
下一篇:我用FreeBSD--安装篇
- 急!断电源后不能启动[搞定了] 2009-05-13
- 用amd64版的兄弟么有用X的吗? 2009-05-13
- 启动dbus和hald网卡就不见了?? 2009-05-13
- netbsd启动gnome失败! 2009-05-13
- 做完raid之后,系统无法启动,各位兄弟帮帮忙吧 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash