当前时区 GMT+8, 现在时间是 2008-5-12 18:11 游客: 注册 登录 仅登录论坛 | 搜索 帮助


标题: HelloWorld on Skyeye,新手请进!
北斗星君
注册会员
Rank: 2


UID 38171
精华 0
积分 333
帖子 138
阅读权限 20
注册 2003-5-18
来自 China
状态 离线
发表于 2007-8-15 23:29  资料  主页 短消息  加为好友 
问个问题。

我是在FB下编译代码的。结果一切正常,没什么特别的。但是我有几点疑问。

1 不论是楼主编译的,还是我自己编译的。所编译出来的binary code 都要达到 45KB+。我认为这个体积貌似有些大了吧。
如果用 x86的cpu,实现这样一个功能也就 512kb 已经是很惊人了。

2 我记得linux的老内核有一个参数 --oformat binary 可以直接编译生成binary code。但是在 arm 下貌似不可以。

3 如果我将代码的起始地址从 0x100000 改为 0x000000。虽然代码可以被正常加载,也被skyeye正确识别,但是却无法正常运行,为什么?

希望能给出一个回答。

还有一个不知道是不是我想的那样,代码中 用

mvn        r1,#0x2fc00
sub        r1,r1,#0x3e0
sub        r1,r1,#0x3

将 0xfffd001c 放入 r1 寄存器中,那为什么不直接将这个数送入 r1 呢?是不是因为arm的指令编码对立即数的限制所造成的呢?那我们平时编写代码该如何进行转换?


下面是我写的一个小代码,没有使用 lds 文件。

@boot.S
.text
        .align 4
        .global begin
        .type begin, function

begin:
        mov         r0, #0xd2
        msr         cpsr, r0
        mvn        r1,#0x2fc00
        sub        r1,r1,#0x3e0
        sub        r1,r1,#0x3
        mov        r0,#0x41

        str        r0,[r1]
l:       
        b        l



#Makefile
CFLAGS=-mapcs-32 -march=armv4 -mtune=arm7tdmi
LFLAGS=-e begin -Ttext 0x1000000 -s
all:
        arm-elf-gcc $(CFLAGS) -c boot.S -o boot.o
        arm-elf-ld $(LFLAGS) -o boot boot.o



#skyeye.conf
#skyeye config file sample
cpu: arm7tdmi

mach: at91

mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
log: logon=0, logfile=./sk1.log, start=0, end=200000

测试用的指令是 skyeye -e boot

本人今天刚开始看 arm 还请各位多多指教。

顶部
北斗星君
注册会员
Rank: 2


UID 38171
精华 0
积分 333
帖子 138
阅读权限 20
注册 2003-5-18
来自 China
状态 离线
发表于 2007-8-17 15:27  资料  主页 短消息  加为好友 
真所谓靠人不如靠己.
砍掉header 和 一些无用的段,现在文件体积一下子缩小很多.
不过,不能直接加载了.只能在配置脚本中定义加载的位置.

不过这才是我要的.

顶部
siuwash
新手上路
Rank: 1



UID 243751
精华 0
积分 8
帖子 15
阅读权限 10
注册 2007-10-15
状态 离线
发表于 2007-10-15 21:23  资料  短消息  加为好友 
you are too cool>>>>>>>>>>>.....

顶部
 


Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - 中国Linux公社 - WAP