国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
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è)文章比較長(zhǎng),從目前已經(jīng)寫了的內(nèi)容來看,可能要分三個(gè)部分發(fā)布。這里是第一部分。

基本系統(tǒng)信息

軟件:ISE和EDK都是9.1,沒有sp,操作系統(tǒng)是ubuntu 7.04;硬件:XUP開發(fā)板,usb下載線;基本系統(tǒng)組成:

300MHz PPC
opb_sysace
opb_ethernet (無DMA)
DDR memory controller
opb_uart_16550
plb_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.c
2. 進(jìn)入Library/OS選項(xiàng),其中,MEM_SIZE設(shè)置成你所用平臺(tái)上內(nèi)存的容量,比如是256MB就設(shè)置成0×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流文件以及為L(zhǎng)inux準(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 –notest
ls

將其中的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/crosstool
sudo chown $USER /opt/crosstool
sh 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ò)再測(cè)試吧?;蛘吣憧梢钥纯茨_本中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,至于為什么,筆者猜測(cè)是由于 LD_LIBRARY_PATH 環(huán)境變量通常都是由安裝程序修改為包括相關(guān)庫(kù)所在的目錄,估計(jì)是編譯環(huán)境時(shí)不能受已有庫(kù)的影響,要在編譯過程中臨時(shí)給LD_LIBRARY_PATH 一個(gè)值,編譯完成之后再改回來。

2. 安裝語(yǔ)法分析程序生成器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í)也是比較長(zhǎng)的,具體時(shí)間取決于機(jī)器配置,強(qiáng)烈建議吃個(gè)飯,打打球,然后再回來看看~。

環(huán)境構(gòu)建完成之后,該環(huán)境下的工具列表如下:

別忘了在PATH變量中增添路徑,就是${prefix}/bin,這樣你就可以直接使用這些工具了。

處理并編譯內(nèi)核源代碼

Linux內(nèi)核的配置系統(tǒng)由三個(gè)部分組成,分別是:

1. Makefile:分布在 Linux 內(nèi)核源代碼中的 Makefile,定義 Linux 內(nèi)核的編譯規(guī)則;
2. 配置文件(config.in):給用戶提供配置選擇的功能;
3. 配置工具:包括配置命令解釋器(對(duì)配置腳本中使用的配置命令進(jìn)行解釋)和配置用戶界面(提供基于字符界面、基于 Ncurses 圖形界面以及基于 Xwindows 圖形界面的用戶配置界面,各自對(duì)應(yīng)于 Make config、Make menuconfig 和 make xconfig)。

這些配置工具都是使用腳本語(yǔ)言,如 Tcl/TK、Perl 編寫的(也包含一些用 C 編寫的代碼)。本文并不是對(duì)配置系統(tǒng)本身進(jìn)行分析,而是介紹如何使用配置系統(tǒng)。所以,除非是配置系統(tǒng)的維護(hù)者,一般的內(nèi)核開發(fā)者無須了解它們的原理,只需要知道如何編寫 Makefile 和配置文件就可以。

應(yīng)用補(bǔ)丁

如果使用上述腳本,它會(huì)自動(dòng)幫你下載內(nèi)核源碼,如果你覺得版本較低,可以自行下載。我這里下載的是2.6.22的內(nèi)核代碼,直接去http: //www.kernel.org下載的,同時(shí)下載的還有patch-2.6.22,雖然一開始用不上。順便說一句,其實(shí)默認(rèn)下載的2.6.15.4版本已經(jīng)足夠了,沒有特殊情況沒有必要單獨(dú)再下載別的,新版本內(nèi)核很多特性都是用不上的。

如果你下載的內(nèi)核版本有對(duì)應(yīng)的補(bǔ)丁,就要通過補(bǔ)丁進(jìn)行對(duì)內(nèi)核源代碼的修補(bǔ)操作。一個(gè)補(bǔ)丁就是一個(gè)文本文檔,這個(gè)文檔包含了在兩個(gè)不同版本的源代碼樹之間的變化。補(bǔ)丁是通過diff應(yīng)用程序來創(chuàng)建的。我們使用patch程序來應(yīng)用下載的patch。patch程序讀取一個(gè)diff(或者patch)文件,然后把文件中描述的變化內(nèi)容應(yīng)用到代碼樹上。Linux內(nèi)核中的補(bǔ)丁是相對(duì)于保存內(nèi)核源代碼目錄的父目錄而生成的。這就意味著:patch文件中的文件路徑包含了它所基于的內(nèi)核源文件目錄的名字(或者像是”a/”和”b/”之類的其它名字)。由于這很可能和你本地機(jī)器上的內(nèi)核源代碼目錄的名字不匹配 (但是對(duì)于查看一個(gè)沒有標(biāo)簽的補(bǔ)丁所基于的內(nèi)核版本是非常有用的)。你應(yīng)該切換到你的內(nèi)核源代碼目錄,并且在打補(bǔ)丁的時(shí)候去掉patch中文件名字路徑的第一個(gè)分量(patch命令的-p1參數(shù)可以完成這個(gè)任務(wù))。

具體過程是這樣的,比如把下載下來的patch壓縮包解壓到/patch目錄下,解壓后的文件名為:xxxx.patch,然后進(jìn)入你內(nèi)核源文件的文件夾,將補(bǔ)丁拷貝到這里,首先運(yùn)行命令

patch -p1 –dry-run < /xxxx/patch-xxxx

這一步是測(cè)試應(yīng)用patch,此命令不會(huì)對(duì)你的內(nèi)核源碼做任何更動(dòng),如果這一步?jīng)]有出現(xiàn)任何錯(cuò)誤輸出的話,就執(zhí)行:

patch -p1 < /xxxx/patch-xxxx

如果沒有錯(cuò)誤提示,就表示補(bǔ)丁已經(jīng)打上了。

修改文件

好,此時(shí)的內(nèi)核源代碼,如果是用于臺(tái)式機(jī)的編譯,改動(dòng)就已經(jīng)足夠了。但是我們是要編譯出能在ppc上運(yùn)行的內(nèi)核,因此,還要繼續(xù)進(jìn)行修改。

修改串口代碼

首先,在XUP板子上有一個(gè)串口終端,并且只有一個(gè),這意味著很多流程,包括boot loader,boot process以及接下來的一些步驟都要和這個(gè)串口交互,如果采用默認(rèn)的波特率9600,就有點(diǎn)慢了,因此,我們可以將其波特率修改得大一些。以 38400為例,硬件平臺(tái)的修改請(qǐng)?jiān)趀dk下進(jìn)行,系統(tǒng)源代碼的修改,請(qǐng)找到arch/ppc/boot/common/ns16550.c,找到這一行:

#define SERIAL_BAUD 9600

將其修改成

#define SERIAL_BAUD 38400

即可。

修改xparameters.h

在生成bsp的時(shí)候會(huì)生成xparameters_.h文件,你需要修改源代碼目錄下arch/ppc/platforms/4xx/xparameters.h
文件,讓它包括xparameters_.h這個(gè)文件。

修改makefile

接下來我們來關(guān)注一下Makefile,由于 Linux 內(nèi)核源代碼是按照樹形結(jié)構(gòu)組織的,所以 Makefile 也被分布在目錄樹中。Linux 內(nèi)核中的 Makefile 以及與 Makefile 直接相關(guān)的文件有:

1. Makefile:頂層 Makefile,是整個(gè)內(nèi)核配置、編譯的總體控制文件。bother finally
2. .config:內(nèi)核配置文件,包含由用戶選擇的配置選項(xiàng),用來存放內(nèi)核配置后的結(jié)果(如 make config)。
3. arch/*/Makefile:位于各種 CPU 體系目錄下的 Makefile,如 arch/arm/Makefile,是針對(duì)特定平臺(tái)的 Makefile。
4. 各個(gè)子目錄下的 Makefile:比如 drivers/Makefile,負(fù)責(zé)所在子目錄下源代碼的管理。
5. Rules.make:規(guī)則文件,被所有的 Makefile 使用。

用戶通過 make config 配置后,產(chǎn)生了 .config。頂層 Makefile 讀入 .config 中的配置選擇。頂層 Makefile 有兩個(gè)主要的任務(wù):產(chǎn)生 vmlinux(未壓縮的內(nèi)核) 文件和內(nèi)核模塊(module)。為了達(dá)到此目的,頂層 Makefile 遞歸的進(jìn)入到內(nèi)核的各個(gè)子目錄中,分別調(diào)用位于這些子目錄中的 Makefile。至于到底進(jìn)入哪些子目錄,取決于內(nèi)核的配置。在頂層 Makefile 中,有一句:include arch/$(ARCH)/Makefile,包含了特定 CPU 體系結(jié)構(gòu)下的 Makefile,這個(gè) Makefile 中包含了平臺(tái)相關(guān)的信息。有關(guān)Makefile的更多說明,請(qǐng)參見IBM文檔庫(kù)文章 Linux內(nèi)核配置系統(tǒng)淺析。

小知識(shí):各種內(nèi)核格式的區(qū)別

vmlinux是未壓縮的原始內(nèi)核,為ELF格式,常用于內(nèi)核調(diào)試;
vmlinuz,或zImage or bzImage,是vmlinux經(jīng)過壓縮并包裝有g(shù)zip自解壓代碼的內(nèi)核,為BIN格式,常作為系統(tǒng)或目標(biāo)板的引導(dǎo)內(nèi)核。

位于各個(gè)子目錄下的 Makefile 同樣也根據(jù) .config 給出的配置信息,構(gòu)造出當(dāng)前配置下需要的源文件列表,并在文件的最后有 include $(TOPDIR)/Rules.make。

下面談?wù)劸唧w如何對(duì)Makefile進(jìn)行修改。打開內(nèi)核源代碼目錄下的Makefile文件,找到以下兩行:

ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=

這是表示ARCH的值為SUBARCH的值,而CROSS_COMPILE的值為空。我們應(yīng)該將其改為:

ARCH := ppc
CROSS_COMPILE = powerpc-405-linux-gnu-

這樣表示硬件平臺(tái)是ppc,而交叉編譯工具是powerpc-405-linux-gnu-系列工具。

小知識(shí):ppc還是powerpc?

細(xì)心的朋友可能發(fā)現(xiàn),arch/platforms目錄下既有ppc目錄又有powerpc目錄,這是怎么回事呢?由于IBM 成立 power.org 組織,便以 Power Architecture 來稱呼 PowerPC 處理器,因此,以往所慣用的PPC 現(xiàn)在都改名叫 PowerPC。也就是說, PowerPC 現(xiàn)在屬于是官方名稱了。而Linux kernel 由 2.6.15 開始,已經(jīng)把 arch/ppc/ 重新組織到 arch/powerpc/,不過在整個(gè)遷徙的工作完成之前,arch/ppc/ 仍會(huì)繼續(xù)存在,只不過 arch/ppc/ 將會(huì)停止發(fā)展,接下來的 Linux kernel for PowerPC 將會(huì)轉(zhuǎn)移到 arch/powerpc/ 的新目錄下繼續(xù)發(fā)展。

仔細(xì)觀察兩個(gè)文件夾,會(huì)發(fā)現(xiàn)有些許不同,以往 PPC platform的分類 是被寫在 arch/ppc/platforms/*.c 裡,組織結(jié)構(gòu)不大良好,現(xiàn)在被重新組織在 arch/powerpc/platforms/ 目錄下,一個(gè) platform 一個(gè)目錄,干凈多了:

# ls arch/powerpc/platforms/
4xx/ 85xx/ apus/ embedded6xx/ maple/ prep/
82xx/ 86xx/ cell/ iseries/ pasemi/ pseries/
83xx/ 8xx/ chrp/ Makefile powermac/

當(dāng)然,就目前來說,Makefile里面的arch值設(shè)置為ppc或者powerpc都無所謂,因?yàn)榧词鼓氵x用了ppc,構(gòu)建系統(tǒng)的時(shí)候也會(huì)自動(dòng)包含asm-powerpc中所必須的共享包含文件,因此沒有必要擔(dān)心這一點(diǎn)。

內(nèi)核配置

接下來進(jìn)行內(nèi)核配置。筆者推薦使用”make menuconfig”命令,而不是一些文章中推薦的”make xconfig”,因?yàn)楹笳呖赡墚a(chǎn)生一些未知原因的編譯錯(cuò)誤。menuconfig是一個(gè)文本模式、選單驅(qū)動(dòng)的配置界面,而xconfig是基于 Tcl/Tk的X圖形配置界面。另外一個(gè)常用的是make oldconfig,如果只想在原來內(nèi)核配置的基礎(chǔ)上修改一些小地方,這個(gè)命令會(huì)省去不少麻煩,但我們這里是要大改,所以也不用這個(gè)。關(guān)于配置內(nèi)核的原理與過程,不熟悉的朋友可以參見這篇文章 ,這里就不詳細(xì)介紹了。順便提及的是,運(yùn)行這個(gè)命令可能出現(xiàn)以下錯(cuò)誤

1 /usr/bin/ld: crt1.o: No such file: No such file or directory

這個(gè)錯(cuò)誤可以通過安裝libc6-dev解決

2 /usr/bin/ld: cannot find -lncurses

這個(gè)錯(cuò)誤可以通過安裝libncurses5-dev解決

3 checklist.o: file not recognized: File format not recognized

解決方法是用”make mrproper”命令清除所有舊的Xwindow configuration文件,至于為什么會(huì)有這個(gè)錯(cuò)誤,我沒有深入研究,知道的朋友請(qǐng)指點(diǎn)一下

在一開始配置時(shí),建議先生成一個(gè)最小的,保證可運(yùn)行的.config文件,以后再根據(jù)自己的需要添加一些特性,而且添加特性的時(shí)候一定小心,稍不注意就會(huì)讓你無法正常編譯,或者無法正常運(yùn)行。另外需要注意的是,所有標(biāo)有“new”標(biāo)簽的選項(xiàng)都要遵從默認(rèn)設(shè)置,不要修改它。下面這些選項(xiàng)是我所用的最小系統(tǒng)配置,如果你使用的內(nèi)核版本和我的差別很大,可能需要改動(dòng)一些config選項(xiàng),或者如果你使用這個(gè)配置出現(xiàn)問題,請(qǐng)?jiān)谶@里留言,我會(huì)盡力幫你分析。先將清單與大概解釋列出如下:

General Setup
* Prompt for development and/or incomplete drivers
(XUP)Local version – append to kernel release
* Initial RAM disk (initrd) support
* System V IPC
* Configure standard kernel features —>
* Sysctl syscall support ?

Processor
* 40x Processor Type
* Xilinx-ML300 Machine Type
* Math emulation
* TTYS0 device and default console

Platform options
* High memory support
* Default bootloader kernel arguments~
“console=ttyS0,38400 root=/dev/xsysace/disc0/part3 rw”

Networking
* Unix domain sockets
* TCP/IP networking
* IP: multicasting
* IP: kernel level autoconfiguration
* IP: DHCP support
* IP: TCP syncookie support (disabled per default)

Device drivers—Memory Technology Devices (MTD)
* Memory Technology Device (MTD) Support
* MTD partitioning support
* RedBoot partition table parsing
* Direct char device access to MTD devices
* Caching block device access to MTD devices
* RAM/ROM flash chip device drivers
* Detect flash chips by Common Flash Interface (CFI) probe
* Suport for AMD/Fujitsu flash chips(這個(gè)根據(jù)你現(xiàn)有芯片來選)

Device drivers—Block Devices
* Loopback device support
* Network block device support
* RAM disk support
(4096) Default RAM disk size
* Xilinx on-chip System ACE

Device drivers—Network Device Support
* Network device support
* Ethernet(10 or 100Mbit)
* PowerPC 4xx on-chip ethernet?

Device drivers—Character devices— Serial drivers
* 8250/16550 and compatible serial support
* Xilinx uartlite serial port support
* Support for console on Xilinx uartlite serial port

File systems
* Second extended fs support
* Kernel automounter version 4 support (also supports v3)
* Pseudo filesystems —>
* /proc/kcore support
* Virtual memory file system support (former shm fs)
* Miscellaneous filesystems —>
* Journaling Flash File System v2 (JFFS2) support
(0) JFFS2 debugging verbosity (0=quiet, 2=noisy)
* Network file systems —>
* NFS file system support
* Provide NFSv3 client support
* Root file system on NFS
* NFS server support
* Provide NFSv3 server support
* SMB file system support (to mount Windows shares etc.)
* Native Language Support —>
* Default NLS Option: “cp437″

Kernel hacking
* Kernel debugging
* Compile the kernel with debug info
* Include BDI-2000 user context switcher

其實(shí)上面的選項(xiàng)不是最小的,如果你在編譯的時(shí)候遇到某些問題,可以看看出問題的源代碼屬于哪個(gè)部分,只要能去掉就去掉。原則就是先搞定一個(gè)能跑的內(nèi)核,然后再想擴(kuò)展的事情。選擇完成之后,將之前編譯的BSP拷貝到源代碼樹目錄中,覆蓋原有文件。

內(nèi)核編譯

如果你想使用ram disk,那么用以下命令進(jìn)行編譯:

make zImage.initrd

否則用以下命令:

make

以前編譯2.4內(nèi)核的時(shí)候之前都要用make dep 命令保證編譯內(nèi)核時(shí)所有的依賴,例如頭文件,都存在。不過對(duì)于2.6來講已經(jīng)不需要了,直接一個(gè)make命令把make dep和make zImage的事請(qǐng)就做了。如果你之前編譯過,想重新編譯的話,最好用一下make clean,它能夠去除所有的object文件以及一些別的遺留文件。當(dāng)然你也可以用make mrproper,這個(gè)比make clean清理得更加徹底,不過小心你的.config文件了,它會(huì)一起刪除的,所以還是首先備份一下,或者就用make clean吧。


現(xiàn)在我們是第一次編譯,所以還不用考慮這些。為了保險(xiǎn),我們使用第二組指令來進(jìn)行編譯。時(shí)間蠻長(zhǎng)的,如果一切順利,編譯出來的內(nèi)核會(huì)放在 arch/ppc/boot/images/目錄下,可能叫zImage.elf或者zImage.initrd.elf,用目前這種編譯方式編譯的是 zImage.elf。

理論上講,完畢之后就可以把這個(gè)執(zhí)行文件拷貝到EDK工程目錄下,并進(jìn)入創(chuàng)建ACE文件的步驟了。但是,在上面的講解中,我們并沒有使用內(nèi)核模塊,而在進(jìn)一步應(yīng)用中,很可能有一些內(nèi)核選項(xiàng)是要以模塊形式編譯進(jìn)去的,此時(shí),接下來的工作就是建立及安裝模塊,用命令

make modules
make modules_install

來編譯,成功后,系統(tǒng)會(huì)在/lib/modules目錄下生成一個(gè)按你所編譯內(nèi)核的版本號(hào)命名的子目錄,里面存放著新內(nèi)核的所有可加載模塊。將來要使用時(shí)用insmod命令進(jìn)行加載即可。目前的的Linux 2.6x版本內(nèi)核是自動(dòng)解決依賴關(guān)系,所以暫時(shí)不用關(guān)注depmod了。

CF的配置

CF卡分區(qū)

其實(shí)不分區(qū)也可以,但是我們?cè)谶@里分區(qū)的原因是最大限度模擬正常的Linux,想想,一般的人安裝Linux系統(tǒng)的時(shí)候是怎么分區(qū)的?/根分區(qū),swap分區(qū)以及/boot分區(qū)。ok,我們?cè)谶@里也給我們的CF卡分三個(gè)區(qū)。暫時(shí)先以我這里的8G CF卡舉例子。

將CF卡插到系統(tǒng)上,使用命令

mount | column -t

看看CF卡對(duì)應(yīng)的mount目錄的dev名稱是是什么。我計(jì)算機(jī)上的信息如圖所示:
Screenshot-coloum@windstorm: ~.png

可以看出,CF卡在我這里是/dev/sdc。然后我們使用fdisk將其分區(qū):

fdisk /dev/sdc

具體的分區(qū)過程我就不講了,如果你覺得不習(xí)慣fdisk的命令行操作形式,也可以使用gparted這個(gè)圖形化分區(qū)工具,總之,最后要分成的效果是:

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還剩多少就分多少,用來存放根文件系統(tǒng))

可以看出,上面三個(gè)區(qū)分別對(duì)應(yīng)常說的/boot,/swap和/三個(gè)分區(qū)。

創(chuàng)建CF卡文件系統(tǒng)

Xilinx的SystemACE控制器比較特殊,并不是說隨便一個(gè)CF卡插上去就可以使用的,必須專門為CF卡創(chuàng)建特定文件系統(tǒng)。能夠完成這個(gè)任務(wù)的是mkdosfs這個(gè)軟件。用下面的命令對(duì)CF卡進(jìn)行操作即可:

mkdosfs -s 8 -F 16 -R 1 F:

-s后面跟的數(shù)字表示每簇扇區(qū)數(shù)目,一般是2的整數(shù)次方。下面是FAT16文件格式通常容量對(duì)應(yīng)的每簇扇區(qū)數(shù)目。

16–128MB 4
128–256MB 8
256–512MB 16
512–1024MB 32
1024–2048MB 64

不過我發(fā)現(xiàn)這個(gè)-s后面的數(shù)字其實(shí)可以大一些,比如我用64,除了在執(zhí)行命令的時(shí)候會(huì)出現(xiàn)一個(gè)warning

WARNING: Not enough clusters for a 16 bit FAT! The filesystem will be
misinterpreted as having a 12 bit FAT without mount option “fat=16″.

其它沒有什么問題。

-F表示FAT的大小,這里是FAT16,-R的值這里不要改動(dòng),保留扇區(qū)的數(shù)目,老問題了,有興趣的可以去網(wǎng)上搜索。最后一個(gè)F:是在windows下的CF卡卷標(biāo),根據(jù)你自己的系統(tǒng)來調(diào)整它。如果是Linux環(huán)境,將這個(gè)卷表?yè)Q成是/dev/fdx這種形式。具體設(shè)備名自行查詢。

下載內(nèi)核文件

OK,到這里,我假設(shè)你已經(jīng)編譯成功,產(chǎn)生了你所需要的zImage文件,好,現(xiàn)在該怎么用這個(gè)文件呢?有三種方式:

1 把該文件和硬件bit流合成ace文件,放到flash上面自行加載
2 通過自己編寫的bootloader將flash上面的elf文件加載到內(nèi)部ram中
3 通過xmd的dow命令來下載elf文件

第二種方法我還沒有研究,嘿嘿,所以就先不介紹了,要是哪位朋友對(duì)bootloader比較熟的,懇請(qǐng)指教一下~~好了,首先詳細(xì)介紹一下很多人使用的ace方式。

創(chuàng)建ACE

我們可以通過XMD工具來進(jìn)行ACE文件的創(chuàng)建,命令如下:

xmd -tcl genace.tcl -opt genace.opt

genace.tcl是存在于xps安裝目錄下的data/xmd目錄下,而genace.opt需要自己創(chuàng)建,內(nèi)容如下:

-jprog
-board user
-target ppc_hw
-hw implementation/download.bit
-elf zImage.elf
-configdevice devicenr 1 idcode 0x1127e093 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啟動(dòng),就可以始終從CF卡上加載程序。

對(duì)于非XUP的,官方的板子來說,比如ML-403開發(fā)板,步驟更加簡(jiǎn)單,genace.opt的內(nèi)容如下:

-jprog
-board ml403
-hw implementation/download.bit
-elf TestApp_memory/executable.elf
-ace system.ace

你只需要告訴EDK板子是ml403就可以了,很多參數(shù)都不用自己配置。具體哪些開發(fā)板是被xmd直接支持的,可以參考genace.tcl文件。

有些朋友會(huì)發(fā)現(xiàn),按照上面的步驟操作,可能會(huì)出現(xiàn)以下錯(cuò)誤提示:

Error: Executable TestApp_Memory/executable.elf does not contain start address..

我在遇到這個(gè)錯(cuò)誤之后查了一些資料,并按working harddfen照資料所述的修改辦法來修改,都沒有作用,最后是在朋友的安裝了sp的edk環(huán)境中將ACE文件生成成功的。因此,我懷疑可能是edk無 sp的9.1版本的bug。如果你和我一樣頭疼于sp的下載,還在使用沒有sp的環(huán)境……恭喜你,或者想辦法去下載sp,或者就找安裝了sp的機(jī)器來生成吧。其實(shí)基于windows的sp比較好找,主要是基于Linux的sp太難下了……默哀ing,如果有哪位Linuxer知道有別的方法能夠修正這個(gè)錯(cuò)誤,煩請(qǐng)告知,謝謝了。

我比較懶,還比較性急,不喜歡看著bit+elf這么大的文件通過9600速度的串口下載到板子上……所以直接使用了最簡(jiǎn)單的第三種方法,打開xmd,connect ppc hw,dow zImage.elf, con,然后就OK了。終端顯示的信息如下:

loaded at: 00400000 0066D19C

board data at: 0066B120 0066B19C

relocated to: 00404060 004040DC

zimage at: 00404ED5 0066A3DD

avail ram: 0066E000 08000000

Linux/PPC load: console=ttyS0,9600 root=/dev/xsysace/disc0/part3 rw

Uncompressing Linux…done.

Now booting the kernel

……..(以下信息省略)

這就表示基本內(nèi)核建立成功了,我們可以接下去創(chuàng)建root文件系統(tǒng)了。呵呵,我認(rèn)為最艱難的一步已經(jīng)被你搞定了,恭喜。

如果遇到錯(cuò)誤……

很多朋友都會(huì)遇到下面這種錯(cuò)誤

inflate returned FFFFFFFB, error is caused by the size of the uncompressed image

這表示你的內(nèi)核解壓縮之后大小超過了你的存儲(chǔ)空間,通常這種情況出現(xiàn)在你的存儲(chǔ)空間定位于bram上。怎么解決呢?很簡(jiǎn)單,修改ld,把程序定位到ddr上不就行了~~

還有的朋友會(huì)遇到下面這種錯(cuò)誤:

Linux/PPC load: console=ttyS0,9600
Uncompressing Linux…done.
Now booting the kernel

loaded at: 00400000 005331A0
board data at: 40000000 4000007C
relocated to: 00404084 00404100
zimage at: 00404EB9 00530A50
avail ram: 00534000 00000000

Linux/PPC load: console=ttyS0,9600
Uncompressing Linux…oops… out of memory
pause

這個(gè)時(shí)候檢查一下
arch/ppc/boot/simple/embed_config.c 中vertex的支持代碼是否已經(jīng)被編譯進(jìn)去(搜索ML403) 如果沒有配置的話,板級(jí)信息就不會(huì)正確建立 。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
基于MPC8250的嵌入式Linux系統(tǒng)開發(fā)
FPGA的嵌入式系統(tǒng) 來自 對(duì)待同一事物不一樣的心情,將有不同的感受
linux內(nèi)核啟動(dòng)地址,解壓縮,內(nèi)核參數(shù)問題探討 - Embeded - todaygood
linux 內(nèi)核源代碼目錄結(jié)構(gòu)概述
Arm Linux交叉編譯和連接過程分析(1) - Linux - Linux My world
編譯Linux內(nèi)核(下)---KConfig、Makefile詳解以及ARM平臺(tái)Linux內(nèi)核的編譯
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服