免费注册 查看新帖 |

Chinaunix

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

U-BOOT中的start.s一些疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-21 13:23 |只看该作者 |倒序浏览
8可用积分
关于U-BOOT的问题!请大家帮帮忙 ,先谢了!
最近看了u-boot关于s3c440bx的移植代码,其中对于start.s中有几处不明白的地方
/*
now copy to SRAM the interrupt vector
*/
adr r0, real_vectors
add r2, r0, #1024
ldr r1, =0x0c000000
add r1, r1, #0x08 <===为什么要加上0x08?
vector_copy_loop:
ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
ble vector_copy_loop

还有一个问题:
real_vectors:
b reset
b undefined_instruction
b software_interrupt
b prefetch_abort
b data_abort
b not_used
b irq
b fiq

/*************************************************/

undefined_instruction:
mov r6, #3
b reset

software_interrupt:
mov r6, #4
b reset

prefetch_abort:
mov r6, #5
b reset

data_abort:
mov r6, #6
b reset

not_used:
/* we *should* never reach this */
mov r6, #7
b reset

irq:
mov r6, #8
b reset

fiq:
mov r6, #9
b reset
为什么用r6附值,为什么给r6附不同的值?
不同的模式跳转到reset时,r6中的值是不同的,通过这个值来判断当前处于什么模式,这具体是怎么实现的?

源代码见附件

[ 本帖最后由 jun_h_sc 于 2008-8-21 16:08 编辑 ]

s3c44b0-uboot-1.1.1-start.S.rar

2.19 KB, 下载次数: 60

最佳答案

查看完整内容

大概看了一下code。基本上没看出来什么特别的地方。对于uboot的code真没怎么研究过。给一些我的想法吧:第一个 +0x8,这个让我想起内核中THREAD_START_SP,是THREAD_SIZE - 8,也不是从头开始,为什么呢?感觉这两个似乎有点联系,但是不太清楚原因。第二个r6的值,我感觉是用来调试使用的,这样在reset的时候,可以从r6的值判断出来是从哪里reset的。

论坛徽章:
0
2 [报告]
发表于 2008-08-21 13:23 |只看该作者
大概看了一下code。

基本上没看出来什么特别的地方。对于uboot的code真没怎么研究过。

给一些我的想法吧:

第一个 +0x8,这个让我想起内核中THREAD_START_SP,是THREAD_SIZE - 8,也不是从头开始,为什么呢?感觉这两个似乎有点联系,但是不太清楚原因。

第二个r6的值,我感觉是用来调试使用的,这样在reset的时候,可以从r6的值判断出来是从哪里reset的。

论坛徽章:
0
3 [报告]
发表于 2008-08-21 13:31 |只看该作者

回复 #1 jun_h_sc 的帖子

好帖!! 支持一个!

论坛徽章:
0
4 [报告]
发表于 2008-08-21 13:48 |只看该作者

回复 #1 jun_h_sc 的帖子

好贴啊,等待有经验的同仁回答

论坛徽章:
0
5 [报告]
发表于 2008-08-21 14:24 |只看该作者
不是很清楚+0x08好象是跟流水线有关系??又好象不是 等高人指点

论坛徽章:
0
6 [报告]
发表于 2008-08-21 14:38 |只看该作者
real_vectors位置在哪里?

论坛徽章:
0
7 [报告]
发表于 2008-08-21 14:41 |只看该作者
第一个问题应该和流水线没有关系
流水线一般用nop之类的指令,不会去加8

uboot的代码没有看过。不过无所谓了,就是选择一个地址而已,也许有深层次的原因。

第二个问题。r6在uboot中应该有特殊的用途,这个很明显。
你给的code不全,我也没看过这部分的代码,就不知道了。

发现arm中这部分的代码都写的很像,和kernel boot中的code是一个模子出来的。

评分

参与人数 1可用积分 +15 收起 理由
bitmilong + 15 鼓勵回復

查看全部评分

论坛徽章:
0
8 [报告]
发表于 2008-08-21 14:42 |只看该作者

论坛徽章:
0
9 [报告]
发表于 2008-08-21 16:14 |只看该作者
感觉6楼不太具体,源代码已经上传了,麻烦看下然后帮忙解决下。
谢谢7楼的达达,但是你所提供的资料没有我们问题中所想要的答案。
补充下:
./u-boot/s3c44b0/start.S
  version--U-Boot 1.1.1
希望大家能帮忙解决下

论坛徽章:
0
10 [报告]
发表于 2008-08-21 17:12 |只看该作者
1、now copy to SRAM the interrupt vector看起来是将中断向量表copy到sram中,从而达到中断快速处理的目的。偏移量0x08应该是软件中断swi handler所在之处。我只了解这一点。至于为什么uboot这样做,想不明白。
2、用r6置值之类的,不用管,没什么意义。每个异常中断handler都b reset了,即是说任何异常都只有导致reset。给r6置不同的值只不过让看代码的人清晰一点罢了。当然你可以修改那些代码,让异常发生时,按照你的想法进行处理。

评分

参与人数 1可用积分 +15 收起 理由
bitmilong + 15 鼓勵回複

查看全部评分

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP