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