skyeye使用(一) myhello

 

主要参考:http://blog.csdn.net/htttw/article/details/7231851

 

但是完全按照以上博文的操作,最后并不能成功的运行。

 

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 = 'a';
  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

不熟悉.lds文件的请注意:.和=之间有空格,=和0x00000000之间有空格;.text和:之间有空格。其余类同。如果没有这些空格,会make不通过。

 

 

5.

然后我们要写Makefile:

vi Makefile

输入:

   1. CC=arm-linux-gcc
   2. LD=arm-linux-ld
   3. CFLAGS= -c -g -march=armv4 -mtune=arm7tdmi   
   4. LDFLAGS= -N -p -X -Tmyhello.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

 

如果是-march=armv6 -mtune=arm920t,make时会出现

cc1:bad value (armv6) for -march= switch

cc1:bad value (arm920t) for -mtune= switch

的错误,将其改为红色部分那样后,就不会有问题了。

 

 

如果是-march=armv6 -mtune=arm920t

 

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

 

红色部分就不要对应的改成arm7tdmi和at91了,否则在run后,不能输出字符'a'

 

 

7,

编译:

cd /opt/skyeye/testsuite/myhello

make

 

 

8.

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

cd /opt/skyeye/testsuite/myhello

skyeye -e myhello

在skyeye命令模式下输入:

start

run

我们会发现连续输出了字符“a”


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于那些想进行嵌入式系统软件开发和学习,或者想研究嵌入式Linux等操作系统和一些底层系统软件(如TCP/IP等)的研究和开发人员来说,可能存在如下几方面的问题:(1)经常苦于经费不足,缺少足够的硬件开发板和完善的软件开发环境,相关的书籍对一些最新软件的分析还不够全面,无法深入研究和开发嵌入式软件。(2)高层次的软件设计和开发一般不用太考虑底层硬件的实现细节,如果直接处于一个具体的硬件环境下,在开发和研究中可能会陷入硬件的具体细节中不能自拔,而不能把精力放到高层次的软件设计和开发上。(3)如果硬件开发环境不太稳定(这种情况经常见到),且对具体的硬件不是很了解,则可能在排除问题上花费大量的不必要的时间。(4)如果你想自己尝试设计一个操作系统,则先在一个提供源码级调试的软件仿真器上进行开发,可能会大大提高你的开发进度。<br><br>对于想了解、学习一般操作系统的实现原理,Linux/μCLinux操作系统或TCP/IP等系统级软件的实现的人员,目前一般采用的方法是看书和读源代码,这是一种静态的学习方法,效率较低,比较枯燥,缺少亲自实践的感觉。要想深入分析和开发软件,就要动手编程,不能只是看看书,读读代码,只有通过亲手实践才能够掌握软件设计的核心内容。上面所指出的问题和需求促使SkyEye项目的诞生。 <br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>纯软件的模拟器有许多种,如模拟一个芯片时序逻辑的模拟器、只模拟CPU指令的模拟器、模拟整个硬件开发板的模拟器、模拟一个PDA的模拟器等。存在一些纯软件的仿真器或模拟器,如Stanford大学的SimOS模拟器,它仿真的是MIPS系列CPU和相关外设,可以在其上运行SGI公司的Irix操作系统和软件,目前基本上停止了进一步的开发;PSIM是一个仿真PowerPC指令集的模拟器,目前只支持简单的命令行应用程序;xcopilot是一个PDA模拟器,它是由Greg Hewgill出于个人喜好编写的,它仿真的是M68K CPU,通过它可以给基于PalmOS的软件开发者提供一个模拟开发环境。Bochs是一个仿真x86 CPU的开源项目,目前还支持AMD64 CPU,在它上面可以运行Linux操作系统。其它一些商业的仿真软件如vmware和virtualPC可以仿真一个真实的x86计算机,而Virtutech Simics仿真器可以仿真多种CPU和硬件,功能强大,可用于硬件和系统软件的评测。<br><br>SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。由于SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上不保证与硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。这样带来的好处是SkyEye的执行效率更高。SkyEye的推出具有下面三方面的意义:<br><br>通过SkyEye仿真集成环境可以很方便地进入到嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段,因为SkyEye的整个软件系统都是Open Source的,且基于GPL协议(μCOS-II除外)。因此,如果要学习Linux操作系统或者进行嵌入式系统开发,但苦于没有硬件支持,SkyEye仿真环境软件是一个很好的选择! <br>如果想研究与具体硬件无关的系统软件(如TCP/IP协议栈等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值