ARM模拟器-skyeye(天目)的安装和使用!

2019-09-21来源: eefocus关键字:ARM模拟器  skyeye  安装和使用

SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。


以下操作均在Fedora Core 1.0里通过。



文档摘要:

1、什么是SkyEye?

2、SkyEye可以做什么事情?

3、安装SkyEye

4、安装arm-elf交叉编译器

5、测试你的arm-elf-gcc编译器

6、执行你的hello程序

7、一个应用程序的开发实例

8、编译并运行uClinux-dist-20030909.tar.gz

9、加入网络功能

10、安装完成SkyEye后,下一步将做什么?


1、什么是SkyEye?

SkyEye是开源软件的一个项目,SkyEye的目标是在Linux和Windows操作系统里提供一个完全的仿真环境。SkyEye仿真环境相当于一个嵌入式计算机系统,你可以在SkyEye里运行一些嵌入式Linux操作系统,如ARMLinux,uClinux,uc/OS-II(ucos-ii)等,并能分析和调试它们的源代码。


通过SkyEye能仿真下面的硬件:

(1)CPU核心:ARM7TDMI, ARM720T, ARM9, StrongARM, XScale


(2)CPU: Atmel AT91/X40, Cirrus CIRRUS LOGIC EP7312, Intel SA1100/SA1110, Intel XScale PXA 250/255, CS89712,                           samsung 4510B,samsung 44B0(还不全)

(3)内存: RAM, ROM, Flash

(4)周边设备: Timer, UART, ne2k网络芯片, LCD, 触摸屏等


目前能在SkyEye上运行下面的操作系统和系统软件:

(1)uC/OSII-2.5.x(支持网络)

(2)uClinux(基于Linux2.4.x内核, 支持网络)

(3)ARM Linux 2.4.x/2.6.x

(4)lwIP on uC/OSII

(5)基于uC/OSII, uClinux, ARM Linux的应用程序



2.SkyEye可以做什么事情?


(1)通过SkyEye可以帮助促进嵌入式系统的学习,在不需要额外硬件的情况下学习和分析uclinux操作系统和其它嵌入式操作系统,如ucosII等。

(2) SkyEye可用于嵌入式系统的教学。

(3)希望通过skyeye促进操作系统的研究,如ucosII,uclinux+RTAI,uclinux2.5.x等。

(4)可以基于SkyEye进行仿真特定硬件模块的研究。

(5)SkyEye可以作为嵌入式集成开发环境开发嵌入式系统(当然需要对SkyEye做大量的工作)。

注:引自陈渝《SkyEye Project FAQ》



3、安装SkyEye

(1)到http://gro.clinux.org/projects/skyeye/下载skyeye-0.7.0.tar.bz2包并减压:


tar jxvf skyeye-v0.7.0.tar.bz2

(2)进入解压后的skyeye目录,如果SkyEye的版本低于0.6.0,则运行下面的命令:


./configure --target=arm-elf --prefix=/usr/local --without-gtk-prefix --without-gtk-exec-prefix --disable-gtktest

如果SkyEye的版本高于0.6.0,则运行下面的命令:


./configure --target=arm-elf --prefix=/usr/local

(3)接下来执行:


make

make install

安装完成后执行skyeye


注意:

a.如果你使用的是Mandrake Linux发行版,那么你在编译SkyEye时遇到错误,并且错误与readline, ncurse, termcap等有关,你可以试试下面的方法:


ln -s /usr/include/ncurses/termcap.h /usr/local/include/termcap.h

接着再make和make install看能否成功!

b.如果你的Linux发行版是Debian Linux,那么不要使用gcc 2.95或是gcc 3.0,请使用gcc 3.2+

c.gcc的版本要在2.96或以上

d.如果SkyEye的版本大于0.6.0,那么使用LCD仿真需要在Linux系统里安装GTK软件。



4、安装arm-elf交叉编译器

(1)下载arm-elf-tools-20030314.sh


ftp://166.111.68.183/pub/embed/uclinux/soft/tools/arm

或到

ftp://166.111.8.229/OS/Embeded

(2)执行:


chmod a+x arm-elf-tools-20030314.sh


(3)然后:


./arm-elf-tools-20030314.sh

 

ls /usr/local/bin/

你应能看到以arm-elf开头的可执行文件,其中arm-elf-gcc就是用来编译你目标平台的编译器的,当然还有一些小工具,后面将一一讲来。



5、测试你的arm-elf-gcc编译器

先写一个小程序hello.c

PHP 代码:


#include

 

int main(void)

{

    int i;

 

    for(i = 0; i < 6; i++){

 

        printf("i = %d  ",i);

 

        printf("Hello, embedded linux!"n");

    }

    return 0;


然后执行:


arm-elf-gcc -Wl,-elf2flt -o hello hello.c

-elf2flt参数是将elf文件格式转为flat文件格式,这个工具是在你安装交叉编译器产生的。


或者你可以写个Makefile文件,执行:


make

这里是我的Makefile文件,仅供参考:

PHP 代码:


# begin

 

CC = arm-elf-gcc

 

CFLAGS = -D__PIC__ -fpic -msingle-pic-base -O2 -pipe -Wall -g

LDFLAGS = -Wl,-elf2flt

 

LIBS =

OBJS = hello.o

 

all:    hello

 

hello:  $(OBJS)

        $(CC) $(CFLAGS) $(LDFLAGS) -o hello $(OBJS) $(LIBS)

 

clean:

        rm -rf *.o *.elf *.gdb hello

 

# end 


如果编译通过,就会产生hello可执行文件。用下面的命令:


file hello

你会发现,它是BFLT(binary FLAT),你目标平台所支持的文件格式。



6、执行你的hello程序

这里,我们将借助genromfs这个小工具来完成测试,这个工具就是你在安装交叉编译器时产生的,你可以直接使用它。


到http://gro.clinux.org/projects/skyey...-1.0.4.tar.bz2包:


tar jxvf skyeye-binary-testutils-1.0.4.tar.bz2


cd testsuits/at91/uclinux2(当然你还可以用别的)


mkdir romfs(建一个目录,后面用)


mount -o loop boot.rom /mnt/xxx


cp -r /mnt/xxx/* romfs


另外,把你编译好的可执行程序拷贝到/romfs/bin目录里,这里就是hello了!


genromfs -f boot.rom -d romfs/


注:可以用genromfs -h来获得帮助!


OK!执行下面的命令:


skyeye linux

 

(skyeye)target sim

 

(skyeye)load

 

(skyeye)run

 

kernel start.....

很熟悉了吧.


cd /bin

 

hello

可以看到结果了吗?其实到了这一步,你就可以开发自己的程序了!



7、一个应用程序的开发实例

下面介绍的程序主要是完成一个网络应用,网络应用的标准模型是客户机-服务器模型,它的主要执行过程如下:

(1)系统启动服务器执行。服务器完成一些初始化操作,然后进入睡眠状态,等待客户机请求;

(2)在网络的某台机器上,用户执行客户机程序;

(3)客户机进程与服务器进程建立一条连接;

(4)连接建立之后,客户机通过网络向服务器发出请求,请求某种服务;

(5)服务器接收到客户机请求后,根据客户机请求的内容进行相应的处理,然后将处理结果返回;

(6)服务器断开与客户机的连接,继续睡眠,等待其他客户机的请求;


Linux系统中的很多服务器是在系统初启时启动的,如时间服务器、打印服务器、文件传输服务器和电子邮件服务器等。大多数时间这些服务器进程处于睡眠状态,等待客户机的请求。


下面这两个客户机-服务器程序比较简单,主要是对网络客户机-服务器模型的实际运行有大致印象。这个客户机-服务器的操作过程非常简单:客户机与服务器建立连接之后,服务器向客户机返回一条消息。服务器程序的源代码如下:

PHP 代码:


/* tcpserver.c */

#include

#include

#include

#include

#include

#include

#include

#include

 

#define WAITBUF 10

 

int main(int argc, char *argv[])

{

    int sockfd, new_fd;

    struct sockaddr_in server_addr;

    struct sockaddr_in client_addr;

    unsigned int sin_size, portnumber;

    char hello[]="Hello! Socket communication world!"n";

    if(argc != 2)

    {

        fprintf(stderr, "Usage:%s portnumber"a"n", argv[0]);

        exit(1);

    }

    if((portnumber = atoi(argv[1])) < 0)

    {

        fprintf(stderr, "Usage: %s portnumber error"a"n", argv[0]);

    }

    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

    {

        fprintf(stderr, "Socket error:%s"n"a", strerror(errno));

        exit(1);

    }

    bzero(&server_addr, sizeof(struct sockaddr_in));

    server_addr.sin_family = AF_INET;

    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    server_addr.sin_port = portnumber;

    if(bind(sockfd,(struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)

    {

        fprintf(stderr, "Bind error:%s"n"a", strerror(errno));

        exit(1);

    }

    if(listen(sockfd, WAITBUF) == -1)

    {

        fprintf(stderr, "Listen error:%s"n"a", strerror(errno));

        exit(1);

    }

    while(1)

    {

        sin_size = sizeof(struct sockaddr_in);

        if((new_fd = accept(sockfd, (struct sockaddr *)(&client_addr), &sin_size)) == -1)

        {

            fprintf( stderr, "Accept error:%s"n"a", strerror(errno));

            exit(1);

        }

        fprintf(stderr, "Server get connection from %s"n", inet_ntoa(client_addr.sin_addr));

        if(send(new_fd, hello, strlen(hello), 0) == -1)

        {

            fprintf(stderr, "Write Error:%s"n", strerror(errno));

            exit(1);

        }

        close(new_fd);

    }

    close(sockfd);

    exit(0);


给服务器程序写一个Makefile文件,如下:

PHP 代码:


# start

 

CC = arm-elf-gcc

 

CFLAGS = -D__PIC__ -f

[1] [2]
关键字:ARM模拟器  skyeye  安装和使用 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic475280.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ARM汇编:汇编中proc、endp、ret、near、far指令用法
下一篇:嵌入式ARM启动代码的工作

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

skyeye上的s3c2410 lcd移植
今天终于把s3c2410的lcd在skyeye上搞出来了。看到网上还有朋友在发贴询问,所以在这里与大家分亨一下。    首先,我的skyeye是1.2.3版的,linux内核版本是2.6.16.21-0.8 ,suse 10.0自带的。u-boot-1.1.6为引导程序。u-boot在skyeye上的移植网上有,我也是在网上学来的,如果你还不清楚,可以到网上google一下。具体的地址我也不记得了。    下面主要说下我自己在skyeye上移植s3c2410的经历。       先声明一下本人也是初学者,有很多东西都 不是很清
发表于 2016-12-03
skyeye上的s3c2410 lcd移植
构建 arm-linux 仿真运行环境 (skyeye + arm-linux + NFS)
一 前言   本文旨在将 arm-linux 在 skyeye 上搭建起来,并在 arm-linux 上能成功 mount NFS 为目标, 最终我们能在 arm-linux 里运行我们自己的应用程序. 其实在 skyeye 上移 植 arm-linux 并非难事,网上也有不少资料, 只是大都遗漏细节, 以致细微之处卡壳,所以本 文力求详实清析, 希望能对大家有点用处。 二 安装 Skyeye   我们选定 skyeye 的 1.2.4 这个版本, 为了能让它上面运行的 arm-linx 能挂接 NFS,我 们需要修改 device/net/dev_net_cs8900a.c (修改后的文件在附件
发表于 2016-07-20
ARM硬件仿真软件SkyEye使用简介
  SkyEye是一个开源软件(opensource software)项目,中文名字是“天目”。SkyEye的目标是在通用的Linux和Windows平台实现一个仿真集成开发环境,模拟常见的嵌入式计算机系统(目前支持基于arm7tdmi的AT91开发板);可在SkyEye上运行uclinux以及uC/OS-II等多种嵌入式操作系统,并对它们进行源码级的分析和测试。SkyEye的推出具有下面两方面的意义:   首先,通过SkyEye仿真集成环境可以很方便地进入到嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段。因此,如果您想学习Liunx操作系统或者进行
发表于 2010-11-05
个开放源码的嵌入式仿真环境——SkyEye
摘要:综述开放源码的嵌入式仿真环境SkyEye:介绍SkyEye的背景、目标和存在的意义,对目前SkyEye本身进行简要的技术分析;介绍SkyEye上已经移植成功的操作系统和典型应用。讲述SkyEye正在开展的工作和将来的发展计划。 关键词:SkyEye 仿真 μClinuxμ/OS-II Linux 嵌入式系统 1 SkyEye的目标与意义 1.1 SkyEye产生的背景 操作系统是软件产业的基础和龙头,能左右软件产业发展的方向,是世界软件产业最大的利润来源。对于后PC时代和普适计算(pervasive computing)而言,嵌入式系统无处不在,其中关键的软件核心技术包括嵌入式操作系统
发表于 2007-03-09
螺旋CT机的八条合理安装和使用介绍建议
要想合理的使用好螺旋CT,就必须从机器的安装开始到正常投入使用,采取一些必要的合理化措施,既要让机器工作在一个好的环境当中,又要让操作者了解机器的一些原理,以便在日后的工作中操作者能正确的使用机器,这样才能让机器发挥最大的作用,同时又能把机器的运行成本降到最低。近几年来螺旋CT在各级医院迅速的投入使用,有效的提高了医院的影像诊断水平和质量,为临床医疗工作打下了良好的基础。但是由于螺旋CT普及的速度太快,目前许多刚拥有螺旋CT机的医院,特别是区县级医院,在怎样合理的使用机器,让机器发挥最大的效能,把机器的损耗降到最底程度,目前还存在许多问题。再加上CT经销商和生产工厂对医院的使用人员培训不到位,造成了许多由于不能合理的使用机器
发表于 2018-02-07
电磁流量计安装和使用的重要性
电磁流量计正确安装对电磁流量计的正常运行极为重要,下面中国传感器交易网将为您介绍电磁流量计传感器和转换器安装和使用时要注意的问题:       (1)安装场所。普通电磁流量汁传感器的外壳防护等级为IP65.       1)测量混合相流体时,应选择不会引起相分离的场所.        2)选择测量导管内不会出现负压的场所.        3)应安装在没有强电场的环境.附近
发表于 2016-12-15
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved