广告
返回顶部
首页 > 资讯 > 精选 >Fedora SkyEye如何安装交叉编译器
  • 309
分享到

Fedora SkyEye如何安装交叉编译器

2023-06-16 23:06:52 309人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关Fedora SkyEye如何安装交叉编译器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Fedora SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下

这篇文章给大家分享的是有关Fedora SkyEye如何安装交叉编译器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Fedora SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。以下操作均在Fedora Core 1.0里通过。Fedora SkyEye项目资源列表Http://gro.clinux.org/projects/skyeye/

1、什么是Fedora SkyEye?

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

如果你想知道关于Fedora SkyEye和嵌入式系统更详细的信息,请访问下面的站点:
http://www.skyeye.org/
http://www.skyeye.org/index_cn.html

通过Fedora SkyEye能仿真下面的硬件:CPU核心:ARM7TDMI, ARM720T, ARM9, StrongARM, XScaleCPU: Atmel AT91/X40, Cirrus CIRRUS LOGIC EP7312, Intel SA1100/SA1110, Intel XScale PXA 250/255, CS89712, samsung 4510B,

samsung 44B0(还不全)内存: RAM, ROM, Flash周边设备: Timer, UART, ne2k网络芯片, LCD, 触摸屏等目前能在SkyEye上运行下面的操作系统和系统软件:
uC/OSII-2.5.x(支持网络)
uClinux(基于Linux2.4.x内核, 支持网络)
ARM Linux 2.4.x/2.6.x
lwIP on uC/OSII
基于uC/OSII, uClinux, ARM Linux的应用程序

2.Fedora SkyEye可以做什么事情?
1. 通过Fedora SkyEye可以帮助促进嵌入式系统的学习,在不需要额外硬件的情况下学习和分析uclinux操作系统和其它嵌入式操作系统,如ucosII等。
2. SkyEye可用于嵌入式系统的教学。
3. 希望通过skyeye促进操作系统的研究,如ucosII,uclinux+RTai,uclinux2.5.x等。
4. 可以基于SkyEye进行仿真特定硬件模块的研究。
5. SkyEye可以作为嵌入式集成开发环境开发嵌入式系统(当然需要对SkyEye做大量的工作)。
注:引自陈渝《SkyEye Project FAQ》

安装Fedora SkyEye到http://gro.clinux.org/projects/skyeye/下载skyeye-0.7.0.tar.bz2包:tar jxvf skyeye-v0.7.0.tar.bz2进入解压后的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

接下来执行:makemake install安装完成后执行skyeye注意:a.如果你使用的是Mandrake Linux发行版,那么你在编译Fedora 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交叉编译器
下载arm-elf-tools-20030314.shhttp://www.cnblogs.com/leivo/admin/ftp://166.111.68.183/pub/embed/uclinux/soft/tools/arm或http://www.cnblogs.com/leivo/admin/ftp://166.111.8.229/OS/Embeded

执行:chmod a+x arm-elf-tools-20030314.sh然后:./arm-elf-tools-20030314.shls /usr/local/bin/你应能看到以arm-elf开头的可执行文件,其中arm-elf-gcc就是用来编译你目标平台的编译器的,当然还有一些小工具,后面将一一讲来。

5、测试你的arm-elf-gcc编译器先写一个小程序hello.c

PHP 代码:#i nclude 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/xxxcp -r /mnt/xxx
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude

#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__ -fpic -msingle-pic-base -O2 -pipe -Wall -g
LDFLAGS = -Wl,-elf2flt

LIBS =
OBJS = tcpserver.o

all: tcpserver

tcpser: $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o tcpserver $(OBJS) $(LIBS)

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

# end


客户机程序的源代码如下:

PHP 代码:

#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude

#define RECVBUFSIZE 1024

int main(int argc, char *argv[])
{
int sockfd;
char buffer[RECVBUFSIZE];
struct sockaddr_in server_addr;
int portnumber, nbytes;

if(argc != 3)
{
fprintf(stderr, "Usage:%s hostname portnumber\a\n", argv[0]);
exit(1);
}

if((portnumber=atoi(argv[2])) < 0)
{
fprintf(stderr,"Usage:%s hostname portnumber\a\n", argv[0]);
exit(1);
}

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
fprintf(stderr, "Socket Error:%s\a\n", strerror(errno));
exit(1);
}

bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = portnumber;
server_addr.sin_addr.s_addr = inet_addr(argv[1]);

if(connect(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
{
fprintf(stderr, "Connect Error:%s\a\n", strerror(errno));
exit(1);
}

if((nbytes = recv(sockfd, buffer, RECVBUFSIZE, 0)) == -1)
{
fprintf(stderr, "Read Error:%s\n", strerror(errno));
exit(1);
}
buffer[nbytes]='\0';
printf("I have received:%s\n", buffer );
close(sockfd);
exit(0);
}

最后,Fedora SkyEye-binary-testutils-1.1.0.tar.bz2/at91x40/uclinux1包里提取boot.rom,用步聚6中的方法,把tcpserver程序放在boot.rom的bin目录中在目标板上运行tcpserver 2000在主机上运行./tcpclient 10.0.0.2 2000看看结果! 程序的源码的注释因篇幅不在这给出,大家可以参考一些Linux网络编程的书籍。

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

到http://www.cnblogs.com/leivo/admin/ftp://166.111.68.183/pub/embed/uclinux/soft/
或到http://www.cnblogs.com/leivo/admin/ftp://166.111.8.229/OS/Embeded/uclinux/pub/uClinux/dist下载
uClinux-dist-20030909.tar.gz

假设把它下载到/usr/src/目录下,然后依次执行下面的命令:

tar zxvf uClinux-dist-20030909.tar.gz
cd uClinux-dist/

在图形方式下可用命令make xconfig

在命令行方式下用命令make menuconfig

vendor/product中选择GDB/ARMulator
kernel版本选择2.4
然后save and exit

运行下面这两条命:
make dep
make

此时在/usr/src/uClinux-dist/linux-2.4.x目录下会生成可执行文件linux
在/usr/src/uClinux-dist/images/会生成romfs.img等文件

在uClinux-dist目录下建立仿真AT91的skyeye配置文件skyeye.conf,内容如下:
cpu: arm7tdmi
Mach: at91
mem_bank: map="M", type="RW", addr="0x00000000", size="0x00004000"
mem_bank: map="M", type="RW", addr="0x01000000", size="0x00400000"
mem_bank: map="M", type="R", addr="0x01400000", size="0x00400000", file="images"/romfs.img
mem_bank: map="M", type="RW", addr="0x02000000", size="0x00400000"
mem_bank: map="M", type="RW", addr="0x02400000", size="0x00008000"
mem_bank: map="M", type="RW", addr="0x04000000", size="0x00400000"
mem_bank: map="I", type="RW", addr="0xf0000000", size="0x10000000"

这个时候就可以用skyeye来调试运行kernel了,在/usr/src/uClinux-dist执行如下命令:

skyeye linux-2.4.x/linux

(skyeye)target sim

(skyeye)load

(skyeye)run

kernel start.....

注意:
要在Fedora SkyEye.conf所在目录下执行skyeye linux-2.4.x/linux

加入网络功能
a.用root用户进行操作。
b.你要看你的/lib/modules/'uname -r'/kernel/drivers/net/目录里有没有tun.o
如果没有的话你就需要编译你的linux内核来获得tun.o了。
c.(1)运行tun设备模块:

#insmod /lib/modules/'uname -r'/kernel/drivers/net/tun.o

如果你没有该设备,那你就要用下面的命令来创建它:

#mkdir /dev/net
#mknod /dev/net/tun c 10 200

(2)运行vnet(虚拟集线器)设备模块(这一步不是必需的):
获取vnet的源码,然后创建设备:

#mknod /dev/net/vnet c 10 201
#chmod 666 /dev/net/vnet

创建vnet.o
#make vnet.o

插入模块vnet.o
#insmod vnet.o

进入test目录,用test来测度vnet.o
#cd test
#make
#./testvnet1

d.配置Fedora SkyEye.conf文件

cpu: arm7tdmi
mach: at91
mem_bank: map="M", type="RW", addr="0x00000000", size="0x00004000"
mem_bank: map="M", type="RW", addr="0x01000000", size="0x00400000"
mem_bank: map="M", type="R", addr="0x01400000", size="0x00400000", file="images"/romfs.img
mem_bank: map="M", type="RW", addr="0x02000000", size="0x00400000"
mem_bank: map="M", type="RW", addr="0x02400000", size="0x00008000"
mem_bank: map="M", type="RW", addr="0x04000000", size="0x00400000"
mem_bank: map="I", type="RW", addr="0xf0000000", size="0x10000000"
# fORMat: state="on"/off mac="xx":xx:xx:xx:xx:xx ethmod="tuntap"/vnet hostip="dd".dd.dd.dd
net: state="on", mac="0":4:3:2:1:f, ethmod="tun", hostip="10".0.0.1

下面将对上面的一些参数作下说明:
state=on/off意思是仿真的NIC(网络接口板)是有线的还是无线的;
mac=仿真适配器的MAC地址;
ethmod=tuntap/vnet在主机环境里使用的虚拟设备;
hostip=意思是主机环境与keyeye交互用的IP
格式: state="on"/off mac="xx":xx:xx:xx:xx:xx ethmod="tuntap"/vnet hostip="dd".dd.dd.dd

For example:
#set nic info state="on"/off mac="xx":xx:xx:xx:xx:xx ethmod="tuntap"/vnet hostip="dd".dd.dd.dd
net: state="on", mac="0":4:3:2:1:f, ethmod="tun", hostip="10".0.0.1

net: state="on", mac="0":4:3:2:1:f, ethmod="vnet", hostip="10".0.0.1

注意:
如果你想在同一时刻运行两个或更多的skyeye,那么请为每一个skyeye使用不同的skyeye.conf

e.运行Fedora SkyEye linux-2.4.x/linux

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

对于嵌入式操作系统的初学者和入门者和入门的学生而言,他们可以先看一些有关操作系统和嵌入式操作系统方面的教材和书籍,如与uC/OS、Minix、uClinux、Linux相关的书籍等。然后可以在Fedora SkyEye上开发一些简单的应用程序例子(如进程间通信、进程优先级、死情况、网络应用等),对某些操作系统功能(如进程调度、内存管理、网络子系统、文件子系统等)进行简单的修改和扩展,并通过Fedora SkyEye进行运行和调试,看看会发生什么情况。

对于有一定经验的软件工程师而言,在Fedora SkyEye上完成一定的应用系统原型开发是值得一做的事情。比如移植或开发一个文件子系统或网络子系统到一个特定的操作系统中,相信比在一个真实的开发板上开发要容易一些。在Fedora SkyEye上进行一些操作系统的移植和开发(如移植RTLinux、RTAI等其它操作系统到Skyeye上)也是很有挑战性的工作。

对于硬件工程师而言,对Fedora SkyEye进行扩充,设计新的硬件仿真(如USB、IDE硬盘等)使得Skyeye的硬件仿真功能更加强大,支持更多功能的软件,是很有意义的事情。

感谢各位的阅读!关于“Fedora SkyEye如何安装交叉编译器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Fedora SkyEye如何安装交叉编译器

本文链接: https://www.lsjlt.com/news/285931.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Fedora SkyEye如何安装交叉编译器
    这篇文章给大家分享的是有关Fedora SkyEye如何安装交叉编译器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Fedora SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下...
    99+
    2023-06-16
  • ubuntu怎么安装交叉编译器
    在Ubuntu上安装交叉编译器,可以按照以下步骤进行操作: 打开终端,使用以下命令更新包列表: sudo apt update ...
    99+
    2023-10-27
    ubuntu
  • ubuntu交叉编译工具如何安装
    要安装Ubuntu的交叉编译工具,您可以按照以下步骤进行操作:1. 打开终端窗口。2. 更新软件包列表,运行以下命令:sudo ap...
    99+
    2023-09-20
    ubuntu
  • ubuntu怎么安装交叉编译环境
    要在Ubuntu上安装交叉编译环境,您需要执行以下步骤:1. 更新系统软件包列表:```sudo apt update```2. 安...
    99+
    2023-10-11
    ubuntu
  • ubuntu交叉编译工具怎么安装
    要在Ubuntu上安装交叉编译工具,您可以按照以下步骤进行操作:1. 打开终端。2. 更新软件包列表:`sudo apt updat...
    99+
    2023-08-11
    ubuntu
  • 如何查看ubuntu交叉编译器
    要查看Ubuntu交叉编译器,请按照以下步骤操作:1. 打开终端。2. 运行以下命令来安装交叉编译器:```sudo apt-get...
    99+
    2023-08-26
    ubuntu
  • linux如何配置arm交叉编译器
    要配置ARM交叉编译器,可以按照以下步骤进行操作:1. 安装ARM交叉编译器工具链:ARM交叉编译器工具链是专门用于ARM架构的编译...
    99+
    2023-08-11
    linux
  • ubuntu如何交叉编译环境
    12ubuntu交叉编译环境的搭建示例:打开终端命令行。输入以下命令安装交叉编译环境。sudo apt-get install gcc g++ libcc1 libg++ make gdb再输入以下命令安装交叉编译器。wget ftp://...
    99+
    2022-10-20
  • 如何交叉编译Python到ARM-Lin
    前言 我需要在Arm9的s3c2410 CPU上运行python,以下是我的编译过程。 host编译环境: ubuntu 7.04, gcc 4.2.1, arm-linux-gcc 3.3.2 要cross compil...
    99+
    2023-01-31
    Python ARM Lin
  • Fedora下如何安装Linux PPStream系统编译并安装封装库
    这篇文章主要介绍了Fedora下如何安装Linux PPStream系统编译并安装封装库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 下载所有必需软件包首先是 Linu...
    99+
    2023-06-16
  • linux交叉编译环境如何搭建
    搭建Linux交叉编译环境需要以下步骤:1. 安装交叉编译工具链:交叉编译工具链是为了在一种操作系统上生成另一种操作系统的可执行文件。可以通过以下几种方式安装交叉编译工具链:- 使用发行版提供的交叉编译工具链:有些Linux发行版提供了...
    99+
    2023-08-11
    linux
  • C++中protobuf的交叉编译如何使用
    这篇文章主要介绍“C++中protobuf的交叉编译如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中protobuf的交叉编译如何使用”文章能帮助大家解决问题。简介官方文档给出的定义和...
    99+
    2023-07-02
  • 如何ubuntu安装gcc编译器
    ubuntu安装gcc编译器的方法:打开终端命令行。输入以下命令进行安装。sudo apt install gcc然后需要输入Ubuntu密码。再输入以下命令安装build-essential。sudo apt install build-...
    99+
    2022-10-03
  • php5.6.31如何编译安装
    本文操作环境:CentOS 7系统、php版本:5.6.31 nginx版本:1.7.3 mysql版本:5.6.62、DELL G3电脑php5.6.31如何编译安装?CentOS 7 编译安装PHP5.6.31: 服务器上...
    99+
    2019-06-24
    CentOS PHP5.6.31
  • 如何编译安装redisd
    这篇文章给大家分享的是有关如何编译安装redisd的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。安装方法:yum安装查看yum仓库redis版本[root@centos ...
    99+
    2022-10-18
  • PHP如何编译安装
    这篇文章将为大家详细讲解有关PHP如何编译安装,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP编译安装# cd /usr/local/src# wget  ...
    99+
    2022-10-19
  • php5.2如何编译安装
    本篇文章给大家分享的是有关php5.2如何编译安装,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。php5.2编译安装的方法:1、下载php;2、下载php-fpm;3、安装所需...
    99+
    2023-06-29
  • 如何编译安装zabbix
    这篇文章主要为大家展示了“如何编译安装zabbix”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何编译安装zabbix”这篇文章吧。1.下载资源下载安装包(自行去网上搜索)获取包zabbix-...
    99+
    2023-06-04
  • 如何编译安装php5.6.31
    这篇文章主要为大家展示了“如何编译安装php5.6.31”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何编译安装php5.6.31”这篇文章吧。编译安装php5.6.31的方法:1、添加epe...
    99+
    2023-06-25
  • ubuntu如何离线安装编译器
    ubuntu离线安装编译器的示例:比如离线安装g++-4.6编译器。下载g++4.6编译器安装包,它的安装包有://四个安装包g++-4.6_4.6.3-1ubuntu5_amd64.debgcc-4.6_4.6.3-1ubuntu5_am...
    99+
    2022-10-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作