[url:]http://www.yuanma.org/data/2006/1228/article_2024.htm
SkyEye是一個(gè)可以運(yùn)行嵌入式操作系統(tǒng)的硬件仿真工具,這樣就可以在沒(méi)有硬件條件下來(lái)進(jìn)行嵌入式系統(tǒng)的開(kāi)發(fā)。
以下操作均在Fedora Core 1.0里通過(guò)。
Skyeye項(xiàng)目資源列表
http://gro.clinux.org/projects/skyeye/
文檔摘要:
1、什么是SkyEye?
2、SkyEye可以做什么事情?
3、安裝SkyEye
4、安裝arm-elf交叉編譯器
5、測(cè)試你的arm-elf-gcc編譯器
6、執(zhí)行你的hello程序
7、編譯并運(yùn)行uClinux-dist-20030909.tar.gz
8、加入網(wǎng)絡(luò)功能
9、安裝完成SkyEye后,下一步將做什么?
1、什么是SkyEye?
SkyEye
是開(kāi)源軟件的一個(gè)項(xiàng)目,SkyEye的目標(biāo)是在Linux和Windows操作系統(tǒng)里提供一個(gè)完全的仿真環(huán)境。SkyEye仿真環(huán)境相當(dāng)于一個(gè)嵌入式計(jì)算
機(jī)系統(tǒng),你可以在SkyEye里運(yùn)行一些嵌入式Linux操作系統(tǒng),如ARMLinux,uClinux,uc/OS-II(ucos-ii)等,并能分
析和調(diào)試它們的源代碼。
如果你想知道關(guān)于SkyEye和嵌入式系統(tǒng)更詳細(xì)的信息,請(qǐng)?jiān)L問(wèn)下面的站點(diǎn):
www.SkyEye.org
http://www.skyeye.org/index_cn.html
通過(guò)SkyEye能仿真下面的硬件:
CPU核心:ARM7TDMI, ARM720T, ARM9, StrongARM, XScale
CPU:
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
周邊設(shè)備: Timer, UART, ne2k網(wǎng)絡(luò)芯片, LCD, 觸摸屏等
目前能在SkyEye上運(yùn)行下面的操作系統(tǒng)和系統(tǒng)軟件:
uC/OSII-2.5.x(支持網(wǎng)絡(luò))
uClinux(基于Linux2.4.x內(nèi)核, 支持網(wǎng)絡(luò))
ARM Linux 2.4.x/2.6.x
lwIP on uC/OSII
基于uC/OSII, uClinux, ARM Linux的應(yīng)用程序
2.SkyEye可以做什么事情?
1. 通過(guò)SkyEye可以幫助促進(jìn)嵌入式系統(tǒng)的學(xué)習(xí),在不需要額外硬件的情況下學(xué)習(xí)和分析uclinux操作系統(tǒng)和其它嵌入式操作系統(tǒng),如ucosII等。
2. SkyEye可用于嵌入式系統(tǒng)的教學(xué)。
3. 希望通過(guò)skyeye促進(jìn)操作系統(tǒng)的研究,如ucosII,uclinux+RTAI,uclinux2.5.x等。
4. 可以基于SkyEye進(jìn)行仿真特定硬件模塊的研究。
5. SkyEye可以作為嵌入式集成開(kāi)發(fā)環(huán)境開(kāi)發(fā)嵌入式系統(tǒng)(當(dāng)然需要對(duì)SkyEye做大量的工作)。
注:引自陳渝《SkyEye Project FAQ》
3、安裝SkyEye
到
http://gro.clinux.org/projects/skyeye/下載skyeye-0.7.0.tar.bz2包:
tar jxvf skyeye-v0.7.0.tar.bz2
進(jìn)入解壓后的skyeye目錄,如果SkyEye的版本低于0.6.0,則運(yùn)行下面的命令:
./configure --target=arm-elf --prefix=/usr/local --without-gtk-prefix --without-gtk-exec-prefix --disable-gtktest
如果SkyEye的版本高于0.6.0,則運(yùn)行下面的命令:
./configure --target=arm-elf --prefix=/usr/local
接下來(lái)執(zhí)行:
make
make install
安裝完成后執(zhí)行skyeye
注意:
a.如果你使用的是Mandrake Linux發(fā)行版,那么你在編譯SkyEye時(shí)遇到錯(cuò)誤,并且錯(cuò)誤與readline, ncurse, termcap等有關(guān),你可以試試下面的方法:
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,請(qǐng)使用gcc 3.2+
c.gcc的版本要在2.96或以上
d.如果SkyEye的版本大于0.6.0,那么使用LCD仿真需要在Linux系統(tǒng)里安裝GTK軟件。
4、安裝arm-elf交叉編譯器
下載arm-elf-tools-20030314.sh
ftp://166.111.68.183/pub/embed/uclinux/soft/tools/arm
或到
ftp://166.111.8.229/OS/Embeded
執(zhí)行:
chmod a+x arm-elf-tools-20030314.sh
然后:
./arm-elf-tools-20030314.sh
ls /usr/local/bin/
你應(yīng)能看到以arm-elf開(kāi)頭的可執(zhí)行文件,其中arm-elf-gcc就是用來(lái)編譯你目標(biāo)平臺(tái)的編譯器的,當(dāng)然還有一些小工具,后面將一一講來(lái)。
5、測(cè)試你的arm-elf-gcc編譯器
先寫(xiě)一個(gè)小程序hello.c
PHP代碼:
#include <stdio.h>
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文件格式轉(zhuǎn)為flat文件格式,這個(gè)工具是在你安裝交叉編譯器產(chǎn)生的。
或者你可以寫(xiě)個(gè)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
|
如果編譯通過(guò),就會(huì)產(chǎn)生hello可執(zhí)行文件。用下面的命令:
file hello
你會(huì)發(fā)現(xiàn),它是BFLT(binary FLAT),你目標(biāo)平臺(tái)所支持的文件格式。
6、執(zhí)行你的hello程序
這里,我們將借助genromfs這個(gè)小工具來(lái)完成測(cè)試,這個(gè)工具就是你在安裝交叉編譯器時(shí)產(chǎn)生的,你可以直接使用它。
到
http://gro.clinux.org/projects/skye...0.4.tar.bz2包:
tar jxvf skyeye-binary-testutils-1.0.4.tar.bz2
cd testsuits/at91/uclinux2(當(dāng)然你還可以用別的)
mkdir romfs(建一個(gè)目錄,后面用)
mount -o loop boot.rom /mnt/xxx
cp -r /mnt/xxx/* romfs
另外,把你編譯好的可執(zhí)行程序拷貝到/romfs/bin目錄里,這里就是hello了!
genromfs -f boot.rom -d romfs/
注:可以用genromf -h來(lái)獲得幫助!
OK!執(zhí)行下面的命令:
skyeye linux
(skyeye)target sim
(skyeye)load
(skyeye)run
kernel start.....
很熟悉了吧。。。
cd /bin
hello
可以看到結(jié)果了嗎?
其實(shí)到了這一步,你就可以開(kāi)發(fā)自己的程序了!
7、編譯并運(yùn)行uClinux-dist-20030909.tar.gz
到
ftp://166.111.68.183/pub/embed/uclinux/soft/
或到
ftp://166.111.8.229/OS/Embeded/uclinux/pub/uClinux/dist下載
uClinux-dist-20030909.tar.gz
假設(shè)把它下載到/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
運(yùn)行下面這兩條命:
make dep
make
此時(shí)在/usr/src/uClinux-dist/linux-2.4.x目錄下會(huì)生成可執(zhí)行文件linux
在/usr/src/uClinux-dist/images/會(huì)生成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
這個(gè)時(shí)候就可以用skyeye來(lái)調(diào)試運(yùn)行kernel了,在/usr/src/uClinux-dist執(zhí)行如下命令:
skyeye linux-2.4.x/linux
(skyeye)target sim
(skyeye)load
(skyeye)run
kernel start.....
注意:
要在skyeye.conf所在目錄下執(zhí)行skyeye linux-2.4.x/linux
8、加入網(wǎng)絡(luò)功能
a.用root用戶(hù)進(jìn)行操作。
b.你要看你的/lib/modules/'uname -r'/kernel/drivers/net/目錄里有沒(méi)有tun.o
如果沒(méi)有的話(huà)你就需要編譯你的linux內(nèi)核來(lái)獲得tun.o了。
c.(1)運(yùn)行tun設(shè)備模塊:
#insmod /lib/modules/'uname -r'/kernel/drivers/net/tun.o
如果你沒(méi)有該設(shè)備,那你就要用下面的命令來(lái)創(chuàng)建它:
#mkdir /dev/net
#mknod /dev/net/tun c 10 200
(2)運(yùn)行vnet(虛擬集線器)設(shè)備模塊(這一步不是必需的):
獲取vnet的源碼,然后創(chuàng)建設(shè)備:
#mknod /dev/net/vnet c 10 201
#chmod 666 /dev/net/vnet
創(chuàng)建vnet.o
#make vnet.o
插入模塊vnet.o
#insmod vnet.o
進(jìn)入test目錄,用test來(lái)測(cè)度vnet.o
#cd test
#make
#./testvnet1
d.配置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
下面將對(duì)上面的一些參數(shù)作下說(shuō)明:
state=on/off意思是仿真的NIC(網(wǎng)絡(luò)接口板)是有線的還是無(wú)線的;
mac=仿真適配器的MAC地址;
ethmod=tuntap/vnet在主機(jī)環(huán)境里使用的虛擬設(shè)備;
hostip=意思是主機(jī)環(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
注意:
如果你想在同一時(shí)刻運(yùn)行兩個(gè)或更多的skyeye,那么請(qǐng)為每一個(gè)skyeye使用不同的skyeye.conf
e.運(yùn)行skyeye linux-2.4.x/linux
9、安裝完成SkyEye后,下一步將做什么?
1、
對(duì)于嵌入式操作系統(tǒng)的初學(xué)者和入門(mén)者和入門(mén)的學(xué)生而言,他們可以先看一些有關(guān)操作系統(tǒng)和嵌入式操作系統(tǒng)方面的教材和書(shū)籍,如與uC/OS、Minix、
uClinux、Linux相關(guān)的書(shū)籍等。然后可以在Skyeye上開(kāi)發(fā)一些簡(jiǎn)單的應(yīng)用程序例子(如進(jìn)程間通信、進(jìn)程優(yōu)先級(jí)、死鎖情況、網(wǎng)絡(luò)應(yīng)用等),對(duì)
某些操作系統(tǒng)功能(如進(jìn)程調(diào)度、內(nèi)存管理、網(wǎng)絡(luò)子系統(tǒng)、文件子系統(tǒng)等)進(jìn)行簡(jiǎn)單的修改和擴(kuò)展,并通過(guò)Skyeye進(jìn)行運(yùn)行和調(diào)試,看看會(huì)發(fā)生什么情況。
2、
對(duì)于有一定經(jīng)驗(yàn)的軟件工程師而言,在SkyEye上完成一定的應(yīng)用系統(tǒng)原型開(kāi)發(fā)是值得一做的事情。比如移植或開(kāi)發(fā)一個(gè)文件子系統(tǒng)或網(wǎng)絡(luò)子系統(tǒng)到一個(gè)特定的
操作系統(tǒng)中,相信比在一個(gè)真實(shí)的開(kāi)發(fā)板上開(kāi)發(fā)要容易一些。在Skyeye上進(jìn)行一些操作系統(tǒng)的移植和開(kāi)發(fā)(如移植RTLinux、RTAI等其它操作系統(tǒng)
到Skyeye上)也是很有挑戰(zhàn)性的工作。
3、對(duì)于硬件工程師而言,對(duì)Skyeye進(jìn)行擴(kuò)充,設(shè)計(jì)新的硬件仿真(如USB、IDE硬盤(pán)等)使得Skyeye的硬件仿真功能更加強(qiáng)大,支持更多功能的軟件,是很有意義的事情。
參考:
SkyEye項(xiàng)目站點(diǎn)里的一篇中文文檔;
陳渝《SkyEye Project FAQ》;
skyeye-0.7.0中的README文檔。
后記:
為了讓大家能快速上手,進(jìn)行實(shí)際的開(kāi)發(fā)工作,我趕湊了一篇文檔,很粗糙。但我堅(jiān)信隨著更多的有經(jīng)驗(yàn)的人的加入;隨著我們自己水平的提高,一定會(huì)出現(xiàn)更多、更好的文章來(lái)。就讓我們快點(diǎn)行動(dòng)起來(lái)吧!
最后,我再次建議大家看一下《嵌入式Linux技術(shù)與應(yīng)用》這本書(shū)。
可以到
http://www.skyeye.org/document.htm或是
ftp://166.111.68.183/pub/embed/skyeye/document/或是
http://www.huihoo.org/mirrors/skyeye/
下載文檔,可以獲得更多有關(guān)skyeye和嵌入式Linux開(kāi)發(fā)的知識(shí)和經(jīng)驗(yàn)。
posted on 2007-12-06 20:09
MEYE 閱讀(643)
評(píng)論(0) 編輯 收藏