PowerPC平臺Linux的移植(三)
如果你想使用ram disk,那么用以下命令進行編譯:make zImage.initrd否則用以下命令:make以前編譯2.4內核的時候之前都要用make dep 命令保證編譯內核時所有的依賴,例如頭文件,都存在。不過對于2.6來講已經不需要了,直接一個make命令把make dep和make zImage的事請就做了。如果你之前編譯過,想重新編譯的話,最好用一下make clean,它能夠去除所有的object文件以及一些別的遺留文件。當然你也可以用make mrproper,這個比make clean清理得更加徹底,不過小心你的.config文件了,它會一起刪除的,所以還是首先備份一下,或者就用make clean吧。現在我們是第一次編譯,所以還不用考慮這些。為了保險,我們使用第二組指令來進行編譯。時間蠻長的,如果一切順利,編譯出來的內核會放在 arch/ppc/boot/images/目錄下,可能叫zImage.elf或者zImage.initrd.elf,用目前這種編譯方式編譯的是 zImage.elf。理論上講,完畢之后就可以把這個執行文件拷貝到EDK工程目錄下,并進入創建ACE文件的步驟了。但是,在上面的講解中,我們并沒有使用內核模塊,而在進一步應用中,很可能有一些內核選項是要以模塊形式編譯進去的,此時,接下來的工作就是建立及安裝模塊,用命令make modulesmake modules_install來編譯,成功后,系統會在/lib/modules目錄下生成一個按你所編譯內核的版本號命名的子目錄,里面存放著新內核的所有可加載模塊。將來要使用時用insmod命令進行加載即可。目前的的Linux 2.6x版本內核是自動解決依賴關系,所以暫時不用關注depmod了。CF的配置CF卡分區其實不分區也可以,但是我們在這里分區的原因是最大限度模擬正常的Linux,想想,一般的人安裝Linux系統的時候是怎么分區的?/根分區,swap分區以及/boot分區。ok,我們在這里也給我們的CF卡分三個區。暫時先以我這里的8G CF卡舉例子。將CF卡插到系統上,使用命令mount | column -t看看CF卡對應的mount目錄的dev名稱是是什么。我計算機上的信息如圖所示:Screenshot-coloum@windstorm: ~.png可以看出,CF卡在我這里是/dev/sdc。然后我們使用fdisk將其分區:fdisk /dev/sdc具體的分區過程我就不講了,如果你覺得不習慣fdisk的命令行操作形式,也可以使用gparted這個圖形化分區工具,總之,最后要分成的效果是:1. ParTITIon 1 - Type = FAT16 (6) - Size = 32MB (只需要能夠放得下你的system.ace文件即可)2. ParTITIon 2 - Type = Linux Swap (82) - Size = 256MB (這個其實看情況了,不分swap也可以)3. Partition 3 - Type = Linux (83) - Size = ??? (CF還剩多少就分多少,用來存放根文件系統)可以看出,上面三個區分別對應常說的/boot,/swap和/三個分區。創建CF卡文件系統Xilinx的SystemACE控制器比較特殊,并不是說隨便一個CF卡插上去就可以使用的,必須專門為CF卡創建特定文件系統。能夠完成這個任務的是mkdosfs這個軟件。用下面的命令對CF卡進行操作即可:mkdosfs -s 8 -F 16 -R 1 F:-s后面跟的數字表示每簇扇區數目,一般是2的整數次方。下面是FAT16文件格式通常容量對應的每簇扇區數目。16–128MB 4128–256MB 8256–512MB 16512–1024MB 321024–2048MB 64不過我發現這個-s后面的數字其實可以大一些,比如我用64,除了在執行命令的時候會出現一個warningWARNING: Not enough clusters for a 16 bit FAT! The filesystem will bemisinterpreted as having a 12 bit FAT without mount option “fat=16″.其它沒有什么問題。-F表示FAT的大小,這里是FAT16,-R的值這里不要改動,保留扇區的數目,老問題了,有興趣的可以去網上搜索。最后一個F:是在 windows下的CF卡卷標,根據你自己的系統來調整它。如果是Linux環境,將這個卷表換成是/dev/fdx這種形式。具體設備名自行查詢。下載內核文件OK,到這里,我假設你已經編譯成功,產生了你所需要的zImage文件,好,現在該怎么用這個文件呢?有三種方式:1 把該文件和硬件bit流合成ace文件,放到flash上面自行加載2 通過自己編寫的bootloader將flash上面的elf文件加載到內部ram中3 通過xmd的dow命令來下載elf文件第二種方法我還沒有研究,嘿嘿,所以就先不介紹了,要是哪位朋友對bootloader比較熟的,懇請指教一下~~好了,首先詳細介紹一下很多人使用的ace方式。創建ACE我們可以通過XMD工具來進行ACE文件的創建,命令如下:xmd -tcl genace.tcl -opt genace.optgenace.tcl是存在于xps安裝目錄下的data/xmd目錄下,而genace.opt需要自己創建,內容如下:-jprog-board user-target ppc_hw-hw implementation/download.bit-elf zImage.elf-configdevice devicenr 1 idcode 0×1127e093 irlength 14 partname xc2vp30-debugdevice devicenr 1 cpunr 1-ace system.ace-hw和-elf這兩行是需要你根據自己的情況修改的,唯一需要注意的是,如果你的開發環境是Linux系統,則-hw implementation/download.bit這句要改為-hw ./implementation/download.bit在system.ace文件被拷貝到CF卡上之后,修改一下板子上的跳線,讓其成為從JTAG啟動,就可以始終從CF卡上加載程序。對于非XUP的,官方的板子來說,比如ML-403開發板,步驟更加簡單,genace.opt的內容如下:-jprog-board ml403-hw implementation/download.bit-elf TestApp_memory/executable.elf-ace system.ace你只需要告訴EDK板子是ml403就可以了,很多參數都不用自己配置。具體哪些開發板是被xmd直接支持的,可以參考genace.tcl文件。有些朋友會發現,按照上面的步驟操作,可能會出現以下錯誤提示:Error: Executable TestApp_Memory/executable.elf does not contain start address..我在遇到這個錯誤之后查了一些資料,并按working harddfen照資料所述的修改辦法來修改,都沒有作用,最后是在朋友的安裝了sp的edk環境中將ACE文件生成成功的。因此,我懷疑可能是edk無 sp的9.1版本的bug。如果你和我一樣頭疼于sp的下載,還在使用沒有sp的環境……恭喜你,或者想辦法去下載sp,或者就找安裝了sp的機器來生成吧。其實基于windows的sp比較好找,主要是基于Linux的sp太難下了……默哀ing,如果有哪位Linuxer知道有別的方法能夠修正這個錯誤,煩請告知,謝謝了。我比較懶,還比較性急,不喜歡看著bit+elf這么大的文件通過9600速度的串口下載到板子上……所以直接使用了最簡單的第三種方法,打開xmd,connect ppc hw,dow zImage.elf, con,然后就OK了。終端顯示的信息如下:loaded at: 00400000 0066D19Cboard data at: 0066B120 0066B19Crelocated to: 00404060 004040DCzimage at: 00404ED5 0066A3DDavail ram: 0066E000 08000000Linux/PPC load: console=ttyS0,9600 root=/dev/xsysace/disc0/part3 rwUncompressing Linux…done.Now booting the kernel……..(以下信息省略)這就表示基本內核建立成功了,我們可以接下去創建root文件系統了。呵呵,我認為最艱難的一步已經被你搞定了,恭喜。如果遇到錯誤……很多朋友都會遇到下面這種錯誤inflate returned FFFFFFFB, error is caused by the size of the uncompressed image這表示你的內核解壓縮之后大小超過了你的存儲空間,通常這種情況出現在你的存儲空間定位于bram上。怎么解決呢?很簡單,修改ld,把程序定位到ddr上不就行了~~還有的朋友會遇到下面這種錯誤:Linux/PPC load: console=ttyS0,9600Uncompressing Linux…done.Now booting the kernelloaded at: 00400000 005331A0board data at: 40000000 4000007Crelocated to: 00404084 00404100zimage at: 00404EB9 00530A50avail ram: 00534000 00000000Linux/PPC load: console=ttyS0,9600Uncompressing Linux…oops… out of memorypause這個時候檢查一下arch/ppc/boot/simple/embed_config.c 中vertex的支持代碼是否已經被編譯進去(搜索ML403) 如果沒有配置的話,板級信息就不會正確建立 。轉載:fcni_cn的百度空間
本文引用地址:http://www.104case.com/article/201710/365684.htm
評論