|
发表于 2007-8-15 23:29:32
|
显示全部楼层
问个问题。
我是在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 还请各位多多指教。 |
|