这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 没有ARM开发板也可以进行ARM学习--arm模拟器的使用

共5条 1/1 1 跳转至

没有ARM开发板也可以进行ARM学习--arm模拟器的使用

专家
2015-10-29 15:09:33     打赏

    今天偶然看到一个软件---skyeye,可以实现在没有ARM开发板的情况下进行arm-linux的学习开发。

    首先你需要有linux宿主机,通常会用虚拟机的形式进行。

    其次下载skyeye相关的源文件,并进行安装配置。之后就是arm模拟器的使用了:

1.

首先在/opt/skyeye/testsuite下建立myhello目录:

mkdir /opt/skyeye/testsuite/myhello

2.

cd /opt/skyeye/testsuite/myhello

vi myhello.c

输入:

1.#define INTERVAL 100000 
2.void myhello(void) 
3.{    
4.  long * addr = (long *)0x50000020; 
5.  int timeout = 0; 
6. 
7.  while(1) 
8.  { 
9.    timeout = 0; 
10.    while(++timeout <= INTERVAL); 
11. 
12.    *addr = “hello EEPW”; 
13.  } 
14.}
地址0x50000020就是UART的通道0(UTXH0)的发送缓冲,把数据写入这个地址就会自动发送出去,当然在模拟器中,发送的目标地址就是我们的屏幕啦。

3.

myhello.c写好了之后,我们还要准备一段s3c2410的启动代码,这段代码在s3c2410一上电之后就开始执行,在这段启动代码中,回跳转到我们写的myhello.c函数:

vi start.S

输入:

1..text 
2.    .align 4 
3.    .global _start 
4. 
5._start: 
6.    ldr sp, =1024*4 
7.    bl  myhello 
8. 
9.halt: 
10.    b halt
上面这段很简单,就是声明了一个_start标记,这个标记在下面会用到,作为程序的入口地址。汇编和C链接的唯一必须的一步就是设置堆栈,这里我们把sp指向4k顶部,然后跳转到我们的c函数myhello

4.

现在我们要写一个连接脚本,连接顺序就是先start.S后myhello.c:

vi myhello.lds

输入:

1.OUTPUT_ARCH(arm) 
2.ENTRY(_start) 
3.SECTIONS 
4.{ 
5.  . = 0x00000000; 
6.  .text :  
7.  { 
8.    start.o 
9.    myhello.o 
10.    *(.rodata) 
11.  } 
12. 
13.  . = ALIGN(8192); 
14. 
15.  .data : {*(.data)} 
16. 
17.  .bss : {*(.bss)} 
18.}
表示输出arm格式,第二句表示入口点是_start标记,就是第三步的那个_start标记,然后在0x00000000处先插入start.o,然后插入myhello.o

5.

然后我们要写Makefile:

vi Makefile

输入:

1.CC=arm-linux-gcc 
2.LD=arm-linux-ld 
3.CFLAGS= -c -g -march=armv6 -mtune=arm920t  
4.LDFLAGS= -N -p -X -Thello.lds 
5. 
6.myhello: start.o myhello.o 
7.    $(LD) $(LDFLAGS)  start.o myhello.o -o myhello 
8.    arm-linux-objdump -xS myhello > myhello.s 
9.    arm-linux-readelf -a myhello > myhello.r 
10.    arm-linux-nm myhello > myhello.n 
11.      
12.start.o: start.S 
13.    $(CC) $(CFLAGS) start.S   
14.     
15.myhello.o: myhello.c 
16.    $(CC) $(CFLAGS) myhello.c 
17. 
18.clean: 
19.    rm -rf *.o myhello *.r *.n *.s
arm-linux-objdump -xS myhello > myhello.s

arm-linux-readelf -a myhello > myhello.r

arm-linux-nm myhello > myhello.n

6.

最后我们还需要一个skyeye配置文件:

vi skyeye.conf

输入:

1.#skyeye config file 
2.arch:arm 
3.cpu: arm920t 
4.mach: s3c2410x 
5. 
6.# boot  
7.mem_bank: map=M, type=RW, addr=0x00000000, size=0x04000000, boot=yes 
8. 
9.# physical memory  
10.mem_bank: map=M, type=RW, addr=0x30000000, size=0x02000000 
11. 
12.# all peripherals I/O mapping area  
13.mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000 
14. 
15.uart:mod=term 
16.#log: logon=0, logfile=./sk1.log, start=0, end=200000
7,

编译:

cd /opt/skyeye/testsuite/myhello

make

8.

好了,所有的文件已经准备好了,下面我们来测试:

cd /opt/skyeye/testsuite/myhello

skyeye -e myhello

在skyeye命令模式下输入:

start

run

我们会发现连续输出了字符hello EEPW




关键词: arm     模拟器    

高工
2015-11-06 17:28:10     打赏
2楼
狂拽酷炫吊炸天,,,这模拟器这么厉害。得膜拜

专家
2015-11-07 10:30:05     打赏
3楼
看成skype了

助工
2015-11-07 16:01:42     打赏
4楼
高大上 啊

院士
2015-11-08 12:36:29     打赏
5楼
买一个的成本也没有多少吧

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]