免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1353 | 回复: 2
打印 上一主题 下一主题

求助!关于U-Boot第一阶段start.S中的几点疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-09 23:02 |只看该作者 |倒序浏览
.globl _start                                        /*汇编程序的缺省入口是start标号,定义入口点
_start:                                                          *.globl告诉汇编器,start这个符号要被链接器用到,
                                                                 *所以要在目标文件的符号表中标记它是一个全局符号,
                                                                 */链接器在链接时会查找目标文件中的_start符号代表的地址,把它设置为整个程序的入口地址
以上的注释是我对.globl的理解,但在标号的前面加与不加.globl的区别到底是什么呢?
好像有的子程序标号又没有加.globl,如果这个_start前面不加.globl又会出现什么样的错误呢?
这个是我的第一个问题???
在程序开始有#include <common.h>
                  #include <config.h>
这两个头文件是在u-boot的哪个目录啊,我没找到。还有后面的TEXT_BASE等几个宏是在这两个文件中定义的吗??
这个是我的第二个问题???
start_code:
        /*
         * set the cpu to SVC32 mode
         */
        mrs        r0,cpsr                               
        bic        r0,r0,#0x1f                       
        orr        r0,r0,#0xd3                       
        msr        cpsr,r0       
这段程序是想把CPSR置成0x000000DB,这样就是SVC mode了,但是在做MRS      r0, cpsr时从cpsr中读出的值又是多少呢?
[4,0]这5位是11111,才是正确的,但真的是这个值吗?
这个是我的第3个问题???
        ldr        pc, _start_armboot      
_start_armboot:        .word start_armboot
这个是个跳转,但我又不知道 start_armboot的值是多少,所以就不知道程序跳到哪里去了(如问题2)那到底是跳到哪里去了呢?
这个是我的第4个问题???

论坛徽章:
0
2 [报告]
发表于 2009-09-10 20:47 |只看该作者
第二个问题:
原始代码中没有 config.h 这个文件, 它是在运行 make smdk2410_config时自动生成的。common.h 位于 include 目录下。 TEXT_BASE定义在 board/samsung/smdk2410/config.mk 文件中 ,   config.mk又被所在目录的Makefile包含。

第三个问题:
谁说[4,0]这5位是11111才行? 。bic是位清零(Bit Clear)指令,bic r0,r0,#0x1F 意思是把r0的Bit[4:0]位清零(由0x1F指示),然后把结果写入r0中。 orr是按位求或指令,orr r0,r0,#0xD3 表示把r0的 Bit7,Bit6,Bit4,Bit1,Bit0 置为1,其它位保持不变。执行完上述操作后,cpsr中的 I=1, F=1, T保持不变(默认为0),M[4:0]=10011,意思是禁止IRQ,禁止FIQ,工作在ARM状态,工作在SVC32模式。  看这里:http://blog.chinaunix.net/u/7459/showart_1974344.html

第四个问题:
start_armboot 是个函数名,位于 lib_arm/board.c 中。 它的地址值会在连接时自动确定。 只要知道跳到这个函数就行了。

论坛徽章:
0
3 [报告]
发表于 2009-09-10 22:55 |只看该作者
你好!谢谢你耐心的回答我的问题,你的博客的文章我收藏了,等有时间一定仔细的拜读。
但第一个问题你好像还没有回答我啊,呵呵~~
对BIC指令的理解来至于ARM手册的一句话“the bic instruction performs a bitwise AND of value of the register with the complement of the value of
<shifter_operand>"
我把the complement of the value 理解为取反值了
但看了你的解析,好像是把shifter_operand中置了1的位的对应的位清零是吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP