PowerPC平臺Linux的移植(三)
如果你想使用ram disk,那么用以下命令進行編譯:make zImage.initrd否則用以下命令:make以前編譯2.4內核的時候之前都要用make dep 命令保證編譯內核時所有的依賴,例如頭文件,都存在。不過對于2.6來講已經(jīng)不需要了,直接一個make命令把make dep和make zImage的事請就做了。如果你之前編譯過,想重新編譯的話,最好用一下make clean,它能夠去除所有的object文件以及一些別的遺留文件。當然你也可以用make mrproper,這個比make clean清理得更加徹底,不過小心你的.config文件了,它會一起刪除的,所以還是首先備份一下,或者就用make clean吧?,F(xiàn)在我們是第一次編譯,所以還不用考慮這些。為了保險,我們使用第二組指令來進行編譯。時間蠻長的,如果一切順利,編譯出來的內核會放在 arch/ppc/boot/images/目錄下,可能叫zImage.elf或者zImage.initrd.elf,用目前這種編譯方式編譯的是 zImage.elf。理論上講,完畢之后就可以把這個執(zhí)行文件拷貝到EDK工程目錄下,并進入創(chuàng)建ACE文件的步驟了。但是,在上面的講解中,我們并沒有使用內核模塊,而在進一步應用中,很可能有一些內核選項是要以模塊形式編譯進去的,此時,接下來的工作就是建立及安裝模塊,用命令make modulesmake modules_install來編譯,成功后,系統(tǒng)會在/lib/modules目錄下生成一個按你所編譯內核的版本號命名的子目錄,里面存放著新內核的所有可加載模塊。將來要使用時用insmod命令進行加載即可。目前的的Linux 2.6x版本內核是自動解決依賴關系,所以暫時不用關注depmod了。CF的配置CF卡分區(qū)其實不分區(qū)也可以,但是我們在這里分區(qū)的原因是最大限度模擬正常的Linux,想想,一般的人安裝Linux系統(tǒng)的時候是怎么分區(qū)的?/根分區(qū),swap分區(qū)以及/boot分區(qū)。ok,我們在這里也給我們的CF卡分三個區(qū)。暫時先以我這里的8G CF卡舉例子。將CF卡插到系統(tǒng)上,使用命令mount | column -t看看CF卡對應的mount目錄的dev名稱是是什么。我計算機上的信息如圖所示:Screenshot-coloum@windstorm: ~.png可以看出,CF卡在我這里是/dev/sdc。然后我們使用fdisk將其分區(qū):fdisk /dev/sdc具體的分區(qū)過程我就不講了,如果你覺得不習慣fdisk的命令行操作形式,也可以使用gparted這個圖形化分區(qū)工具,總之,最后要分成的效果是: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還剩多少就分多少,用來存放根文件系統(tǒng))可以看出,上面三個區(qū)分別對應常說的/boot,/swap和/三個分區(qū)。創(chuàng)建CF卡文件系統(tǒng)Xilinx的SystemACE控制器比較特殊,并不是說隨便一個CF卡插上去就可以使用的,必須專門為CF卡創(chuàng)建特定文件系統(tǒng)。能夠完成這個任務的是mkdosfs這個軟件。用下面的命令對CF卡進行操作即可:mkdosfs -s 8 -F 16 -R 1 F:-s后面跟的數(shù)字表示每簇扇區(qū)數(shù)目,一般是2的整數(shù)次方。下面是FAT16文件格式通常容量對應的每簇扇區(qū)數(shù)目。16–128MB 4128–256MB 8256–512MB 16512–1024MB 321024–2048MB 64不過我發(fā)現(xiàn)這個-s后面的數(shù)字其實可以大一些,比如我用64,除了在執(zhí)行命令的時候會出現(xiàn)一個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的值這里不要改動,保留扇區(qū)的數(shù)目,老問題了,有興趣的可以去網(wǎng)上搜索。最后一個F:是在 windows下的CF卡卷標,根據(jù)你自己的系統(tǒng)來調整它。如果是Linux環(huán)境,將這個卷表換成是/dev/fdx這種形式。具體設備名自行查詢。下載內核文件OK,到這里,我假設你已經(jīng)編譯成功,產(chǎn)生了你所需要的zImage文件,好,現(xiàn)在該怎么用這個文件呢?有三種方式:1 把該文件和硬件bit流合成ace文件,放到flash上面自行加載2 通過自己編寫的bootloader將flash上面的elf文件加載到內部ram中3 通過xmd的dow命令來下載elf文件第二種方法我還沒有研究,嘿嘿,所以就先不介紹了,要是哪位朋友對bootloader比較熟的,懇請指教一下~~好了,首先詳細介紹一下很多人使用的ace方式。創(chuàng)建ACE我們可以通過XMD工具來進行ACE文件的創(chuàng)建,命令如下:xmd -tcl genace.tcl -opt genace.optgenace.tcl是存在于xps安裝目錄下的data/xmd目錄下,而genace.opt需要自己創(chuàng)建,內容如下:-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這兩行是需要你根據(jù)自己的情況修改的,唯一需要注意的是,如果你的開發(fā)環(huán)境是Linux系統(tǒng),則-hw implementation/download.bit這句要改為-hw ./implementation/download.bit在system.ace文件被拷貝到CF卡上之后,修改一下板子上的跳線,讓其成為從JTAG啟動,就可以始終從CF卡上加載程序。對于非XUP的,官方的板子來說,比如ML-403開發(fā)板,步驟更加簡單,genace.opt的內容如下:-jprog-board ml403-hw implementation/download.bit-elf TestApp_memory/executable.elf-ace system.ace你只需要告訴EDK板子是ml403就可以了,很多參數(shù)都不用自己配置。具體哪些開發(fā)板是被xmd直接支持的,可以參考genace.tcl文件。有些朋友會發(fā)現(xiàn),按照上面的步驟操作,可能會出現(xiàn)以下錯誤提示:Error: Executable TestApp_Memory/executable.elf does not contain start address..我在遇到這個錯誤之后查了一些資料,并按working harddfen照資料所述的修改辦法來修改,都沒有作用,最后是在朋友的安裝了sp的edk環(huán)境中將ACE文件生成成功的。因此,我懷疑可能是edk無 sp的9.1版本的bug。如果你和我一樣頭疼于sp的下載,還在使用沒有sp的環(huán)境……恭喜你,或者想辦法去下載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……..(以下信息省略)這就表示基本內核建立成功了,我們可以接下去創(chuàng)建root文件系統(tǒng)了。呵呵,我認為最艱難的一步已經(jīng)被你搞定了,恭喜。如果遇到錯誤……很多朋友都會遇到下面這種錯誤inflate returned FFFFFFFB, error is caused by the size of the uncompressed image這表示你的內核解壓縮之后大小超過了你的存儲空間,通常這種情況出現(xiàn)在你的存儲空間定位于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的支持代碼是否已經(jīng)被編譯進去(搜索ML403) 如果沒有配置的話,板級信息就不會正確建立 。轉載:fcni_cn的百度空間
本文引用地址:http://2s4d.com/article/201710/365684.htm
評論