真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

FedoraSkyEye如何安裝交叉編譯器

這篇文章給大家分享的是有關Fedora SkyEye如何安裝交叉編譯器的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)建站為您提適合企業(yè)的網(wǎng)站設計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡競爭力!結合企業(yè)自身,進行網(wǎng)站設計及把握,最后結合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到網(wǎng)站設計、成都網(wǎng)站制作, 我們的網(wǎng)頁設計師為您提供的解決方案。

Fedora SkyEye是一個可以運行嵌入式操作系統(tǒng)的硬件仿真工具,這樣就可以在沒有硬件條件下來進行嵌入式系統(tǒng)的開發(fā)。以下操作均在Fedora Core 1.0里通過。Fedora SkyEye項目資源列表http://gro.clinux.org/projects/skyeye/

1、什么是Fedora SkyEye?

Fedora SkyEye是開源軟件的一個項目,F(xiàn)edora SkyEye的目標是在Linux和Windows操作系統(tǒng)里提供一個完全的仿真環(huán)境。Fedora SkyEye仿真環(huán)境相當于一個嵌入式計算機系統(tǒng),你可以在Fedora SkyEye里運行一些嵌入式Linux操作系統(tǒng),如ARMLinux,uClinux,uc/OS-II(ucos-ii)等,并能分析和調(diào)試它們的源代碼。

如果你想知道關于Fedora SkyEye和嵌入式系統(tǒng)更詳細的信息,請訪問下面的站點:
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(還不全)內(nèi)存: RAM, ROM, Flash周邊設備: Timer, UART, ne2k網(wǎng)絡芯片, LCD, 觸摸屏等目前能在SkyEye上運行下面的操作系統(tǒng)和系統(tǒng)軟件:
uC/OSII-2.5.x(支持網(wǎng)絡)
uClinux(基于Linux2.4.x內(nèi)核, 支持網(wǎng)絡)
ARM Linux 2.4.x/2.6.x
lwIP on uC/OSII
基于uC/OSII, uClinux, ARM Linux的應用程序

2.Fedora SkyEye可以做什么事情?
1. 通過Fedora SkyEye可以幫助促進嵌入式系統(tǒng)的學習,在不需要額外硬件的情況下學習和分析uclinux操作系統(tǒng)和其它嵌入式操作系統(tǒng),如ucosII等。
2. SkyEye可用于嵌入式系統(tǒng)的教學。
3. 希望通過skyeye促進操作系統(tǒng)的研究,如ucosII,uclinux+RTAI,uclinux2.5.x等。
4. 可以基于SkyEye進行仿真特定硬件模塊的研究。
5. SkyEye可以作為嵌入式集成開發(fā)環(huán)境開發(fā)嵌入式系統(tǒng)(當然需要對SkyEye做大量的工作)。
注:引自陳渝《SkyEye Project FAQ》

3、安裝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

接下來執(zhí)行:makemake install安裝完成后執(zhí)行skyeye注意:a.如果你使用的是Mandrake Linux發(fā)行版,那么你在編譯Fedora SkyEye時遇到錯誤,并且錯誤與readline, ncurse, termcap等有關,你可以試試下面的方法:ln -s /usr/include/ncurses/termcap.h /usr/local/include/termcap.h接著再make和make install看能否成功!
b.如果你的Linux發(fā)行版是Debian Linux,那么不要使用gcc 2.95或是gcc 3.0,請使用gcc 3.2+
c.gcc的版本要在2.96或以上
d.如果SkyEye的版本大于0.6.0,那么使用LCD仿真需要在Linux系統(tǒng)里安裝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

執(zhí)行:chmod a+x arm-elf-tools-20030314.sh然后:./arm-elf-tools-20030314.shls /usr/local/bin/你應能看到以arm-elf開頭的可執(zhí)行文件,其中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; }

然后執(zhí)行:arm-elf-gcc -Wl,-elf2flt -o hello hello.c-elf2flt參數(shù)是將elf文件格式轉為flat文件格式,這個工具是在你安裝交叉編譯器產(chǎn)生的。或者你可以寫個Makefile文件,執(zhí)行: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
如果編譯通過,就會產(chǎn)生hello可執(zhí)行文件。用下面的命令:file hello你會發(fā)現(xiàn),它是BFLT(binary FLAT),你目標平臺所支持的文件格式。

6、執(zhí)行你的hello程序

這里,我們將借助genromfs這個小工具來完成測試,這個工具就是你在安裝交叉編譯器時產(chǎn)生的,你可以直接使用它。到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/* romfs另外,把你編譯好的可執(zhí)行程序拷貝到/romfs/bin目錄里,這里就是hello了!
genromfs -f boot.rom -d romfs/

注:可以用genromfs -h來獲得幫助!OK!執(zhí)行下面的命令:
skyeye linux
(skyeye)target sim
(skyeye)load
(skyeye)run
kernel start.....
很熟悉了吧。。。
cd /bin
hello
可以看到結果了嗎?其實到了這一步,你就可以開發(fā)自己的程序了!

7、一個應用程序的開發(fā)實例
下面介紹的程序主要是完成一個網(wǎng)絡應用,網(wǎng)絡應用的標準模型是客戶機-服務器模型,它的主要執(zhí)行過程如下:
(1)系統(tǒng)啟動服務器執(zhí)行。服務器完成一些初始化操作,然后進入睡眠狀態(tài),等待客戶機請求;
(2)在網(wǎng)絡的某臺機器上,用戶執(zhí)行客戶機程序;
(3)客戶機進程與服務器進程建立一條連接;
(4)連接建立之后,客戶機通過網(wǎng)絡向服務器發(fā)出請求,請求某種服務;
(5)服務器接收到客戶機請求后,根據(jù)客戶機請求的內(nèi)容進行相應的處理,然后將處理結果返回;
(6)服務器斷開與客戶機的連接,繼續(xù)睡眠,等待其他客戶機的請求;

Linux系統(tǒng)中的很多服務器是在系統(tǒng)初啟時啟動的,如時間服務器、打印服務器、文件傳輸服務器和電子郵件服務器等。大多數(shù)時間這些服務器進程處于睡眠狀態(tài),等待客戶機的請求。下面這兩個客戶機-服務器程序比較簡單,主要是對網(wǎng)絡客戶機-服務器模型的實際運行有大致印象。這個客戶機-服務器的操作過程非常簡單:客戶機與服務器建立連接之后,服務器向客戶機返回一條消息。服務器程序的源代碼如下:

PHP 代碼:
/* tcpserver.c */
#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);
}


給服務器程序?qū)懸粋€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 代碼:
/* tcpclient.c */
#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);
}

最后,F(xiàn)edora 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網(wǎng)絡編程的書籍。

8、編譯并運行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/目錄下,然后依次執(zhí)行下面的命令:

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目錄下會生成可執(zhí)行文件linux
在/usr/src/uClinux-dist/images/會生成romfs.img等文件

在uClinux-dist目錄下建立仿真AT91的skyeye配置文件skyeye.conf,內(nèi)容如下:
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來調(diào)試運行kernel了,在/usr/src/uClinux-dist執(zhí)行如下命令:

skyeye linux-2.4.x/linux

(skyeye)target sim

(skyeye)load

(skyeye)run

kernel start.....

注意:
要在Fedora SkyEye.conf所在目錄下執(zhí)行skyeye linux-2.4.x/linux

9、加入網(wǎng)絡功能
a.用root用戶進行操作。
b.你要看你的/lib/modules/'uname -r'/kernel/drivers/net/目錄里有沒有tun.o
如果沒有的話你就需要編譯你的linux內(nèi)核來獲得tun.o了。
c.(1)運行tun設備模塊:

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

如果你沒有該設備,那你就要用下面的命令來創(chuàng)建它:

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

(2)運行vnet(虛擬集線器)設備模塊(這一步不是必需的):
獲取vnet的源碼,然后創(chuàng)建設備:

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

創(chuàng)建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

下面將對上面的一些參數(shù)作下說明:
state=on/off意思是仿真的NIC(網(wǎng)絡接口板)是有線的還是無線的;
mac=仿真適配器的MAC地址;
ethmod=tuntap/vnet在主機環(huán)境里使用的虛擬設備;
hostip=意思是主機環(huán)境與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

10、安裝完成Fedora SkyEye后,下一步將做什么?

1、對于嵌入式操作系統(tǒng)的初學者和入門者和入門的學生而言,他們可以先看一些有關操作系統(tǒng)和嵌入式操作系統(tǒng)方面的教材和書籍,如與uC/OS、Minix、uClinux、Linux相關的書籍等。然后可以在Fedora SkyEye上開發(fā)一些簡單的應用程序例子(如進程間通信、進程優(yōu)先級、死鎖情況、網(wǎng)絡應用等),對某些操作系統(tǒng)功能(如進程調(diào)度、內(nèi)存管理、網(wǎng)絡子系統(tǒng)、文件子系統(tǒng)等)進行簡單的修改和擴展,并通過Fedora SkyEye進行運行和調(diào)試,看看會發(fā)生什么情況。

2、對于有一定經(jīng)驗的軟件工程師而言,在Fedora SkyEye上完成一定的應用系統(tǒng)原型開發(fā)是值得一做的事情。比如移植或開發(fā)一個文件子系統(tǒng)或網(wǎng)絡子系統(tǒng)到一個特定的操作系統(tǒng)中,相信比在一個真實的開發(fā)板上開發(fā)要容易一些。在Fedora SkyEye上進行一些操作系統(tǒng)的移植和開發(fā)(如移植RTLinux、RTAI等其它操作系統(tǒng)到Skyeye上)也是很有挑戰(zhàn)性的工作。

3、對于硬件工程師而言,對Fedora SkyEye進行擴充,設計新的硬件仿真(如USB、IDE硬盤等)使得Skyeye的硬件仿真功能更加強大,支持更多功能的軟件,是很有意義的事情。

感謝各位的閱讀!關于“Fedora SkyEye如何安裝交叉編譯器”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


標題名稱:FedoraSkyEye如何安裝交叉編譯器
網(wǎng)站URL:http://weahome.cn/article/gepjhi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部