SkyEye的使用

article/2025/9/26 9:41:08

转载: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

输入:

 

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

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

 

 

 

 

3.

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

vi start.S

输入:

 

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

 

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

 

 

 

4.

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

vi myhello.lds

输入:

 

[cpp]  view plain copy
  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.   
  13.   . = ALIGN(8192);  
  14.   
  15.   .data : {*(.data)}  
  16.   
  17.   .bss : {*(.bss)}  
  18. }</span>  

 

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

 

 

5.

然后我们要写Makefile:

vi Makefile

输入:

 

[cpp]  view plain copy
  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.   
  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</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

输入:

 

[cpp]  view plain copy
  1. <span style="font-size:18px;">#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</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汇编代码!!

 


http://chatgpt.dhexx.cn/article/pDLWsWac.shtml

相关文章

SkyEye安装与使用

一&#xff0e; SkyEye配置选项 SkyEye模拟的硬件配置和模拟执行行为由配置文件skyeye.conf中的选项确定。根据选项的功能&#xff0c;skyeye.conf的选项分为硬件配置选项和模拟执行选项。根据参数的个数&#xff0c;skyeye.conf的选项主要由两种组成&#xff1a; 单参数选项…

use skyeye

操作系统 &#xff1a;LINUX ES3 版本 &#xff1a;2.4.21-9ELSKYEYE 版本 : V0.8.0http://gro.clinux.org/projects/skyeye 下载最新的SkyEy软件 1、下载SKYEYE的原代码包skyeye-v0.x.x.tar.bz2 这里就不写怎样配置安装SKYEYE了&#xff0c;因为我编译没成功&…

SkyEye助力飞控软件Debug

​01.Debug是什么&#xff1f; 1947年9月9日&#xff0c;美国著名科学家格蕾丝.霍普&#xff08;Grace Hopper&#xff09;与其同伴在对Mark II计算机进行研究时发现&#xff0c;导致计算机无法正常工作的罪魁祸首居然是一只粘在继电器上的小飞蛾。格蕾丝用镊子将飞蛾夹出&…

手把手教你搭建国产嵌入式模拟器SkyEye开发环境

SkyEye介绍 SkyEye是一个开源软件&#xff08;OpenSource Software&#xff09;项目&#xff0c;中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境&#xff0c;模拟常见的嵌入式计算机系统(这里假定"仿真"和"…

【基于CentOS 7 的NFS服务】

目录 一、概述 二、应用场景 三、安装 四、启动服务 五、目录结构 1.nfs的主配置文件 2.存储配置文件 六、命令解析 1.共享存储管理命令 2.共享目录查看 七、配置 八、客户端访问 1.查看nfs服务器的共享目录 2.挂载 九、实际案例 一、概述 network filesystemt…

Linux——nfs服务配置

启动nfs&#xff0c;一定要先启动rpc Systemctl start rpcbind Systemctl start nfs 停止nfs Systemctl stop nfs 开机自启nfs Systemctl enable rpcbind Systemctl enable nfs 配置网络环境 服务端ens36&#xff0c;配置为192.168.100.254 客户端ens33&#xff0c;配…

安装NFS服务

NFS服务 mhcwz 已于 2022-04-29 19:43:54 修改 68 收藏 1 分类专栏&#xff1a; Linux 文章标签&#xff1a; 运维 linux 服务器 于 2022-03-17 19:33:17 首次发布 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文…

Linux-NFS服务器搭建

一、理论知识 1.NFS概念 NFS是Network File System&#xff08;网络文件系统&#xff09;。 主要功能是通过网络让不同的服务器之间可以共享文件或者 目录。 NFS客户端一般是应用服务器&#xff08;比如web&#xff0c;负载均衡等&#xff09;&#xff0c;可以通…

Linux NFS服务

NFS服务 一、NFS简介 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;它允许网络中的不同计算机相互之间共享资源。NFS客户端可以透明地读写远程NFS服务器上的文件&#xff0c;就像访问本地文件一样。 二、NFS服务概述 NFS是1980年由SUN发展出来在…

NFS服务

文章目录 一&#xff0c;NFS共享存储服务1.NFS网络文件系统2.NAS存储3.端口号4.特点 二&#xff0c;NFS配置实验步骤总结 三&#xff0c;ssh服务1.SSH远程登陆方式登陆方法一登录方法二 四&#xff0c;SSHD 服务支持两种验证方式1.密码验证2.密钥对验证3.公钥和私钥的关系4.构建…

NFS服务器原理、搭建、配置

目录 NFS服务简介 什么是NFS&#xff1f; NFS挂载原理&#xff1a; RPC与NFS通讯原理&#xff1a; NFS客户端和NFS服务器通讯过程&#xff1a; Linux下NFS服务器部署 NFS服务所需软件及主要配置文件&#xff1a; 服务端安装NFS服务步骤&#xff1a; NFS客户端挂载配置…

CentOS——nfs服务

一.在服务器端的操作&#xff08;IP地址&#xff1a;192.168.2.200&#xff09; 1.下载nfs服务 yum -y install rpcbind nfs-utils 2.关闭防火墙 systemctl stop firewalldc setenforce 0 &#xff1b; 3. 编辑配置文件 vim /etc/exports 添加内容为&#xff1a; /data/…

NFS服务的搭建

NFS 目的是让不同计算机不同操作系统之间可以彼此共享文件。 采用服务器/客户端工作模式 在NFS服务器上将目录设置为输出目录&#xff08;共享目录&#xff09;后&#xff0c;客户端就可以将这个目录挂载到自己系统中的某个目录下。 什么是RPC守护进程 使用NFS服务&#xf…

NFS服务配置

1. 服务器端 &#xff08;1&#xff09;查看ip地址为192.168.1.103。 &#xff08;2&#xff09;先查找一下系统是否安装了nfs的软件包&#xff0c;使用rpm-qa来查看。 rpm –qa |grep nfs &#xff08;3&#xff09;编辑/etc/exports文件来设置服务器端的共享目录&#xff0…

NFS服务介绍

1. NFS服务介绍 1.1什么是NFS服务 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件&#xff0c;就像访问…

【ubuntu】nfs服务搭建

一、开篇 在嵌入式linux开发过程中&#xff0c;由于目标平台的资源限制&#xff0c;开发环境一般都不会放到目标板卡上&#xff08;需要放在开发宿主机上&#xff09;&#xff0c;如果需要宿主机与目标板卡之间进行文件传输&#xff0c;该怎么办呢。这时候nfs就派生用场了。nf…

linux上搭建nfs服务

NFS&#xff08;Network File System&#xff09;&#xff1a;它最大的功能就是可以通过网络&#xff0c;让不同的机器、不同的操作系统可以共享彼此的文件。 NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中&#xff0c;而在本地端的系统中来看&…

Linux的nfs服务

目录 一、NFS 1、介绍NFS 2、NFS服务的实现 3、NFS服务的特点 4、NFS服务的作用 二、NFS案例 1、安装RPC依赖和nfs服务&#xff08;rpcbind、nfs-utils&#xff09; 2、修改配置文件&#xff08; /etc/exports &#xff09; 3、开启服务并查看端口 4、挂载查看共享 …

NFS服务详解

文章目录 一.NFS概述二.NFS工作原理2.1NFS工作流程2.2挂载原理 三.NFS服务部署3.1常用命令3.2服务器端配置3.3客户端配置3.4服务测试 四.总结 一.NFS概述 1.概述 NFS是一种基于TCP/IP 传输的网络文件系统协议。通过使用NFS协议&#xff0c;客户机可以像访问本地目录一样访问远…

格兰因果模型可以分析哪些东西_论文实证经验分享|VAR模型实操步骤(上)

VAR模型操作步骤指南 简单来说,VAR模型就是用模型刻画向量间的数量关系。它的适用前提可概括为以下两点:①能进行回归。②向量之间存在一定数量关系(统计意义上的因果关系-格兰杰因果检验)。而满足以上两点的条件则是数据平稳,否则会发生伪回归,且无法进行格兰杰因果检验。…