PowerPC平臺(tái)Linux的移植(一)
PowerPC是早期Motorola和IBM聯(lián)合為Apple的MAC機(jī)開發(fā)的CPU芯片,商標(biāo)權(quán)同時(shí)屬于IBM和Motorola,并成為他們的主導(dǎo)成品.IBM主要的PowerPC產(chǎn)品有PowerPC604s(深藍(lán)內(nèi)部的CPU), PowerPC750,PowerPCG3(1.1GHz).Motorola主要有MC和MPC系列.盡管他們產(chǎn)品不一樣,但都采用PowerPC的內(nèi)核.這些產(chǎn)品大都用在嵌入式系統(tǒng)中.我們這里要介紹的,主要是針對(duì)IBM在xilinx平臺(tái)上推出的PowerPC嵌入式內(nèi)核。本文所寫的內(nèi)容,基本上都是用于XUP大學(xué)計(jì)劃開發(fā)板的,但是其中很多步驟都是通用的,你完全可以在Xilinx ML-403開發(fā)板或者其他相應(yīng)板子上參考這些步驟,它們之間最大的區(qū)別就是創(chuàng)建SystemACE時(shí)的命令行不同,在相應(yīng)的部分會(huì)具體講解。應(yīng)該說不管什么平臺(tái),整個(gè)流程都遵從于:Kernel preparaTIon —》 isntall BSP —》 Build hardware platform —》 Memory test —》 Build kernel image —》 Download本文假設(shè)讀者對(duì)linux環(huán)境下ISE,EDK等工具的操作已經(jīng)熟悉,并對(duì)在XUP開發(fā)板上定制基本硬件系統(tǒng)已經(jīng)熟悉,因此不再詳細(xì)涉及這方面的問題。本文作者直接使用linux作為開發(fā)環(huán)境,因此文章中也不會(huì)涉及交叉編譯環(huán)境的創(chuàng)建,如果你是windows用戶,請(qǐng)自行參考網(wǎng)上有關(guān)cygwin的文章;如果你所使用的操作系統(tǒng)是linux,但對(duì)開發(fā)環(huán)境的建立不熟悉,可以參考我之前寫的linux下eda工具安裝這篇文章;如果你對(duì)硬件系統(tǒng)的定制還不算熟悉,請(qǐng)將問題針對(duì)到某一個(gè)模塊,然后留言詢問。整個(gè)文章比較長,從目前已經(jīng)寫了的內(nèi)容來看,可能要分三個(gè)部分發(fā)布。這里是第一部分。基本系統(tǒng)信息軟件:ISE和EDK都是9.1,沒有sp,操作系統(tǒng)是ubuntu 7.04;硬件:XUP開發(fā)板,usb下載線;基本系統(tǒng)組成:300MHz PPCopb_sysaceopb_ethernet (無DMA)DDR memory controlleropb_uart_16550plb_bram_if_cntrl(bram選擇最大容量)所有部件都要有中斷支持。按照上面的基本要求把系統(tǒng)構(gòu)建起來,OS先選擇standalone,跑一個(gè)基本程序看一看。只有確認(rèn)基本系統(tǒng)正常之后,才可以知道以后移植系統(tǒng)時(shí)遇到的毛病是否是硬件原因。在EDK中創(chuàng)建BSP首先,打開軟件平臺(tái)設(shè)置的選項(xiàng),按照下列步驟執(zhí)行:1. 將PPC_405_0的OS設(shè)置為linux_mvl31,我這里的版本是1.01.c2. 進(jìn)入Library/OS選項(xiàng),其中,MEM_SIZE設(shè)置成你所用平臺(tái)上內(nèi)存的容量,比如是256MB就設(shè)置成0&TImes;10000000,依此類推。 PLB_CLOCK_FREQ_HZ是你PLB總線的頻率,XUP是100MHz,也就是100000000,其他類型開發(fā)板自行修改。 TARGET_DIR是你用于存放BSP的路徑,注意,路徑千萬不能有空格。3. 添加硬件,在connected_periphs里面,不過一般點(diǎn)進(jìn)去之后就都已經(jīng)幫你自動(dòng)添加好了。4. 執(zhí)行l(wèi)ibgen。如果一切順利,就可以生成相應(yīng)的bsp了。如果在這個(gè)過程中出現(xiàn)了什么問題,都可以去EDK安裝目錄下的sw/ThirdParty/bsp/linux_mvl31_v1_00_a/data/目錄去看看相應(yīng)的tcl文件,它們是用來實(shí)際執(zhí)行BSP操作的命令。到這里,你就已經(jīng)有了可工作的bit流文件以及為Linux準(zhǔn)備的BSP文件了。但有趣的是,我發(fā)現(xiàn)BSP的作用很小,所有edk9.1生成的文件,你所需要的可能就只有xparameters.h 和 xparameters_ml403.h真正有用,其它文件作用很少,如果你下載的Linux源代碼是montavista的東西,甚至連這兩個(gè)文件都不用了。當(dāng)然,如果使用的電路板是自定制的,像xparameters_ml403.h就會(huì)有不同的macro定義,因此這兩個(gè)是一定要覆蓋默認(rèn)的內(nèi)核目錄下的同名文件的。出于保險(xiǎn),最后還是使用上這個(gè)BSP就行了。創(chuàng)建用于ppc的交叉編譯環(huán)境通常,程序是在一臺(tái)計(jì)算機(jī)上編譯,然后再分布到將要使用的其他計(jì)算機(jī)上。當(dāng)主機(jī)系統(tǒng)(運(yùn)行編譯器的系統(tǒng))和目標(biāo)系統(tǒng)(產(chǎn)生的程序?qū)⒃谄渖线\(yùn)行的系統(tǒng))不兼容時(shí),該過程就叫做交叉編譯。建立一個(gè)交叉編譯工具鏈?zhǔn)且粋€(gè)相當(dāng)復(fù)雜的過程,如果你不想自己經(jīng)歷復(fù)雜的編譯過程,網(wǎng)上有一些編譯好的可用的交叉編譯工具鏈可以下載。在這里,我們直接通過現(xiàn)成的腳本來建立ppc的交叉編譯環(huán)境,如果你對(duì)自己編譯建立這個(gè)環(huán)境感興趣,可以自行參考文章如何為嵌入式開發(fā)建立交叉編譯環(huán)境??紤]到絕大多數(shù)人使用的都是x86電腦,因此,建立適宜于ppc的交叉編譯環(huán)境就是必要的。首先,到這里來下載crosstoll的安裝包。下載完后解壓縮,進(jìn)入文件夾,你就能看見很多類似于demo-arch.sh這種形式的腳本。每一種arch,對(duì)應(yīng)的自然就是一種硬件平臺(tái),而我們這里要使用的,就是demo-powerpc-405.sh。如果你對(duì)這套工具感興趣,可以參閱其使用說明。這里,筆者只根據(jù)自己的開發(fā)環(huán)境來進(jìn)行講解。在使用之前,需要先對(duì)腳本編輯一下。打開demo-powerpc-405.sh,TARBALLS_DIR是相關(guān)下載資源的存放地,因?yàn)樵诎惭b交叉編譯環(huán)境之前,需要從網(wǎng)上下載glibc,gcc等的源代碼包。RESULT_TOP的值是安裝后的目錄,自行根據(jù)需要修改。另外找到這句話:eval `cat powerpc-405.dat gcc-4.1.0-glibc-2.3.6.dat` sh all.sh –notestls將其中的gcc-4.1.0-glibc-2.3.6.dat修改為適合你平臺(tái)的dat文件。可以先看看文件夾里面有哪些dat文件,gcc-4.1.0表示gcc的版本,glibc-2.3.6表示glibc的版本,這些版本號(hào)都要和你實(shí)際機(jī)器上的版本號(hào)相對(duì)應(yīng)。如果不準(zhǔn)備修改目錄,就在/opt目錄下自己建一個(gè)crosstool目錄,并將其權(quán)限改為可寫,最后執(zhí)行腳本:sudo mkdir /opt/crosstoolsudo chown $USER /opt/crosstoolsh demo-powerpc-405.sh之后,腳本就會(huì)根據(jù)你所修改的選項(xiàng),去網(wǎng)上找相應(yīng)版本的gcc,gdb,glibc,內(nèi)核等,下載并編譯安裝。具體所消耗的時(shí)間是和你的網(wǎng)速息息相關(guān)的。如果你所在的網(wǎng)絡(luò)速度很慢,建議你還是不要嘗試了,換個(gè)網(wǎng)絡(luò)再測試吧。或者你可以看看腳本中TARBALLS_DIR目錄的值,然后自行下載所需要的各種工具以及內(nèi)核的源碼包,并自己放到這個(gè)目錄下,再執(zhí)行sh demo-powerpc-405.sh即可。唯一需要注意的就是,你自己下載的環(huán)境工具源碼包的版本需要和demo-powerpc-405.sh里面指定的版本一致。所有需要的資源下載完畢之后,并不是就直接執(zhí)行demo-powerpc-405.sh了,因?yàn)橹苯訄?zhí)行的話可能出現(xiàn)一些問題,所以在之前要先做一些準(zhǔn)備步驟:1. 先unset LD_LIBRARY_PATH,至于為什么,筆者猜測是由于 LD_LIBRARY_PATH 環(huán)境變量通常都是由安裝程序修改為包括相關(guān)庫所在的目錄,估計(jì)是編譯環(huán)境時(shí)不能受已有庫的影響,要在編譯過程中臨時(shí)給LD_LIBRARY_PATH 一個(gè)值,編譯完成之后再改回來。2. 安裝語法分析程序生成器bison/flex,執(zhí)行apt-get install bison flex即可。3. 將/bin/sh的連接對(duì)象從dash改為bash,這是由于我選擇的glibc-2.3.6和dash有bug沖突。就算你不是用的glibc-2.3.6,也建議修改。先用ls -la /bin/sh看看你的sh鏈接到底是什么。如果是dash,就要通過sudo ln -sf /bin/bash /bin/sh來更改。進(jìn)行以上步驟后,再執(zhí)行demo-powerpc-405.sh ,編譯過程就應(yīng)該比較順利了。當(dāng)然這個(gè)用時(shí)也是比較長的,具體時(shí)間取決于機(jī)器配置,強(qiáng)烈建議吃個(gè)飯,打打球,然后再回來看看~。環(huán)境構(gòu)建完成之后,該環(huán)境下的工具列表如下:別忘了在PATH變量中增添路徑,就是${prefix}/bin,這樣你就可以直接使用這些工具了。轉(zhuǎn)載自:fcni_cn的百度空間
本文引用地址:http://www.ex-cimer.com/article/201710/365686.htm
評(píng)論