[轉]SkyEye硬件模擬平臺,第二部分: 安裝與使用

SkyEye硬件模擬平臺,第二部分: 安裝與使用

developerWorks
文檔選項
將打印機的版面設置成橫向打印模式

打印本頁

將此頁作爲電子郵件發送

將此頁作爲電子郵件發送

未顯示需要 JavaScript 的文檔選項


級別: 初級

陳渝 ([email protected])清華大學

2004 年 9 月 01 日

 

一. SkyEye配置選項

SkyEye模擬的硬件配置和模擬執行行爲由配置文件skyeye.conf中的選項確定。根據選項的功能,skyeye.conf的選項分爲硬件配置選項和模擬執行選項。根據參數的個數,skyeye.conf的選項主要由兩種組成:

  • 單參數選項行
    格式爲:
    symbol: value
    symbol可以是硬件定義,如cpu、mach等,也可以是執行控制定義,如log等。
    value是symbol對應的值,可能是數字也可能是字符串。
  • 多參數選項行
    格式爲:
    symbol:opt1=value1,opt2=value2,......
    opt1是參數名,value1是opt1對應的值,可能是數字也可能是字符串。

目前skyeye.conf的配置定義如下:

  • 基本CPU核配置選項
    目前存在的選項有:arm710、arm7tdmi、arm720t、arm920t、sa1100、sa1110、xscale
    格式爲
    cpu: cpuname
    注:cpuname表示一個代表cpu名字的字符串。
    例如:
    cpu: arm7tdmi
  • 具體的開發板(包括CPU擴展)配置選項
    目前存在的選項有:at91、ep7312、adsbitsy,pxa_Lubbock、lpc、s3c4510b、s3c44b0、cs89712、sa1100、at91rm92、sharp_lh7a400
    格式爲:
    mach: machinename
    注:cpuname表示一個代表基於特定CPU的開發板名字的字符串。
    例如:
    mach: at91
  • 內存組配置選項
    一個內存組內的地址是連續的,類型分爲RAM SPACE, ROM SPACE, mapped IO SPACE
    格式爲:
    mem_bank: map=M|I, type=RW|R, addr=0xXXXXXXXX, size=0xXXXXXXXX,file=imagefilename,boot=yes|no
    • map=M 表示 RAM/ROM SPACE, map=I 表示 mapped IO SPACE。
    • type=RW ,且如果map=M則表示RAM SPACE, type=R,且如果map=M則表示ROM SPACE。
    • addr=0xXXXXXX 表示內存組的起始物理地址(32bit,16進制)。
    • size =0xXXXXXX 表示內存組的大小(32bit,16進制) 。
    • file =imagefilename
      file的值imagefilename是一個字符串,實際上表示了一個文件,一般是一個可以執行的binary image格式的可執行程序或OS內核文件或是一個binary image格式的根文件系統。如果存在這個文件,SkyEye會把文件的內容直接寫到對應的模擬內存組地址空間中。
    • boot=yes/no,如果boot=yes,則SkyEye會把模擬硬件啓動後的第一條指令的地址定位到對應的內存組的起始地址。

    例如:
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./boot.rom
    mem_bank: map=M, type=RW, addr=0x10000000, size=0x00000800, file=./loader.bin,boot=yes

  • 網絡芯片8019AS的配置
    格式爲 nic: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd
    注:xx表示兩位16進制數,dd表示兩位10進制數
    • state表示模擬開始後,網絡芯片是否開始工作
    • mac表示模擬的nic的mac地址
    • ethmod表示skyeye所處主機上的網絡模擬方式, 目前有tuptap和vnet兩種模式。tuntap是linux kernel支持的一個點到點虛擬網絡實現,vnet是skyeye實現的一個功能更多的一個基於虛擬HUB的網絡。
    • hostip表示主機方與skyeye交互用的ip地址

    例如:
    net: state=on, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1

  • LCD的配置
    格式爲 lcd: state=on/off
    state=on表示LCD處於接通狀態; state=off 表示LCD處於關閉狀態。
    例如:
    lcd: state=on
  • skyeye的UART控制選項
    uart選項可以控制skyeye在另一個與某個串口連接的終端上輸入/輸出字符
    格式:
    uart: fd_in=indevname, fd_out=outdevname
    • fd_in=indevname indevname表示用於輸入的設備文件名,其值爲實際的串口設備文件/dev/ttySx
    • fd_out=outdevname outdevname表示用於輸出的設備文件名,其值爲實際的串口設備文件/dev/ttySx
    例如:
    uart: fd_in=/dev/ttyS0, fd_out=/dev/ttyS0
  • skyeye的log控制選項
    log選項用於控制skyeye輸出硬件系統的執行狀態信息,包括每次執行指令時的執行指令值、寄存器值、各種硬件狀態等。
    格式:
    log: logon=0|1, logfile=filename, start=number1, end=number2, length=number3
    • logon=0|1|2|3,如果值等於0表示不進行記錄,如果值等於1表示記錄指令和指令地址流,如果值等於2表示記錄指令和指令地址和主要寄存器內容,如果值等於3表示記錄指令和指令地址和所有的寄存器內容。
    • logfile=filename 其值是一個字符串,表示用於記錄信息的文件名
    • start=number1 其值是一個>=0的十進制整數,表示系統執行到第number1條指令時開始進行記錄
    • end =number2其值是一個>=0的十進制整數,表示系統執行到第number2條指令時停止記錄
    • length =number3其值是一個>=0的十進制整數,表示只記錄系統最近執行的number3條指令時的信息

    格式:
    log: logon=0, logfile=/tmp/sk1.log, start=100000, end=200000, length=100


    圖 0 1 SkyEye硬件模擬邏輯結構圖
    圖 0 1 SkyEye硬件模擬邏輯結構圖

    SkyEye目標模擬模塊模擬的硬件邏輯結構圖如圖 0-1所示。





回頁首


二. 安裝使用SkyEye

1. SkyEye的安裝

目前SkyEye在Linux操作系統下運行得很好, SkyEye通過MingW或cywgin軟件也可以在Windows環境中運行。

下面我們以在RedHat 9.0環境的SkyEye安裝爲例:

首先需要從解開skyeye-x.x.x.src.tar.bz2軟件包(x.x.x代表SkyEye的版本號)開始,按照軟件包中的SkyEye.README或README文件中介紹的步驟進行(下面命令中的"#"是shell提示符,用戶不用輸入):

(1) 解壓源碼包(假定skyeye-x.x.x.src.tar.bz2放在本機的"/usr/src"目錄下),會在當前目錄生成一個skyeye的目錄
#cd /usr/src
# tar xjvf skyeye-x.x.x.src.tar.bz2

(2) 進入解壓SkyEye目錄,配置SkyEye
#cd 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,則帶有LCD仿真支持。爲了增加對LCD仿真的支持,則運行如下命令:
# ./configure --target=arm-elf --prefix=/usr/local

(3) 然後是編譯和安裝(正確執行完下面的指令且命令正常結束後,系統中的/usr/local/bin/skyeye 執行程序就是安裝好的SkyEye軟件。)


# make
# make install

在編譯安裝過程中,須注意以下幾點:

  • 如果你使用的是Mandrake Linux,那麼有可能你在編譯SkyEye時會出現有關readline, ncurse, termcap等庫的一些錯誤,那麼你需要運行下面的命令:
    ln -s /usr/include/ncurses/termcap.h /usr/local/include/termcap.h
  • 然後再重新編譯
  • 如果你使用的是Debian Linux, 不要用gcc 2.95 或 gcc 3.0, 要使用gcc 3.2或更高版本。
  • 在你係統中所使用的gcc 版本號應該要大於或等於2.96
  • 如果SkyEye版本號大於0.6.0, 那麼你需要在你的系統中安裝GTK (LCD模擬要用到) 。




回頁首


2. SkyEye的使用

下面我們以SkyEye模擬基於Atmel AT91X40的開發板,並運行μClinux爲例來講解SkyEye的具體使用。

第1步 安裝交叉編譯環境並配置μClinux

先安裝交叉編譯器。注意這裏最好用root用戶來執行如下操作。將arm-elf-tools-20011219.tar.gz(20011219是該工具的產生時間,也可以選擇更新的arm-elf-tools。)在本機的根目錄下用tar命令解開(假定arm-elf-tools-20011219.tar.gz放在本機的根目錄"/"下)。具體命令(下面命令中的"#"是shell提示符,用戶不用輸入)如下:


#cd /
# tar /zxvf arm-elf-tools-20011219.tar.gz

然後將uClinux-dist-20020927.tar.gz(假定該軟件包放在本機的根目錄下)解開,比如解開在/usr/src/uClinux-dist/下,需要執行如下命令:

# cd /usr/src
# tar zxvf /uClinux-dist-20020927.tar.gz

然後在/usr/src/uClinux-dist/目錄下執行如下命令:

  • 在圖形方式下可用命令
    # make xconfig
  • 在命令行方式下可用命令
    # make menuconfig

在這兩種界面下,在vendor/product選項中選擇GDB/ARMulator,kernel版本選擇2.4.x,其它選項不變,然後保存配置退出,即選擇save and exit選項。

第2步 編譯生成μClinux和包含應用程序的文件系統

方案A

如果要生成帶調試信息的linux kernel執行文件,在第一步執行完後,繼續執行如下命令:
# make dep; make linux
這時在/usr/src/uClinux-dist/linux-2.4.x目錄下生成具有ELF執行文件格式的linux內核文件。到這一步還沒有生成文件系統,爲了生成文件系統,還需要執行如下命令:
# make romfs; make image
如果在/usr/src/uClinux-dist/images/下存在文件 romfs.img,表示文件系統生成成功。

方案B

如果想一步生成帶調試信息的linux kernel執行文件和linux kenel 執行文件映像和磁盤映像文件romfs.img,可簡單地運行命令:
# make dep; make
就行了。可查看/usr/src/uClinux-dist/images/下是否有文件 romfs.img等在/usr/src/uClinux-dist目錄下,如果有,表示編譯安裝成功。

第3步 用SkyEye運行和調試μClinux內核

假定SkyEye的工作目錄位於/usr/src/uClinux-dist下,首先要進行一些準備工作:

在工作目錄下建立專門用於基於AT91X40開發板的SkyEye硬件配置文件skyeye.conf。一個簡單的方法是從SkyEye軟件包中的README文件中截取一塊內容(以"FOR AT91 (1) special for uclinux"開始的一行,從它下面第三行開始截取,共取9行)作爲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=./boot.rom
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

這樣我們可以通過如下命令看看在/usr/src/uClinux-dist目錄下的skyeye.conf文件是否與上面的內容一致:
# more /usr/src/uClinux-dist/skyeye.conf
然後是建立文件系統的聯接,需要在目錄/usr/src/uClinux-dist目錄下執行如下命令:
#ln -s images/romfs.img boot.rom
這主要是與skyeye.conf中的內容保持一致,大家可注意skyeye.conf中的第5行。
完成上述準備工作後,就可以用SkyEye來運行和調試μClinux內核了,我們可以嘗試如下命令("#"和"(SkyEye)"後面跟着的字符串是需要使用者輸入的):

# cd /usr/src/uClinux-dist
# /usr/local/bin/skyeye linux-2.4.x/linux
(SkyEye)target sim
cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 
mach info: name at91, mach_init addr 0x813ebc0
SKYEYE: use arm7100 mmu ops
Loaded ROM ./boot.rom
Connected to the simulator.
(SkyEye)load
Loading section .init, size 0xa000 vma 0x1000000
Loading section .text, size 0xc5cb0 vma 0x100a000
Loading section .data, size 0x8320 vma 0x10d0000
Start address 0x1000000
Transfer rate: 7077504 bits/sec.
(SkyEye)run
Starting program: /usr/src/uClinux-dist/linux-2.4.x/linux 
Linux version 2.4.19-uc1 ([email protected]) (gcc version 2.95.3 20010315 (release)
(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from 
http://www.snapgear.com/)) #1 Sun Sep 5 12:00:39 HKT 2004
Processor: Atmel AT91M40xxx revision 0
Architecture: EB01
……

你還可以在run之前給kernel設置斷點來調試。

在使用SkyEye時要注意以下幾點:

a .注意要在 memmap.conf(skyeye-0.2以前版本的配置文件)或skyeye.conf(skyeye-0.2以後版本的配置文件)和boot.rom所在目錄下執行skyeye。

b. memmap.conf 和 skyeye.conf都是skyeye的硬件配置文件。memmap.conf 適用於skyeye0.2以下版本,而skyeye.conf 用於skyeye0.2以上版本。

c. 運行帶網絡選項的硬件配置時,注意用戶必須爲root用戶,而且當前的可執行路徑中可以搜索到ifconfig命令

d. 運行帶網絡選項的硬件配置時,需要編譯安裝內核模塊tuo.o (在RedHat系統中,該模塊在/lib/modules/2.4.x/kernel/drivers/net/tun.o)

e. 請閱讀skyeye.conf.txt來獲得skyeye.conf的配置選項的含義

f. 可參考skyeye-binary-testutils-x.x.x.tar.bz2軟件包(x.x.x代表其的版本號)中已經設定好的skyeye.conf來配置特定的硬件模擬環境,並可嘗試用SkyEye運行這個軟件包中編譯好的操作系統內核。

下面是一些skyeye.conf的例子:

FOR AT91 (0)  special for ucosii
-------------------------------------------
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
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
FOR AT91 (1) special for μClinux
-------------------------------------------
#skyeye config file sample
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=./boot.rom
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
#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:5:3:2:1:f, ethmod=tuntap, hostip=192.168.2.1
FOR ep7312 (1) special for linux
-------------------------------------------
cpu: arm720t
mach: ep7312
mem_bank: map=I, type=RW, addr=0x80000000, size=0x00010000
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00200000
mem_bank: map=M, type=RW, addr=0xc0200000, size=0x00200000, file=./initrd.img
mem_bank: map=M, type=RW, addr=0xc0400000, size=0x00c00000
FOR StrongArm SA1100 (1) speciall for linux
-------------------------------------------
cpu: sa1100
mach: sa1100
mem_bank: map=I, type=RW, addr=0x80000000, size=0x40000000
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00400000, file=./initrd.img
mem_bank: map=M, type=RW, addr=0xc0c00000, size=0x01400000
mem_bank: map=I, type=RW, addr=0xe0000000, size=0x08000000
#0xe0000000 128M cache flush memory bank 





回頁首


三.小結

本文講解了SkyEye硬件模擬平臺的硬件配置選項,以及如何安裝使用SkyEye。如果讀者能夠熟練掌握SkyEye的使用,則會提高開發、調試操作系統等的進度,特別是對操作系統、驅動程序如何與嵌入式硬件系統進行交互有更深刻的瞭解。



參考資料



關於作者

陳渝, 清華大學,通過 [email protected] 可以和他聯繫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章