转载:http://blog.csdn.net/htttw/article/details/7226754

对于希望学习ARM汇编的同学而言, 购买ARM开发板进行板上实测无疑是一个有效的方法,不过购买ARM开发板需要一笔费用,而且每次测试都需要连接开发板,比较麻烦。这里介绍一个ARM模拟器——SkyEye,通过SkyEye我们可以直接在一台PC上完成ARM汇编程序的开发和调试了,摆脱了ARM开发板的限制,真是不错!

下面介绍如何使用:

1.
http://sourceforge.net/projects/skyeye下载SkyEye的最新版,我的是skyeye-1.3.4_rc1.tar.gz,同时为了后面的实验,我们还要下载testsuite,这是skyeye的测试文件,我的版本是skyeye-testsuite-1.3.4,里面有ArmLinux

2.
tar zxvf skyeye-1.3.4_rc1.tar.gz
cd skyeye

根据INSTALL文件里说的:
./configure
make lib
make
sudo make install

sudo make install_lib

 

注意,在make时可能会缺各种文件,apt-get install就可以了,我所遇到的两个问题是:

python-dev和llvm没有安装,很简单:

sudo apt-get install python-dev

sudo apt-get install llvm

(这是llvm的官方下载网址:http://llvm.org/releases/download.html)

就可以了

 

这样SkyEye就算安装好了

3.
默认SkyEye是安装在/opt/下的,因此为了方便,我们在环境变量里把它的路径加入:
vi ~/.bashrc
输入:
#SkyEye 1.3.4
export PATH=/opt/skyeye/bin:$PATH

之后注销再登录或直接source .bashrc就可以使环境变量生效了

4.
SkyEye安装好后会在/opt/skyeye/testsuite下有一个arm_hello的测试程序,按如下方式运行:
cd /opt/skyeye/testsuite/arm_hello
skyeye -e arm_hello

#注意:skyeye要运行一个程序时必须要在这个程序的目录里,因为skyeye要读取这个程序的skyeye.conf配置文件,所以第一步我们要切换到/opt/skyeye/testsuite/arm_hello目录下
这时我们会进入skyeye命令模式,输入start让arm_hello程序开始运行,会弹出一个connecting to Ubuntu:xxx的字样的窗口

5.
skyeye命令行输入:run开始运行,这时窗口会不停的输出“helloworld”,说明arm_hello已经成功运行了!

6.
skyeye命令行输入:stop停止运行;输入:quit退出skyeye;输入:help查看帮助

下面介绍如何在SkyEye上启动Linux,就和在真实的ARM开发板上一样:
1.
解压testsuite测试文件:
tar zxvf skyeye-testsuite-1.3.4_rc1.tar.gz

其中的linux目录就是我们要移植到板子上的amrlinux,依次进入:s3c2410-->s3c2410x-2.6.36,有三个文件,vmlinux是Linux内核镜像,skyeye.conf是配置文件,initrd.img是临时根文件系统。我们在/opt/skyeye/testsuite下新建一个目录,然后copy过来:

sudo mkdir /opt/skyeye/testsuite/armlinux

cd linux/s3c2410/s3c2410x-2.6.36

sudo copy * /opt/skyeye/testsuite/armlinux

2.

cd /opt/skyeye/testsuite/armlinux

skyeye -e vmlinux

进入skyeye命令模式;

输入start打开串口窗口:

我在执行这一步时出错:failed to setup_module (name:net, type:cs8900a),我把skyeye.conf里的net那一行注释掉了,就行了

如果窗口没有打开,则修改:uart:mod=stdio为uart:mod=term,然后再试试

3.

skyeye命令行:run启动Linux,

屏幕随即会输出串口信息,不过速度很慢!

附几张图:


SkyEye的使用(一)中我们简单介绍了如何使用SkyEye,并且成功运行了既有的arm_hello程序,不过这个是针对arm7的,现在我们要用SkyEye模拟s3c2410(arm920T)。

1.

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

mkdir /opt/skyeye/testsuite/myhello

2.

cd /opt/skyeye/testsuite/myhello

vi myhello.c

输入:

  1. <span style="font-size:18px;">#define INTERVAL 100000
  2. void myhello(void)
  3. {
  4. long * addr = (long *)0x50000020;
  5. int timeout = 0;
  6. while(1)
  7. {
  8. timeout = 0;
  9. while(++timeout <= INTERVAL);
  10. *addr = 'a';
  11. }
  12. }</span>

地址0x50000020就是UART的通道0(UTXH0)的发送缓冲,把数据写入这个地址就会自动发送出去,当然在模拟器中,发送的目标地址就是我们的屏幕啦。

3.

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

vi start.S

输入:

  1. <span style="font-size:18px;">.text
  2. .align 4
  3. .global _start
  4. _start:
  5. ldr sp, =1024*4
  6. bl  myhello
  7. halt:
  8. b halt</span>

上面这段很简单,就是声明了一个_start标记,这个标记在下面会用到,作为程序的入口地址。汇编和C链接的唯一必须的一步就是设置堆栈,这里我们把sp指向4k顶部,然后跳转到我们的c函数myhello

4.

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

vi myhello.lds

输入:

  1. <span style="font-size:18px;">OUTPUT_ARCH(arm)
  2. ENTRY(_start)
  3. SECTIONS
  4. {
  5. . = 0x00000000;
  6. .text :
  7. {
  8. start.o
  9. myhello.o
  10. *(.rodata)
  11. }
  12. . = ALIGN(8192);
  13. .data : {*(.data)}
  14. .bss : {*(.bss)}
  15. }</span>

表示输出arm格式,第二句表示入口点是_start标记,就是第三步的那个_start标记,然后在0x00000000处先插入start.o,然后插入myhello.o

5.

然后我们要写Makefile:

vi Makefile

输入:

  1. <span style="font-size:18px;">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. myhello: start.o myhello.o
  6. $(LD) $(LDFLAGS)  start.o myhello.o -o myhello
  7. arm-linux-objdump -xS myhello > myhello.s
  8. arm-linux-readelf -a myhello > myhello.r
  9. arm-linux-nm myhello > myhello.n
  10. start.o: start.S
  11. $(CC) $(CFLAGS) start.S
  12. myhello.o: myhello.c
  13. $(CC) $(CFLAGS) myhello.c
  14. clean:
  15. rm -rf *.o myhello *.r *.n *.s</span>

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. <span style="font-size:18px;">#skyeye config file
  2. arch:arm
  3. cpu: arm920t
  4. mach: s3c2410x
  5. # boot
  6. mem_bank: map=M, type=RW, addr=0x00000000, size=0x04000000, boot=yes
  7. # physical memory
  8. mem_bank: map=M, type=RW, addr=0x30000000, size=0x02000000
  9. # all peripherals I/O mapping area
  10. mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
  11. uart:mod=term
  12. #log: logon=0, logfile=./sk1.log, start=0, end=200000</span>

7,

编译:

cd /opt/skyeye/testsuite/myhello

make

8.

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

cd /opt/skyeye/testsuite/myhello

skyeye -e myhello

在skyeye命令模式下输入:

start

run

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


对于希望学习ARM汇编的同学而言, 购买ARM开发板进行板上实测无疑是一个有效的方法,不过购买ARM开发板需要一笔费用,而且每次测试都需要连接开发板,比较麻烦。如果有一个ARM的模拟器就好了,抱着这样的想法在网上找了一下,发现了Skyeye,还是我们中国人开发的。通过Skyeye,可以直接在一台PC上完成ARM汇编的开发调试工作了,摆脱了ARM开发板的限制,真是不错!

不过,开始介绍Skyeye安装之前还是给各位同学一个建议,如果经费不是特别紧张,还是建议买一个开发板的。在开发板上运行一段程序给你带来的成功感会远远大于你模拟器给你带来的成功感。通过开发板可以激励你继续学习ARM汇编,而通过模拟器可以为你节省一些时间。

Skyeye是一个开源项目,可以在网上下载然后编译,建议使用Linux环境进行编译安装,我使用的还是Ubuntu10.0.4,具体安装过程如下:

1. 下载Skyeye源码包

Skyeye最新发布的是1.3.3版本,下载地址如下:

http://sourceforge.net/projects/skyeye/files/skyeye/skyeye-1.3.3_rc1/

下载后是一个gz文件,名为skyeye-1.3.3_rel.tar.gz,总共才16M左右,很快可以下载完

2. 上传Skyeye包到Ubuntu 上并解压

使用你觉得最方便的方法将下载的skyeye-1.3.3_rel.tar.gz文件上传到Ubuntu上,并通过tar命令解压

tar xzvf skyeye-1.3.3_rel.tar.gz

解压后出现一个skyeye目录,就是Skyeye的源码包了。

3. 编译安装Skyeye

进入skyeye目录,依次执行如下命令:

./configure
make lib

make install_lib  (注释:此前漏掉了这句,漏掉这句后面会出错的,特此修正2012/03/10。)
make

make install

在执行make命令的时候有可能出现缺少某些文件的错误,根据错误的信息更新一下Ubuntu就好了。

比如,我执行make的时候报

Fatal error: X11/xpm.h: No such file or directory

Compilation terminated

是说xpm.h文件找不到,通过一下命令更新Ubuntu后再次执行make就没有问题了。

sudo apt-get install libxpm-dev

4. 测试Skyeye

安装了Skyeye后执行文件出现在/opt/skyeye/bin目录中,注意1.3.3的Skyeye可执行命令不是skyeye,而是skyeye_main.py,执行后进入Skyeye命令行状态表示安装成功。

5. 运行测试代码

为了快速开始代码测试工作,可以从Skyeye自带的arm_hello 入手。

进入/opt/skyeye/testsuite/arm_hello目录,执行:

/opt/skyeye/bin/skyeye_main.py -e arm_hello

会进入Skyeye命令行状态,执行以下命令

start

会弹出一个窗口,里面显示“Connecting to Ubuntu:xxxx”。

然后继续在Skyeye命令行界面执行以下命令:

run

可以发现弹出的窗口中开始出现“helloworld”字样。

6. 阅读修改arm_hello

测试成功后可以阅读一下arm_hello的代码,而且可以以arm_hello作为起点开发测试自己的代码。

当然前提是你的toolchain已经设置好。

需要关注的有三个文件Makefile , start.S hello.c

Makefile中需要修改编译工具和链接工具  ,让make命令可以正常执行

start.S是一段ARM汇编,不断调用hello.c中的hello方法

hello.c是打印函数的实现,将“helloworld”字符串输出到指定地址中。

开始吧,测试你自己的ARM汇编代码!!

SkyEye的使用的更多相关文章

  1. 《一步一步写嵌入式操作系统》读书笔记1—Skyeye介绍、安装和HelloWorld

    2013-11-14 最近在看<一步一步写嵌入式操作系统>,感觉此书甚好,许多地方讲得很清楚.可操作性强,计划边读边实践边写笔记,希望能够逐步熟悉嵌入式操作系统底层的东西,最终剪裁出一套实 ...

  2. Ubuntu下安装Skyeye

    ubuntu12下安装skyeye1.3.2 1.首先安装skyeye的依赖包,比如gtk的依赖,一般Ubuntu 都默认安装了,稳妥起见,运行下面的代码: sudo apt-get install ...

  3. VMware+Ubuntu8.10+Skyeye+gdb实现u-boot源码调试

    系统平台:WindowsXP 虚拟机: VMware Workstation 6.5.0 Ubuntu8.10 安装程序 ubuntu-8.10-desktop-i386.iso 下载地址:http: ...

  4. skyeye安装+arm-elf-gdb安装+模拟s3c44b0x+执行ucos4skyeye

    [假设你要引用.请阅读所有,这里是我的为期两天的过程只是一个记录] skyeye安装:ubuntu12.0432 llvm2.8 skyeye1.3.3 http://blog.chinaunix.n ...

  5. 随想录(skyeye中的soc仿真)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 想学好soc,再怎么看芯片手册和linux kernel都不为过.但是要学习好kernel,那再 ...

  6. Ubuntu 16.04上编译SkyEye的测试程序

    一.首先确保Ubuntu系统上已经安装了Skyeye.skyeye-testsuite和arm-linux-gcc交叉编译工具链,如果没有安装请参考: 1.Skyeye的安装:http://www.c ...

  7. Ubuntu 16.04上安装SkyEye及测试

    说明一下,在Ubuntu 16.04上安装SkyEye方法不是原创,是来自互联网,仅供学习参考. 一.检查支持软件包 gcc,make,vim(optional),ssh,subversionbinu ...

  8. 我的RTOS 之二 --Threadx在skyeye上仿真測试(基于2410)

    对于RTOS 移植来说,移植平台至少要提供双方面的设备. 1.OS执行时,须要tick,所以须要提供Timer定时器 2.OS执行时,须要调度,就是挂起当前线程,把控制权交给系统,所以须要訪问系统各个 ...

  9. 【转】arm 开发工具比较(ADS vs RealviewMDK vs RVDS)

      ADS REALVIEW MDK RVDS 公司 ARM Keil(后被ARM收购) ARM 版本 最新1.2 ,被RVDS取代 最新4.0 是否免费 破解情况 有 有 工程管理 CodeWarr ...

随机推荐

  1. [原创]从Confluence获取html table并将其序列化为C#类文件的工具

    公司项目的游戏数据模型文档写在Confluence上,由于在项目初期模型变动比较频繁,手工去将文档中最新的模型结构同步到代码中比较费时费力,而且还很容易出错,于是写了一个小工具来自动化这个同步更新模型 ...

  2. 关于在Eclipse里面启动了服务,但是localhost:8080无法访问的问题:

    今天eclipse重新换了一个然后写项目,结果发生了一些bug,当在Tomca服务开启之后,浏览器端输入localhost:8080无法访问,以为是服务器没有搞定,检查了没问题,百度了一下有很多乱七八 ...

  3. 结合Vim ghostscript 将源代码文件转换成语法高亮的pdf格式文档

    step 1: 安装ghostscript (debian 环境, 其他环境自行google) sudo apt-get install ghostscript step 2:  用Vim生成ps文件 ...

  4. poj2396 Budget(有源汇上下界可行流)

    [题目链接] http://poj.org/problem?id=2396 [题意] 知道一个矩阵的行列和,且知道一些格子的限制条件,问一个可行的方案. [思路] 设行为X点,列为Y点,构图:连边(s ...

  5. mybatis系列-08-动态sql

    8.1     什么是动态sql mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 8.2     需求 用户信息综合查询列表和用户信息查询列表总数这两个 ...

  6. J2EE到底是什么

    目前所有的B/S系统应用可以分为:有状态(statefull)和无状态(stateless)两大类别. 有状态是指在整个系统的处理过程中要保留记住一些信息,而无状态则相反,每次request都是独立的 ...

  7. mysqldump造成Buffer Pool污染的研究

    前言: 最近Oracle MySQL在其官方Blog上贴出了 5.6中一些变量默认值的修改.其中innodb_old_blocks_time 的默认值从0替换成了1000(即1s) 关于该参数的作用摘 ...

  8. hello, angular

    开始系统学习一下angular!首先是hello world.根据官网给出的例子,我们一下做出下面这个东西: <!DOCTYPE html> <html ng-app> < ...

  9. ibatis 搭建总结

    一.搭建ibatis环境 1.导入ibatis的jar包,已及数据库驱动jar包ibatis-2.3.0.677.jar ibatis-dao-2.jar ibatis-sqlmap-2.jar ib ...

  10. ubuntu为IDE(Eclipse WebStorm)添加桌面快捷方式

    在ubuntu15.10环境配置webstorm和eclipse的时候会下载官网上编译好的包, bin目录下面会有一个.sh文件(linux版本), 那么一般情况下,执行 ./sh就会启动IDE, 但 ...