ultraman 发表于 2010-7-28 11:18:42

Helloworld on skyeye

请问一下,除了置顶帖子的那个helloworld的程序。我可不可以自己写一个用printf实现helloworld的程序,然后用skyeye模拟呢? 我的意思是 这个程序只有skyeye.conf 和 hello.c两个file,然后用bfin-elf-gcc hello.c -o hello编译,再用skyeye -e hello运行,而不在任何操作系统(例如,uClinux)下运行hello。谢谢大家

hello.c的源码只用printf实现,如下:

#include <stdio.h>

      int main(void)

      {

            printf("Hello world!");

            return 0

      }

ksh 发表于 2010-7-28 13:20:21

不可以。还是需要一个启动的汇编文件,设置堆栈及一些基本的初始化,可以参考置顶的start.S那个文件。

ultraman 发表于 2010-7-28 13:52:56

谢谢。在安装toolchain的时候里面有crt0.s/crt0.o文件。crt0.s应该就是用来基本初始化的,在运行bfin-elf-gcc的时候,compiler会在main之前自动调用toolchain自带的crt0.o吗?还是说我必需要自己写crt0.s 然后生成crt0.o 最后把它和hello.o 一起生成可执行程序?

chuangwai 发表于 2010-7-28 16:38:07

我试着把这个往s3c2440A上面改,结果出现了一些问题
start.s如下
.text
        .align 4
        .global begin
        .type begin, function
       
       
.global _start
_start:
        @set up irq stack
        mov         r0, #0xd2                @ make irq mode with all irqs disabled
        msr         cpsr, r0
        ldr         sp, =irq_stack         @ set sp_irq = irq_stack
        bl             hello
stop:        b        stop
                       
.data
        .align4
irq_stack:
        .space        4096
hello.c如下
#define UTXH0 *(long*)0x50000020

int hello(void)
{       
        int i;
        char * hellostr="helloworld";
       
                for(i=0;i<10;i++)
                {
                        UTXH0=hellostr;
                }
       
        return 0;       
}
Makefile如下
CROSS:=arm-none-eabi

hello.bin:hello
        $(CROSS)-objcopy -O binary hello hello.bin
hello:start.o hello.o
        $(CROSS)-ld -Ttext=0x0000000 start.o hello.o -o hello
start.o:start.S
        $(CROSS)-as start.S -o start.o
hello.o:hello.c
        $(CROSS)-gcc -c -o hello.o hello.c
       
clean:
        rm *.o *.bin hello hello.bin

skyeye.conf如下

#skyeye config file sample
#cpu: arm7tdmi
cpu:arm920t

#mach: at91
mach:s3c2440
#mach:s3c44b0

mem_bank: map=M, type=RW, addr=0x00000000, size=0x00040000,file=./hello.bin,boot=yes
mem_bank: map=I, type=RW, addr=0x50000000, size=0x08000000

uart:mod=term
log: logon=1, logfile=./sk2.log, start=0, end=300

skyeye版本为用sudo apt-get install安装的1.2.5,
直接启动skyeye,没出现helloworld,log文件记录如下
N 0 :p 0,i e3a000d2,
N 1 :p 4,i e129f000,
N 2 :p 8,i e59fd004,
N 3 :p c,i efffffff,
N 4 :p c,i efffffff,
N 5 :p c,i efffffff,
N 6 :p c,i efffffff,
N 7 :p c,i efffffff,
N 8 :p c,i efffffff,
N 9 :p c,i efffffff,
N a :p c,i efffffff,
N b :p c,i efffffff,
N c :p c,i efffffff,
后面一直是N c :p c,i efffffff,
如果用skyeye -d启动调试,则在gdb调试时能正常出现helloworld,若调试过程中输入命令c,则异常,log记录在c命令开始的那点起为N c :p c,i efffffff,
换用1.3.0版本,直接运行则出现segment fault错误
将#define UTXH0 *(long*)0x50000020改为#define UTXH0 *(long*)0x01D00020(s3c44b0uart0对应的地址)对skyeye.conf作相应更改,启动后能正常打印helloworld
为什么arm7的处理器直接改过去就行,arm9不行呢,是否arm9需要进行一些初始化才可以呢,请问一下不能成功的具体原因是什么,谢谢

ksh 发表于 2010-7-28 21:52:54

哦,s3c2440我们在最新的版本skyeye-1.3.1测试可以通过,但是以前的版本不一定可以。如果运行s3c2440的helloworld,建议你在skyeye-1.3.1_rc1上测试。

Thanks
MK

chuangwai 发表于 2010-7-29 00:06:39

原帖由 ksh 于 2010-7-28 21:52 发表 http://www.linuxfans.org/bbs/images/common/back.gif
哦,s3c2440我们在最新的版本skyeye-1.3.1测试可以通过,但是以前的版本不一定可以。如果运行s3c2440的helloworld,建议你在skyeye-1.3.1_rc1上测试。

Thanks
MK
在1.3.1上已测试,我修改到s3c2440上的helloworld正常运行,但是1.3.1的log文件在skyeye.conf中如何设置,我直接使用1.2.5的格式,1.3.1报告错误,另外在1.3.1中没找到s3c44b0,报告说不认识这个mach
刚又看了下,show-pref列表中没有44b0,这个取消支持了?
找到了1.3.1的文档,好像没有logfile了,是这样吗?

[ 本帖最后由 chuangwai 于 2010-7-29 01:06 编辑 ]
页: [1]
查看完整版本: Helloworld on skyeye