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
} 不可以。还是需要一个启动的汇编文件,设置堆栈及一些基本的初始化,可以参考置顶的start.S那个文件。 谢谢。在安装toolchain的时候里面有crt0.s/crt0.o文件。crt0.s应该就是用来基本初始化的,在运行bfin-elf-gcc的时候,compiler会在main之前自动调用toolchain自带的crt0.o吗?还是说我必需要自己写crt0.s 然后生成crt0.o 最后把它和hello.o 一起生成可执行程序? 我试着把这个往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需要进行一些初始化才可以呢,请问一下不能成功的具体原因是什么,谢谢 哦,s3c2440我们在最新的版本skyeye-1.3.1测试可以通过,但是以前的版本不一定可以。如果运行s3c2440的helloworld,建议你在skyeye-1.3.1_rc1上测试。
Thanks
MK 原帖由 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]