打印

HelloWorld on Skyeye,新手请进!

问个问题。

我是在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 还请各位多多指教。

TOP

真所谓靠人不如靠己.
砍掉header 和 一些无用的段,现在文件体积一下子缩小很多.
不过,不能直接加载了.只能在配置脚本中定义加载的位置.

不过这才是我要的.

TOP

you are too cool>>>>>>>>>>>.....

TOP

非常感谢啊!

TOP

启蒙老师

谢谢shang79啦,不管是什么技术,自己会不是会,把人教会才算会。让我们在兴趣中学习,在分享中提高,在合作中共赢。希望我们越来越强,越来越多的优秀软件made in china.

TOP

make :nothing to be done for 'all'
why?
gcc 3.44
make 3.81

TOP

make :nothing to be done for 'all'
没有人遇到吗?

TOP

回复 #13 tropic 的帖子

还是有问题呢,不过链接时-n选项啥意思呢。

TOP

伪指令,还有label,立即数等等都和教科书上写的ARM程序大相径庭。这些都是GNU AS汇编编译器的统一语法。在as.info中有详细的介绍.

________________
真可惜,我第一次看文章的时候没有认真看,弄得我后来因为这个转换花了许多的时间..
汲取经验,置顶精华一定先看才行!

呵,继续努力~

TOP

我用的4.1.1版的gcc
-mshort-load-bytes选项和-mapcs-32都是不合法的。要怎么改呢?
版主啊,下次发布的时候文档里写上你用的编译工具的版本号吧,要不不好查怎么替换啊。

[ 本帖最后由 lenghuo 于 2008-12-3 16:57 编辑 ]

TOP

make后,提示如下:
make: Nothing to be done for `all'.

TOP

谢谢楼主,目前学习中。。。

TOP

用make编译时出错了

[root@localhost ~]# cd Hello4Skyeye/
[root@localhost Hello4Skyeye]# ll
total 148
-rwxrwxr-x  1 root1 root1 46727 Mar  2  2005 hello
-rw-r--r--  1 root1 root1   273 Feb 17  2005 hello.c
-rw-r--r--  1 root1 root1   822 Mar  2  2005 hello.lds
-rw-rw-r--  1 root1 root1    82 Mar  2  2005 hello.n
-rw-rw-r--  1 root1 root1  1992 Mar  2  2005 hello.o
-rw-rw-r--  1 root1 root1  3985 Mar  2  2005 hello.r
-rw-rw-r--  1 root1 root1  3645 Mar  2  2005 hello.s
-rw-r--r--  1 root1 root1   640 Mar  2  2005 makefile
-rw-r--r--  1 root1 root1  4078 Feb 17  2005 README
-rw-rw-r--  1 root1 root1     0 Apr  1 18:29 sk1.log
-rw-r--r--  1 root1 root1   225 Mar  2  2005 skyeye.conf
-rw-rw-r--  1 root1 root1  4744 Mar  2  2005 start.o
-rw-r--r--  1 root1 root1   424 Mar  2  2005 start.S
[root@localhost Hello4Skyeye]# make
make: Nothing to be done for `all'.
[root@localhost Hello4Skyeye]# make install
make: *** No rule to make target `install'.  Stop.
[root@localhost Hello4Skyeye]# make makefile
make: Nothing to be done for `makefile'.
[root@localhost Hello4Skyeye]# make install
make: *** No rule to make target `install'.  Stop.

TOP

好厉害

都是高手啊
自由度,给你361度

TOP

ubuntu8.04,装好了arm-elf-tools,下载了Hello4Skyeye代码,根据楼主的步骤make clean,然后make之后skyeye hello,结果不断打印
Bus read error, can not find corresponding bank for addr 0x3c20,pc=0x3c20
这句话,当然后面的地址不断递增……这是怎么回事?

TOP