dfg fggg fdggg dfgfg fdgdf
SkyEye硬件模擬平台,第二部分: 安裝與使用 一. 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/ttySxfd_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硬件模擬邏輯結構圖 SkyEye目標模擬模塊模擬的硬件邏輯結構圖如圖 0-1所示。 回頁首二. 安裝使用SkyEye1. 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: arm7tdmimach: at91mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./boot.rommem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000mem_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 simcpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0 mach info: name at91, mach_init addr 0x813ebc0SKYEYE: use arm7100 mmu opsLoaded ROM ./boot.romConnected to the simulator.(SkyEye)loadLoading section .init, size 0xa000 vma 0x1000000Loading section .text, size 0xc5cb0 vma 0x100a000Loading section .data, size 0x8320 vma 0x10d0000Start address 0x1000000Transfer rate: 7077504 bits/sec.(SkyEye)runStarting program: /usr/src/uClinux-dist/linux-2.4.x/linux Linux version 2.4.19-uc1 (root@hpclab.cs.tsinghua.edu.cn) (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 2004Processor: Atmel AT91M40xxx revision 0Architecture: 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: arm7tdmimach: at91mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000FOR AT91 (1) special for μClinux-------------------------------------------#skyeye config file samplecpu: arm7tdmimach: at91mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./boot.rommem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000mem_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.ddnet: state=on, mac=0:5:3:2:1:f, ethmod=tuntap, hostip=192.168.2.1FOR ep7312 (1) special for linux-------------------------------------------cpu: arm720tmach: ep7312mem_bank: map=I, type=RW, addr=0x80000000, size=0x00010000mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00200000mem_bank: map=M, type=RW, addr=0xc0200000, size=0x00200000, file=./initrd.imgmem_bank: map=M, type=RW, addr=0xc0400000, size=0x00c00000FOR StrongArm SA1100 (1) speciall for linux-------------------------------------------cpu: sa1100mach: sa1100mem_bank: map=I, type=RW, addr=0x80000000, size=0x40000000mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00400000, file=./initrd.imgmem_bank: map=M, type=RW, addr=0xc0c00000, size=0x01400000mem_bank: map=I, type=RW, addr=0xe0000000, size=0x08000000#0xe0000000 128M cache flush memory bank 回頁首三.小結本文講解了SkyEye硬件模擬平台的硬件配置選項,以及如何安裝使用SkyEye。如果讀者能夠熟練掌握SkyEye的使用,則會提高開發、調試操作系統等的進度,特別是對操作系統、驅動程序如何與嵌入式硬件系統進行交互有更深刻的瞭解。 .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!
連著十多天的大雨,宜蘭三星鄉全數蔥田都泡在水中。三星青蔥產銷班長廖文彬說,有的青蔥外表看不出異狀,但埋在稻草下的蔥白已開始腐爛,「拔到一半就斷了,沒辦法採收」。
留言列表