启动代码与u-boot的问题

[复制链接]
 楼主| ajhjj 发表于 2008-9-13 12:59 | 显示全部楼层 |阅读模式
<br />大多数bootloader都分为stage1和stage2两大部分u-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:<br />(1)&nbsp;定义入口&nbsp;。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。&nbsp;(2)设置异常向量(Exception&nbsp;Vector)。&nbsp;(3)设置CPU的速度、时钟频率及中断控制寄存器。&nbsp;(4)初始化内存控制器&nbsp;。&nbsp;(5)将ROM中的程序复制到RAM中。&nbsp;(6)初始化堆栈&nbsp;。&nbsp;(7)转到RAM中执行,该工作可使用指令ldr&nbsp;pc来完成。&nbsp;<br />上面是U-BOOT第一阶段的作用<br />问题:<br />1.我的板子里面已经有U-BOOT了,而一些启动代码,如44B0的启动代码44b0init.s中也有这些功能啊,每次写程序时,我都把44B0init.s包含进来,那这样子不是重复了?<br />2.如果我的板子不要加入操作系统,裸奔时也要U-BOOT吗?<br />3.我把U-BOOT擦掉了,用AXD+JTAG不能调试?把U-BOOT烧进去后就可以调试了,这么说,无论怎么样都先要把U-BOOT烧进去才可以?<br />&nbsp;<br />有把这个理解好的哥哥姐姐弟弟妹妹叔叔啊姨...能帮我解释一下吗?
小飞鼠 发表于 2008-9-13 14:58 | 显示全部楼层

我的理解:

&nbsp;&nbsp;我的理解,不知道准确不:<br />&nbsp;&nbsp;用AXD和JTAG调试的时候,是下载程序到&nbsp;SDRAM&nbsp;里运行代码的,<br />&nbsp;&nbsp;当有U-BOOT在的时候,它已经帮你初始化了&nbsp;SDRAM,所以可以调试。<br />&nbsp;&nbsp;但是,当没有U-BOOT的时候,就没有程序来&nbsp;初始化SDRAM了,所以,你再用AXD+JTAG下载程序到SDRAM的时候,SDRAM根本就工作不起来的,所以不能调试。<br /><br />&nbsp;&nbsp;你试着&nbsp;写一小段启动代码,把SDRAM&nbsp;初始化,然后再用AXD+JTAG来调试看,应该是可以的。
 楼主| ajhjj 发表于 2008-9-13 15:22 | 显示全部楼层

应该是这样子的

&quot;当有U-BOOT在的时候,它已经帮你初始化了&nbsp;SDRAM,所以可以调试。<br />当没有U-BOOT的时候,就没有程序来&nbsp;初始化SDRAM了,所以,SDRAM根本就工作不起来的.&quot;<br />应该就是这样子的,可是<br /><br />&quot;写一小段启动代码,把SDRAM&nbsp;初始化,然后再用AXD+JTAG来调试看,应该是可以的&quot;<br /><br />这段代码写完怎么办?把它当U-BOOT一样烧到flash里去?<br />或者直接把44b0init.s的代码当U-BOOT一样烧到flash里去?<br /><br />
小飞鼠 发表于 2008-9-13 15:30 | 显示全部楼层

理论上是这样

&nbsp;&nbsp;&nbsp;&nbsp;理论上是这样,我没有试过,你可以尝试下。<br />&nbsp;&nbsp;&nbsp;&nbsp;记得告诉我试验结果。:)
 楼主| ajhjj 发表于 2008-9-14 12:22 | 显示全部楼层

老鼠

试验结果是可以的<br />把程序+启动代码编译后,直接烧入0x0处就行了<br />但是在flash中运行,明显比在SDRAM中运行慢多了
小飞鼠 发表于 2008-9-14 16:17 | 显示全部楼层

慢多了?

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除非你的启动代码没有执行&nbsp;把&nbsp;flash里的代码拷贝到&nbsp;SDRAM中,不然和用UBOOT启动运行程序是一样的。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这就牵涉到&nbsp;启动代码部分了!你可以自己看看!
 楼主| ajhjj 发表于 2008-9-15 18:05 | 显示全部楼层

老鼠

启动代码我还要慢慢地啃!!!<br /><br />还有一个问题我一直不明白:<br />44b0接的sdram的地址是0x0c000000,但为什么很多开发板都写着是0x0c008000呢?这多出来的地址干什么去了?
twentyone 发表于 2008-9-15 19:06 | 显示全部楼层

最后一个问题:

你看一下44B0的存储设置,很多系统都可以通过配置把FLASH映射到不同的地址。<br />不过我觉得0x0c008000可能有问题。
 楼主| ajhjj 发表于 2008-9-16 19:42 | 显示全部楼层

0x0c008000应该没有问题

应该是0x0c008000以上的地址都没有问题.我搜索了一下,有人给出的答案是这多出来的地址是系统保留的,但我没有找到系统保留相关的文字说明!!!<br /><br />把FLASH映射到不同的地址肯定可以啊,但由于是放启动代码相关的,所以一般放在0x0处(不知道我有没有理解错你的意思?)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部