《嵌入式操作系統(tǒng)》由會員分享,可在線閱讀,更多相關《嵌入式操作系統(tǒng)(75頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、,,,,,,,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,*,嵌入式操作系統(tǒng),—SkyEye 簡介,李春杰,,,主要內(nèi)容,,SkyEye簡介,,SkyEye模擬硬件介紹,,SkyEye的安裝和使用,,安裝,,運行hello,,編譯并運行,uCLinux,,,,參考教材,,源碼開放的,,嵌入式系統(tǒng)軟件分析與實踐,,,——基于SkyEye和ARM開發(fā)平臺,,北京航空航天大學出版社 陳渝 李明 等編著,,SkyEye簡介1,SkyEye是一個,開源,軟件項目,中文名字是“天目”。,,SkyEye的起源和發(fā)展,,陳渝:做一個用軟件實現(xiàn)的,
2、嵌入式開發(fā)硬件模擬器,,可以在模擬器上運行各種操作系統(tǒng),這樣就可以在沒有開發(fā)板的情況下學習和研究操作系統(tǒng),,,Skyeye的網(wǎng)站:,http://,,SkyEye簡介2,SkyEye的,目標,:在通用的Linux和Windows平臺上實現(xiàn)一個純軟件集成開發(fā)環(huán)境,模擬多種主流的嵌入式計算機系統(tǒng)。,,目前可在SkyEye上運行的系統(tǒng)有:,,1)多種嵌入式操作系統(tǒng),如ARM Linux、μClinux、μC/OS-II等,,2)各種系統(tǒng)軟件,如嵌入 式TCP/IP協(xié)議棧-lwIP,圖形子系統(tǒng)-MiniGUI等,,可對上述軟件系統(tǒng)進行源碼級的分析、調(diào)試和測試。,,,SkyEye模擬硬件介紹,目前,S
3、kyEye模擬了大量的硬件,包括CPU內(nèi)核、存儲器、存儲器管理單元、緩存單元、串口、網(wǎng)絡芯片、時鐘等,,CPU和開發(fā)板系列:,,目前SkyEye可以模擬的CPU主要是基于ARM內(nèi)核的CPU,包括ARM7TDMI,ARM720T, ARM9TDMI,ARM9xx,ARM10xx,StrongARM,XScale等,,,SkyEye模擬硬件介紹,目前SkyEye模擬的開發(fā)板包括,,基于Atmel 91X40/AT91RM92 CPU的開發(fā)板,基于Crirus Logic ep7312的開發(fā)板、基于StrongARM CPU的ADSBITSY開發(fā)板,基于XScale PXA250 CPU的L
4、UBBOCK開發(fā)板、基于SAMSUNG S3C4510B/S3C44B0 CPU的開發(fā)板、基于SHARP LH7A400 CPU的開發(fā)板、基于Philip LPC22xx CPU的開發(fā)板等。,,主要模擬了對應各個開發(fā)板的串口、時鐘、RAM、ROM、LCD、網(wǎng)絡芯片等硬件外設,,,,,SkyEye模擬硬件介紹,存儲器管理單元和緩存單元,,MMU,Memory Management Unit,存儲器管理單元,是用來管理虛擬內(nèi)存系統(tǒng)的硬件。,,MMU的兩個主要功能是:1)將虛地址轉換成物理地址;2)控制存儲器的存取權限。,,MMU關掉時,虛地址直接輸出到物理地址總線,,SkyEye模擬硬
5、件介紹,CACHE,緩存單元,主要用于緩存內(nèi)存中的數(shù)據(jù),其讀寫速度遠快于內(nèi)存的讀寫速度,所以可以提高CPU的內(nèi)存數(shù)據(jù)的訪問效率。,,write/read buffer硬件單元,write/read buffer硬件單元的作用與CACHE的作用類似。,,,SkyEye模擬硬件介紹,MMU、CACHE、write/read buffer一般是高性能CPU的重要組成部分,且不同類型CPU的MMU、CACHE、write/read buffer的邏輯行為也有一定的差異。為了支持模擬多種類型CPU的MMU/CACHE,SkyEye包含了一個通用的MMU/CACHE模擬實現(xiàn)。通過對一些參數(shù)的調(diào)整可以支持模
6、擬多種類型的MMU/CACHE物理結構和邏輯行為。,,,SkyEye模擬硬件介紹,網(wǎng)絡芯片,,目前SkyEye模擬了網(wǎng)絡芯片8019AS,,,其特點是:NE2000兼容,內(nèi)建16KRAM緩沖區(qū),10MB傳輸速率。,,雖然目前模擬的開發(fā)板上不一定有網(wǎng)絡芯片8019AS,但可以在模擬的開發(fā)板上加上網(wǎng)絡芯片8019AS 的模擬。,,SkyEye的安裝,,Linux操作系統(tǒng),,Windows+MingW或cygwin,,有兩種安裝方法,,下載源代碼,編譯并安裝,,直接安裝二進制代碼,,下載源代碼,編譯并安裝,最新版本情況,,下載,,為編譯的skyeye準備編譯環(huán)境,,,,解壓縮,,,,,,,編譯并安裝
7、,,簡單編譯,,./con?gure CC=gcc-3.4 //利用gcc-3.4進行編譯也可以選用其他合適的版本,,Make,,,,,,sudo make install,,,,判斷安裝是否成功,,下載測試集,,最新的skyeye-testsuits,版本為,,,解壓縮,,,使用skyeye模擬某個板子運行某個Linux,,,進入到 linux 目錄,修改符號連接 skyeye指向編譯好的skyeye,,rm skyeye,,ln -s ../../skyeye-1.2.8 rc1/skyeye skyeye,,運行如下命令:,,cd,,../../skyeye -c skyeye.con
8、f -e vmlinux,,如成功則表示安裝成功,,在 Linux 的根文件系統(tǒng)中添加 hello,,準備交叉編譯環(huán)境,,下載的交叉編譯器到你的工作目錄 $WDIR,,,在工作目錄 $WDIR 中解壓縮($WDIR 也可以是根目錄),,tar jvxf,,運行hello,編寫簡單的 hello.c,并編譯,,,,,,,,,,,,,,,使用 3.4.1 版本的 arm-linux 交叉編譯器,靜態(tài)編譯得到 elf格式的可執(zhí)行文件:,,hello.c,,看是否安裝成功,,,將 hello 復制到 linux 的根文件系統(tǒng)映像 initrd.img 中,,掛載根文件系統(tǒng)映像,,mkdir root,
9、,sudo mount -o loop initrd.img root,,將 hello 拷貝到根文件系統(tǒng)中,,sudo cp hello root/bin,,卸載根文件系統(tǒng)映像,,sudo umount root,,,使用 skyeye 啟動 linux,運行 hello,,skyeye -c skyeye.conf -e vmlinux,,進入 armlinux 之后,進入 bin 目錄,運行 hello,,,,,直接安裝二進制代碼,,下載編譯好的SkyEye的二進制包,,到上找到最合適的版本,,例如二進制包在,這里,是,,在合適的目錄下解壓縮,,/usr/local/ 或者/opt/,,
10、bz2格式使用“tar -xjvf 壓縮文件名,,,skyeye在解壓縮得到的目錄中的bin子目錄下,,,將skyeye的路徑添加到PATH,,修改~/.bashrc文件:添加 export PATH=$PATH:所選目錄/skyeye-insight/bin(如下圖),,,,,,為使修改后的.bashrc有效,必須先退出控制臺,然后重新啟動控制臺,,運行skyeye,得到進入skyeye的畫面,如圖:,,,,,,,編譯并運行,uCLinux,,為uC,Linux安裝交叉編譯環(huán)境并配置uCLinux,,編譯生成,uC,Linux,和包含應用程序的文件系統(tǒng),,用,skyeye,運行和調(diào)試,uC,
11、Linux,內(nèi)核,,,1、,安裝交叉編譯環(huán)境,為uC,Linux的開發(fā)提供相應的交叉編譯工具,,如:,arm-elf-tools-20030314.sh,,安裝,,在,root,權限下運行,,sh ./arm-elf-tools-20030314.sh,,檢查一下,,對,arm-elf,運用,shell,的,tab,功能可以看到一系列,arm-elf,打頭的程序,如,,binutils,系列、,gcc,、,gdb,等等,,也可以使用命令:arm-elf-gcc -v,,,,,,,測試arm-elf-gcc,,,編譯,,arm-elf-gcc -elf2flt -o hello hello.c,
12、,得到的輸出文件,,hello和hello.gdb,,檢查hello的格式,,file hello,,如何運行hello???,,,,,-Wl,-elf2flt選項讓鏈接器將elf格式轉換為flt格式,,,最新實驗表明,直接使用-elf2flt即可,源文件,生成的文件,,運行,hello,hello必須在target環(huán)境上,無法在host上,,,,,如何準備target的運行環(huán)境,,skyeye====模擬器,,uCLinux====操作系統(tǒng)??,,文件系統(tǒng)??,,……??,,,生成,uCLinux,操作系統(tǒng),兩種方案,,使用,skyeye,提供的二進制包,,自己動手編譯配置,uCLinux
13、,,,編譯配置uClinux,到uClinux,網(wǎng)站的,發(fā)行頁,上下載,,本課例子為,發(fā)行版,uClinux-dist-20051110,,使用”tar -xzvf”解壓縮,得到uClinux-dist目錄,,在uClinux-dist目錄下,,第一步:配置uClinux命令:make config在vendor/product選賢中選擇GDB/ARMulatorKernel版本選擇2.4.x其他選項不變(使用缺省選項),,,第二步:編譯生成uClinux,和文件系統(tǒng)命令:make dep; make,,編譯成功?,,uClinux-dist目錄里將出現(xiàn)一個images目錄,,在中出
14、現(xiàn)了linux、system.map,,image.bin:,,包含Linux內(nèi)核映像和romfs文件系統(tǒng)映像,,可以燒寫到flash中,romfs.img:romfs文件系統(tǒng)映像,linux:linux內(nèi)核文件,system.map:,內(nèi)核符號表,,用skyeye運行,ucLinux,制作skyeye的硬件配置文件,第一步,制作skyeye的硬件配置文件,,vi skyeye.conf,,,,,,,第二步,提供上面所需的boot.rom,,命令:ln -s images/romfs.img boot.rom,將romfs燒寫到flash中,,,第三步,在skyeye下運行,uCLinux
15、,,命令:sudo skyeye,,進入skyeye后,,,命令1:target sim,,命令2:load,,命令3:run,,進入uCLinux,,,,,,直接使用uCLinux的二進制包,,下載skyeye的二進制包,,,,,,,,使用“tar -xjvf” 解壓縮,,,使用,uCLinux,作為運行操作系統(tǒng),,,,,,,使用skyeye運行,μcLinux,,skyeye linux,,target sim,,load,,run,,,將hello拷貝到,uCLinux,的,romfs,文件系統(tǒng)中,將boot.rom中的內(nèi)容在host中解開,方法如下:,,mkdir romfs,,mkd
16、ir /mnt/tmp,,mount -o loop boot.rom /mnt/tmp,,cp -r /mnt/tmp/* romfs,,將hello拷貝到romfs中的bin目錄下,,重新生成boot.rom映像,,genromfs -f boot.rom –d romfs/,,,運行hello,,在模擬器上運行,,啟動模擬器、裝載操作系統(tǒng)、裝載文件系統(tǒng),,skyeye,,file linux,,target sim,,load,,run,,進入bin目錄運行hello,,,,,,ARMboot 的運行,,ARMboot屬于自由軟件,,http:///,是針對ARM CPU編寫的通用Boo
17、t Loader,其作用是,,對CPU以及主板進行初始化,,加載操作系統(tǒng)或者其他boot image,,支持目前市面上的多種ARM板,也可以很容易的移植到新的開發(fā)板上,,目前ARMboot已經(jīng)與PPCBoot合并,?u-boot,,支持PPC、ARM等多種CPU,,,下載并安裝ARMboot,,Armboot源碼公開,可以在, –zxf,,README,,,,為了使用arm-elf-打頭的交叉編譯命令,需要修改中的CROSS_COMPILE變量的值arm-linux-為arm-elf-,,或者安裝arm-linux-交叉編譯包,,,安裝arm-linux-交叉編譯包,,下載,,mkdir –
18、p /usr/local/arm,,cd /usr/local/arm,,tar jxf cross-2.95.3.tar.bz2,,這就有了一個arm-linux-交叉編譯環(huán)境了,,修改.bashrc,添加,,,,,查看是否安裝成功?,,退出并重新進入控制臺,,對“arm-linux-”使用tab鍵,可以看到所有“arm-linux-”打頭的工具,,使用命令“arm-linux-gcc -v”查看編譯器信息,,,,,,修改armboot,,include/configs/conifg_ep7312.h,,,配置armboot的啟動方式,,,配置armboot,支持ep7312開發(fā)板,,m
19、ake ep7312_config,,Build,,sudo make all,,,,,各種格式的,,目標文件,,,生成的目標文件有三個:,,armboot:ELF格式,,armboot.bin:二進制映像文件格式,,armboot.srec:Motolola的一種格式,,此外在根目錄的tftpboot目錄下也有一個armboot.bin備份,,,配置skyeye,并運行armboot,首先,新建一個目錄代表ep7312的主板,,mkdir ep7312forArmboot,,將剛才編譯成功的armboot.bin拷貝到這個目錄下,,skyeye支持raw binary和ELF格式,這里我們用
20、raw binary的格式,,編輯skyeye.conf,,skyeye.conf如下(下頁),,此時,ep7312forArmboot主板就配置好了,,skyeye.conf,,#skyeye config file for armboot cpu: arm720t mach: ep7312 mem_bank: map=I, type=RW, addr=0x80000000, size=0x00010000 #skyeye for armboot flash 16M bank 1 mem_bank: map=M, type=RW, addr=0x00000000, size=0
21、x01000000, file=./armboot.bin,boot=yes #skyeye for armboot sdram 16M bank 1 mem_bank: map=M, type=RW, addr=0xc0000000, size=0x01000000,,log: logon=0, logfile=/tmp/c_2.log, start=0, end=10000,,,運行skyeye進入ARMboot命令界面,,ARMboot的命令,,,,,U-boot在,skyeye中運行,下載源碼,,解壓縮,,tar jvxf,,編譯 u-boot使用交叉編譯器:arm-linux-
22、tools-20061213.tar.gz (gcc 版本為 3.4.4),,make ep7312 con?g,,make all,,,,,在skyeye中運行u-boot,,可以根據(jù)需要修改,在include/configs/ep7312.h中,,U-boot的缺省啟動方式,,,,,修改結束后,配置并編譯,make ep7312_config,,sudo make all,,,編寫skyeye.conf,,#skyeye?config?file?for?ubootcpu:?arm720tmach:?ep7312?mem_bank:?map=I,?type=RW,?addr=0x800
23、00000,?size=0x00010000#skyeye?for?uboot?flash?16M?bank?1mem_bank:?map=M,?type=RW,?addr=0x00000000,?size=0x01000000,?file=./u-boot.bin,boot=yes#skyeye?for?uboot?sdram?16m?bank?1mem_bank:?map=M,?type=RW,?addr=0xc0000000,?size=0x01000000,,注意這里的內(nèi)存的地址和容量的分配都是根據(jù)uboot里面的ep7312的配置文件調(diào)整的。這樣也可以是我們對uboot的代碼修改做到最小。,,,,運行Skyeye,,由于u-boot限時自動boot,所以在run之后要立刻使用“回車”鍵阻止autoboot,,,進入u-boot的界面,,,,謝謝聽講,,