posts - 189,comments - 115,trackbacks - 0

          [url:]http://www.yuanma.org/data/2006/1228/article_2024.htm
          SkyEye是一個可以運行嵌入式操作系統的硬件仿真工具,這樣就可以在沒有硬件條件下來進行嵌入式系統的開發。

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

          Skyeye項目資源列表
          http://gro.clinux.org/projects/skyeye/


          文檔摘要:
          1、什么是SkyEye?
          2、SkyEye可以做什么事情?
          3、安裝SkyEye
          4、安裝arm-elf交叉編譯器
          5、測試你的arm-elf-gcc編譯器
          6、執行你的hello程序
          7、編譯并運行uClinux-dist-20030909.tar.gz
          8、加入網絡功能
          9、安裝完成SkyEye后,下一步將做什么?


          1、什么是SkyEye?

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

          如果你想知道關于SkyEye和嵌入式系統更詳細的信息,請訪問下面的站點:
          www.SkyEye.org
          http://www.skyeye.org/index_cn.html

          通過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(還不全)
          內存: 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.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

          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

          接下來執行:

          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交叉編譯器

          下載arm-elf-tools-20030314.sh
          ftp://166.111.68.183/pub/embed/uclinux/soft/tools/arm
          或到
          ftp://166.111.8.229/OS/Embeded

          執行:
          chmod a+x arm-elf-tools-20030314.sh
          然后:
          ./arm-elf-tools-20030314.sh

          ls /usr/local/bin/

          你應能看到以arm-elf開頭的可執行文件,其中arm-elf-gcc就是用來編譯你目標平臺的編譯器的,當然還有一些小工具,后面將一一講來。


          5、測試你的arm-elf-gcc編譯器

          先寫一個小程序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;
          }

          然后執行:

          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/skye...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/

          注:可以用genromf -h來獲得幫助!

          OK!執行下面的命令:

          skyeye linux

          (skyeye)target sim

          (skyeye)load

          (skyeye)run

          kernel start.....

          很熟悉了吧。。。

          cd /bin

          hello

          可以看到結果了嗎?

          其實到了這一步,你就可以開發自己的程序了!


          7、編譯并運行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

          假設把它下載到/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.....

          注意:
          要在skyeye.conf所在目錄下執行skyeye linux-2.4.x/linux


          8、加入網絡功能
          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.配置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.運行skyeye linux-2.4.x/linux

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

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

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

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

          參考:
          SkyEye項目站點里的一篇中文文檔;
          陳渝《SkyEye Project FAQ》;
          skyeye-0.7.0中的README文檔。

          后記:
          為了讓大家能快速上手,進行實際的開發工作,我趕湊了一篇文檔,很粗糙。但我堅信隨著更多的有經驗的人的加入;隨著我們自己水平的提高,一定會出現更多、更好的文章來。就讓我們快點行動起來吧!

          最后,我再次建議大家看一下《嵌入式Linux技術與應用》這本書。

          可以到http://www.skyeye.org/document.htm或是
          ftp://166.111.68.183/pub/embed/skyeye/document/或是
          http://www.huihoo.org/mirrors/skyeye/
          下載文檔,可以獲得更多有關skyeye和嵌入式Linux開發的知識和經驗。

          posted on 2007-12-06 20:09 MEYE 閱讀(645) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 东乌| 临安市| 大邑县| 平凉市| 安达市| 柘荣县| 宁津县| 许昌市| 象山县| 静海县| 敦煌市| 遵义市| 江都市| 平罗县| 建阳市| 喀喇沁旗| 日喀则市| 闽清县| 吉木萨尔县| 汨罗市| 莱阳市| 临洮县| 武清区| 彭泽县| 广安市| 汉沽区| 蒙城县| 盐津县| 措勤县| 阿图什市| 缙云县| 高青县| 新田县| 电白县| 三亚市| 阜南县| 穆棱市| 常山县| 高邑县| 百色市| 松阳县|