江蘇科技大學(xué)通信專業(yè)嵌入式課件第8章_第1頁(yè)
江蘇科技大學(xué)通信專業(yè)嵌入式課件第8章_第2頁(yè)
江蘇科技大學(xué)通信專業(yè)嵌入式課件第8章_第3頁(yè)
江蘇科技大學(xué)通信專業(yè)嵌入式課件第8章_第4頁(yè)
江蘇科技大學(xué)通信專業(yè)嵌入式課件第8章_第5頁(yè)
已閱讀5頁(yè),還剩103頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

重點(diǎn)內(nèi)容:內(nèi)核源碼組織內(nèi)核的定制Makefile定制網(wǎng)卡驅(qū)動(dòng)內(nèi)核裁剪第八章定制內(nèi)核移植重點(diǎn)內(nèi)容:第八章定制內(nèi)核移植1一、Linux內(nèi)核源碼組織Linux用來(lái)支持各種體系結(jié)構(gòu)的源代碼包含大約4500個(gè)C語(yǔ)言程序,存放在270個(gè)左右的子目錄下,總共大約包含200萬(wàn)行代碼,大概占用58MB磁盤空間。其文件結(jié)構(gòu)圖如圖所示:一、Linux內(nèi)核源碼組織Linux用來(lái)支持2一、Linux內(nèi)核源碼組織這里有的目錄是包含多個(gè)部分的內(nèi)容。具體各個(gè)目錄的內(nèi)容組成如下:●arch:arch目錄包括了所有和體系結(jié)構(gòu)相關(guān)的核心代碼。它下面的每一個(gè)子目錄都代表一種Linux支持的體系結(jié)構(gòu),例如i386就是IntelCPU及與之相兼容體系結(jié)構(gòu)的子目錄;●include:include目錄包括編譯核心所需要的大部分頭文件,例如與平臺(tái)無(wú)關(guān)的頭文件在include/linux子目錄下;一、Linux內(nèi)核源碼組織這里有的目錄是包含3一、Linux內(nèi)核源碼組織●init:init目錄包含核心的初始化代碼(不是系統(tǒng)的引導(dǎo)代碼),有main.c和Version.c兩個(gè)文件;●mm:mm目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下;●drivers:drivers目錄中是系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)程序。它又進(jìn)一步劃分成幾類設(shè)備驅(qū)動(dòng),每一種有對(duì)應(yīng)的子目錄,如聲卡的驅(qū)動(dòng)對(duì)應(yīng)于drivers/sound;●ipc:ipc目錄包含了核心進(jìn)程間的通信代碼;一、Linux內(nèi)核源碼組織●init:init目錄包含核心4一、Linux內(nèi)核源碼組織●modules:modules目錄存放了已建好的、可動(dòng)態(tài)加載的模塊;●fs:fs目錄存放Linux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄對(duì)應(yīng),如ext3文件系統(tǒng)對(duì)應(yīng)的就是ext3子目錄;●Kernel:Kernel內(nèi)核管理的核心代碼放在這里。同時(shí)與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下;●net:net目錄里是核心的網(wǎng)絡(luò)部分代碼,其每個(gè)子目錄對(duì)應(yīng)于網(wǎng)絡(luò)的一個(gè)方面;一、Linux內(nèi)核源碼組織●modules:modules5一、Linux內(nèi)核源碼組織●lib:lib目錄包含了核心的庫(kù)代碼,不過(guò)與處理器結(jié)構(gòu)相關(guān)的庫(kù)代碼被放在arch/*/lib/目錄下;●scripts:scripts目錄包含用于配置核心的腳本文件;●documentation:documentation目錄下是一些文檔,是對(duì)每個(gè)目錄作用的具體說(shuō)明。一般在每個(gè)目錄下都有一個(gè)depend文件和一個(gè)Makefile文件。這兩個(gè)文件都是編譯時(shí)使用的輔助文件。一、Linux內(nèi)核源碼組織●lib:lib目錄包含了核心的6二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2.Makefile3.具體配置操作4.添加自己代碼二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)7二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)ARM-Linux內(nèi)核的配置系統(tǒng)由三個(gè)部分組成:Makefile、配置文件和配置工具,它們之間的關(guān)系如圖所示:后綴名為.in的文件為提供選項(xiàng)的文件,通過(guò)配置工具配置之后生成配置文件,最后按照選項(xiàng)來(lái)調(diào)用源碼編譯成待燒錄到目標(biāo)板的鏡像文件zImage。整個(gè)過(guò)程都是由Makefile文件來(lái)調(diào)用管理的。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)ARM-Li8二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)1、MakefileMakefile是Linux系統(tǒng)中非常重要的一個(gè)組成部分,這我們前面也有所介紹。因?yàn)樵趲缀趺恳粋€(gè)子目錄下都會(huì)有Makefile文件。其中位于根目錄下的Makefile文件是總綱式Makefile文件,其它任何Makefile文件都是直接或間接被它調(diào)用。Makefile文件定義了各個(gè)目錄下文件如何被編譯,并最終形成zImage文件。當(dāng)然zImage文件的產(chǎn)生還要借助.config文件,它會(huì)告訴Makefile文件哪些文件被編譯進(jìn)內(nèi)核,哪些源文件沒(méi)有被用戶選中,并不需要被編譯進(jìn)內(nèi)核文件中。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)1、Makefile9二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2、配置文件在ARM-Linux系統(tǒng)中,配置文件存放在各個(gè)子目錄下,它們的名字通常被稱為config.in或Config.in文件,其中后綴名為in的表示的是提供選項(xiàng),而后綴名為config的則是表示是表示進(jìn)行選擇了某些選項(xiàng)之后的配置文件。存放在arch/arm目錄下的config.in文件為總綱領(lǐng)式配置文件,其它c(diǎn)onfig.in文件都是直接或間接被該文件調(diào)用。這些配置文件按照一定的格式編寫,用戶通過(guò)特定的工具可以讀這些配置文件來(lái)進(jìn)行ARM-Linux系統(tǒng)的配置,最終配置的選項(xiàng)結(jié)果存放在內(nèi)核根目錄.config文件中。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2、配置文件10二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)3、配置工具配置工具一般包括配置命令解釋器和配置用戶界面。前者主要作用是對(duì)配置腳本中使用的配置命令進(jìn)行解釋;而后者則是提供基于字符界面、基于Ncurses圖形界面以及基于Xwindows圖形界面的用戶配置界面,各自對(duì)應(yīng)于Makeconfig、Makemenuconfig和makexconfig。這些配置工具都是使用腳本語(yǔ)言,如Tcl/Tk、Perl編寫的(也包含一些用C編寫的代碼)。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)3、配置工具11二、內(nèi)核基本配置2.MakefileMakefile是分布在Linux內(nèi)核源碼的各個(gè)層次目錄中,定義Linux內(nèi)核的編譯規(guī)則。其主要作用是根據(jù)配置的情況,構(gòu)造出需要編譯的源文件列表,然后分別編譯,并把目標(biāo)代碼鏈接到一起,最終形成Linux內(nèi)核二進(jìn)制文件。1、Makefile概述由于Linux內(nèi)核源代碼是按照樹(shù)形結(jié)構(gòu)組織的,所以Makefile也被分布在目錄樹(shù)中。Linux內(nèi)核中的Makefile以及與Makefile直接相關(guān)的文件有:二、內(nèi)核基本配置2.MakefileMak12二、內(nèi)核基本配置2.Makefile●Makefile:頂層Makefile,是整個(gè)內(nèi)核配置、編譯的總體控制文件;●.config:內(nèi)核配置文件,包含由用戶選擇的配置選項(xiàng),用來(lái)存放內(nèi)核配置后的結(jié)果;●arch/*/Makefile:位于各種CPU體系目錄下的Makefile,其中“*”表示不同的平臺(tái),如arch/arm/Makefile,是針對(duì)arm平臺(tái)的Makefile;●各個(gè)子目錄下的Makefile:比如drivers/Makefile,負(fù)責(zé)所在子目錄下源代碼的管理與編譯;●Rules.make:規(guī)則文件,被所有的Makefile使用。二、內(nèi)核基本配置2.Makefile●Makefile:頂13二、內(nèi)核基本配置2.Makefile2、Makefile中的變量頂層Makefile定義并向環(huán)境中輸出了許多變量,為各個(gè)子目錄下的Makefile傳遞一些信息。有些變量,比如SUBDIRS,不僅在頂層Makefile中定義并且賦初值,而且在arch/*/Makefile還作了擴(kuò)充。常用的變量有以下幾類:●版本信息版本信息有:VERSION,PATCHLEVEL,SUBLEVEL,EXTRAVERSION,KERNELRELEASE。二、內(nèi)核基本配置2.Makefile2、Makefile14二、內(nèi)核基本配置2.Makefile●CPU體系結(jié)構(gòu):ARCH。●路徑信息:TOPDIR,SUBDIRS●內(nèi)核組成信息:HEAD,CORE_FILES,NETWORKS,DRIVERS,LIBS●編譯信息:CPP,CC,AS,LD,AR,CFLAGS,LINKFLAGS●配置變量CONFIG_*二、內(nèi)核基本配置2.Makefile●CPU體系結(jié)構(gòu):AR15二、內(nèi)核基本配置2.Makefile3、Rules.make變量Rules.make是編譯規(guī)則文件,所有的Makefile中都會(huì)包括Rules.make。Rules.make文件定義了許多變量,最為重要是那些編譯、鏈接列表變量,包括以下這些變量:●O_OBJS,L_OBJS,OX_OBJS,LX_OBJS:本目錄下需要編譯進(jìn)Linux內(nèi)核vmlinux的目標(biāo)文件列表,其中OX_OBJS和LX_OBJS中的“X”表明目標(biāo)文件使用了EXPORT_SYMBOL輸出符號(hào);二、內(nèi)核基本配置2.Makefile3、Rules.mak16二、內(nèi)核基本配置2.Makefile●M_OBJS,MX_OBJS:本目錄下需要被編譯成可裝載模塊的目標(biāo)文件列表。同樣,MX_OBJS中的“X”表明目標(biāo)文件使用了EXPORT_SYMBOL輸出符號(hào);●O_TARGET,L_TARGET:每個(gè)子目錄下都有一個(gè)O_TARGET或L_TARGET,Rules.make首先從源代碼編譯生成O_OBJS和OX_OBJS中所有的目標(biāo)文件,然后使用$(LD)-r把它們鏈接成一個(gè)O_TARGET或L_TARGET。O_TARGET以.o結(jié)尾,而L_TARGET以.a結(jié)尾。二、內(nèi)核基本配置2.Makefile●M_OBJS,MX_17二、內(nèi)核基本配置2.Makefile4、子目錄下的Makefile子目錄Makefile用來(lái)控制本級(jí)目錄以下源代碼的編譯規(guī)則。二、內(nèi)核基本配置2.Makefile4、子目錄下的Make18二、內(nèi)核基本配置3.具體配置操作內(nèi)核源碼的配置文件有自己的格式,這些文件中定義了makefile的使用命令。1、配置命令在Linux內(nèi)核中,配置命令有多種方式,如表所示:二、內(nèi)核基本配置3.具體配置操作內(nèi)核源碼的配19二、內(nèi)核基本配置3.具體配置操作2、配置語(yǔ)言配置語(yǔ)言在這里面使用很簡(jiǎn)單明了,主要包括: ●頂層菜單 ●詢問(wèn)語(yǔ)句 ●定義語(yǔ)句 ●依賴語(yǔ)句 ●選擇語(yǔ)句 ●if語(yǔ)句 ●Source語(yǔ)句 ●菜單塊(menublock)語(yǔ)句二、內(nèi)核基本配置3.具體配置操作2、配置語(yǔ)言20二、內(nèi)核基本配置3.具體配置操作3、缺省配置Linux內(nèi)核支持非常多的硬件平臺(tái),對(duì)于具體的硬件平臺(tái)而言,有些配置就是必需的,有些配置就不是必需的。另外,新增加功能的正常運(yùn)行往往也需要一定的先決條件,針對(duì)新功能,必須作相應(yīng)的配置。因此,特定硬件平臺(tái)能夠正常運(yùn)行對(duì)應(yīng)著一個(gè)最小的基本配置,這就是缺省配置。二、內(nèi)核基本配置3.具體配置操作3、缺省配置21二、內(nèi)核基本配置3.具體配置操作

Linux內(nèi)核中針對(duì)每個(gè)ARCH都會(huì)有一個(gè)缺省配置。在向內(nèi)核代碼增加了新的功能后,如果新功能對(duì)于這個(gè)ARCH是必需的,就要修改此ARCH的缺省配置。二、內(nèi)核基本配置3.具體配置操作Linux內(nèi)22二、內(nèi)核基本配置3.具體配置操作4、幫助文件在配置Linux內(nèi)核時(shí),遇到不懂含義的配置選項(xiàng),可以查看它的幫助,從中可得到選擇的建議。所有配置選項(xiàng)的幫助信息都在Documentation/Configure.help中,它的格式為:<description><variablename><helpfile>二、內(nèi)核基本配置3.具體配置操作4、幫助文件23二、內(nèi)核基本配置3.具體配置操作<description>給出本配置選項(xiàng)的名稱,<variablename>對(duì)應(yīng)配置變量,<helpfile>對(duì)應(yīng)配置幫助信息。在幫助信息中,首先簡(jiǎn)單描述此功能,其次說(shuō)明選擇了此功能后會(huì)有什么效果,不選擇又有什么效果。二、內(nèi)核基本配置3.具體配置操作<description>24二、內(nèi)核基本配置4.添加自己代碼對(duì)于一個(gè)開(kāi)發(fā)者來(lái)說(shuō),將自己開(kāi)發(fā)的內(nèi)核代碼加入到Linux內(nèi)核中,需要有三個(gè)步驟:1)首先確定把自己開(kāi)發(fā)代碼放入到內(nèi)核的位置;2)其次,把自己開(kāi)發(fā)的功能增加到Linux內(nèi)核的配置選項(xiàng)中,使用戶能夠選擇此功能;3)最后,構(gòu)建子目錄Makefile,根據(jù)用戶的選擇,將相應(yīng)的代碼編譯到最終生成的Linux內(nèi)核中去。二、內(nèi)核基本配置4.添加自己代碼對(duì)于一個(gè)開(kāi)25三、內(nèi)核定制1.源碼獲取2.移植過(guò)程三、內(nèi)核定制1.源碼獲取26三、內(nèi)核定制1.源碼獲取源碼的獲取有很多途徑,我們可以從/pub/linux/kernel/v2.6/獲取,這是Linux內(nèi)核的官方網(wǎng)站,定期發(fā)布最新的內(nèi)核,以修補(bǔ)Linux內(nèi)核在使用中的各種bug,可以根據(jù)自己的需要下載適合自己的版本。1.源碼獲取三、內(nèi)核定制1.源碼獲取源碼的獲取有很多途徑27三、內(nèi)核定制2.移植過(guò)程Linux內(nèi)核的移植過(guò)程比較繁瑣,具體步驟:1、解壓內(nèi)核文件解壓文件可以點(diǎn)擊右鍵,選擇“extracthere”命令;也可以在終端中,輸入如下命令: tarxfvlinux-2.6.29.tar.bz2然后進(jìn)入內(nèi)核目錄,輸入如下命令: cdlinux-2.6.292.移植過(guò)程三、內(nèi)核定制2.移植過(guò)程Linux內(nèi)核的移植28三、內(nèi)核定制2、修改機(jī)器碼內(nèi)核的機(jī)器碼必須跟Bootloader中一致,不管是u-boot還是vivi,在smdk2440使用的uboot的機(jī)器碼是168,這里需要修改機(jī)器碼,否則會(huì)出現(xiàn)不能啟動(dòng)的情況。機(jī)器碼保存在內(nèi)核源碼的“arch/arm/tools/mach-types”文件中,大概在379行,把原來(lái)的數(shù)字“362”改為“168”。也可以修改uboot中的機(jī)器碼,在“\include\asm-arm\mach-types.h”文件中,找到“#defineMACH_TYPE_S3C2440168”,將其中的數(shù)字“168”改成與linux內(nèi)核一致的機(jī)器碼,注意,這個(gè)機(jī)器碼要沒(méi)有使用的,否則會(huì)編譯中提示沖突。然后保存即可。2.移植過(guò)程三、內(nèi)核定制2、修改機(jī)器碼2.移植過(guò)程29三、內(nèi)核定制3、修改內(nèi)核源碼根目錄下的Makefile文件內(nèi)核的編譯是根據(jù)Makefile文件中的內(nèi)容進(jìn)行的,所以首先需要修改根目錄下的Makefile文件。更改目標(biāo)代碼的類型,并未編譯內(nèi)核指定一個(gè)編譯器。修改后詳細(xì)內(nèi)容顯示如下:#ARCH?=arm#CROSS_COMPILE?=arm-linux-

ARCH是指架構(gòu),這里我們選擇arm架構(gòu),所以修改成:“#ARCH?=arm”;CROSS_COMPILE是指編譯器,由于要在開(kāi)發(fā)板上運(yùn)行,需要使用交叉編譯器,所以改為:“#CROSS_COMPILE?=arm-linnux-”。2.移植過(guò)程三、內(nèi)核定制3、修改內(nèi)核源碼根目錄下的Makefile文件30三、內(nèi)核定制4、修改“arch/arm/plat-s3c24xx/common-smdk.c”文件,修改NandFlash的分區(qū)信息和NandFlash的硬件信息。這個(gè)文件的修改有兩處,具體為:●smdk_default_nand_part,●smdk_nand_info2.移植過(guò)程三、內(nèi)核定制4、修改“arch/arm/plat-s3c2431三、內(nèi)核定制5、修改時(shí)鐘頻率修改平臺(tái)的時(shí)鐘頻率,以滿足smdk2440工作頻率。修改內(nèi)核源碼,否則在超級(jí)終端中會(huì)出現(xiàn)亂碼。6、增加Yaffs2文件系統(tǒng)的支持解壓Yaffs2并以打補(bǔ)丁的方式將其加入Linux內(nèi)核。最新的yaffs2源代碼包可以從http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs.tar.gz?view=tar獲得。具體操作命令如下:#cdyaffs2#./patch-ker.shc/(linux內(nèi)核路徑)2.移植過(guò)程三、內(nèi)核定制5、修改時(shí)鐘頻率2.移植過(guò)程32三、內(nèi)核定制7、配置內(nèi)核先拷貝s3c2440開(kāi)發(fā)板的默認(rèn)配置到內(nèi)核根目錄下,以簡(jiǎn)化配置過(guò)程,使用如下命令:#cparch/arm/configs/s3c2440_defconfig.config#makemenuconfig2.移植過(guò)程三、內(nèi)核定制7、配置內(nèi)核2.移植過(guò)程33三、內(nèi)核定制下面是Linxu內(nèi)核的幾個(gè)主要配置選項(xiàng):(1) Generalsetup常規(guī)選項(xiàng)設(shè)置(2)SystemType:系統(tǒng)類型(3)Bootoptions:引導(dǎo)選項(xiàng)(4)Enableloadablemodulesupport:對(duì)模塊的支持(5)DeviceDrivers:設(shè)備驅(qū)動(dòng)(6)Filesystems:文件系統(tǒng)2.移植過(guò)程三、內(nèi)核定制下面是Linxu內(nèi)核的幾個(gè)主要配置選項(xiàng):2.移植34三、內(nèi)核定制8、編譯配置好編譯選項(xiàng)之后就可以編譯內(nèi)核了,輸入以下命令: makezImage系統(tǒng)就開(kāi)始編譯內(nèi)核了。一般內(nèi)核編譯需要一定的時(shí)間,十幾分鐘到幾十分鐘不等,具體視個(gè)人機(jī)器而定。編譯結(jié)束之后,會(huì)在“/arch/arm/boot/”目錄下面和者根目錄下面生成一個(gè)名為“zImage”的內(nèi)核鏡像文件。同時(shí)在根目錄中生成另外三個(gè)文件,如圖所示:2.移植過(guò)程三、內(nèi)核定制8、編譯2.移植過(guò)程35三、內(nèi)核定制2.移植過(guò)程三、內(nèi)核定制2.移植過(guò)程36三、內(nèi)核定制vmlinux、System.map和initrd-x.x.x.img三種文件時(shí)Linux內(nèi)核編譯之后可以生成的三種鏡像文件格式。這是這三個(gè)鏡像文件之間略有不同,下面詳細(xì)比較說(shuō)明各種格式的文件特性:1、vmlinuxvmlinux是可引導(dǎo)的、壓縮的內(nèi)核?!皏m”代表“VirtualMemory”。Linux支持虛擬內(nèi)存,不像老的操作系統(tǒng)比如DOS有640KB內(nèi)存的限制。Linux能夠使用硬盤空間作為虛擬內(nèi)存,因此得名“vm”。2.移植過(guò)程三、內(nèi)核定制vmlinux、System.m37三、內(nèi)核定制2、System.mapSystem.map是一個(gè)特定內(nèi)核的內(nèi)核符號(hào)表。它是當(dāng)前運(yùn)行的內(nèi)核的System.map的鏈接。它是由“nmvmlinux”產(chǎn)生的,并且將不相關(guān)的符號(hào)濾除掉。3、initrd-x.x.x.imginitrd是“initialramdisk”的簡(jiǎn)寫。initrd一般被用來(lái)臨時(shí)的引導(dǎo)硬件到實(shí)際內(nèi)核vmlinuz能夠接管并繼續(xù)引導(dǎo)的狀態(tài)。例如ubuntu的initrd.img主要是用于加載ext3等文件系統(tǒng)及scsi設(shè)備的驅(qū)動(dòng)。2.移植過(guò)程三、內(nèi)核定制2、System.map2.移植過(guò)程38四、網(wǎng)卡驅(qū)動(dòng)1.驅(qū)動(dòng)源碼獲取2.修改驅(qū)動(dòng)源碼3.配置并編譯四、網(wǎng)卡驅(qū)動(dòng)1.驅(qū)動(dòng)源碼獲取39四、網(wǎng)卡驅(qū)動(dòng)在內(nèi)核里面網(wǎng)卡驅(qū)動(dòng)是相當(dāng)完善的,這里需要注意一件事情,從2.6.25開(kāi)始的內(nèi)核的“drivers/net/dm9000.c”這個(gè)文件對(duì)應(yīng)的DM9000的驅(qū)動(dòng)(版本為1.3版)并不適合DM9000E這顆芯片,而在筆者使用的目標(biāo)板上面用的是DM9000E這顆芯片,所以我們需要更換“dm9000.c”這個(gè)驅(qū)動(dòng)程序,只要找到1.2版的DM9000的驅(qū)動(dòng)就可以支持DM9000E這顆芯片了。1.驅(qū)動(dòng)源碼獲取四、網(wǎng)卡驅(qū)動(dòng)在內(nèi)核里面網(wǎng)卡驅(qū)動(dòng)是相當(dāng)完善的,40四、網(wǎng)卡驅(qū)動(dòng)我們可以從/pub/linux/kernel/v2.6/下載一個(gè)linux-2.6.24.tar.bz2的源碼包,然后解壓,提取“drivers/net/dm9000.c”這個(gè)文件,這個(gè)驅(qū)動(dòng)文件是1.2版本的,用它去替換掉里面的對(duì)應(yīng)源碼即可開(kāi)始進(jìn)行我們的移植操作。1.驅(qū)動(dòng)源碼獲取四、網(wǎng)卡驅(qū)動(dòng)我們可以從ftp://ftp.k41四、網(wǎng)卡驅(qū)動(dòng)

我們只需要進(jìn)行簡(jiǎn)單的修改就可以成功的驅(qū)動(dòng)上開(kāi)發(fā)板上面的DM9000的網(wǎng)卡芯片。找到內(nèi)核源碼中的“arch/arm/plat-s3c24xx/common-smdk.c”文件,然后主要對(duì)它進(jìn)行修改:●添加對(duì)dm9000網(wǎng)卡的支持(46行)●在151行左右,添加部分代碼(見(jiàn)教材)●在199行左右,添加部分代碼(見(jiàn)教材)●在73行添加部分代碼(見(jiàn)教材)●在414行添加部分代碼(見(jiàn)教材)2.修改驅(qū)動(dòng)源碼四、網(wǎng)卡驅(qū)動(dòng)我們只需要進(jìn)行簡(jiǎn)單的修改就可以成42四、網(wǎng)卡驅(qū)動(dòng)●在428行添加部分代碼(見(jiàn)教材)●在628行添加部分代碼(見(jiàn)教材)●另外,這樣編譯之后網(wǎng)卡已經(jīng)能夠驅(qū)動(dòng),在linux中能正常使用,但是,如果使用nfs卻不能正常下載文件系統(tǒng),此時(shí)我們還必須修改dm9000.c這個(gè)文件。2.修改驅(qū)動(dòng)源碼四、網(wǎng)卡驅(qū)動(dòng)●在428行添加部分代碼(見(jiàn)教材)2.修改驅(qū)43四、網(wǎng)卡驅(qū)動(dòng)修改完以上的內(nèi)容之后,輸入一下命令進(jìn)行內(nèi)核的重新編譯: #makemenuconfig編譯完成之后,進(jìn)入配置單,然后添加上對(duì)DM9000網(wǎng)卡的配置,具體命令如下:3.配置并編譯四、網(wǎng)卡驅(qū)動(dòng)修改完以上的內(nèi)容之后,輸入一下命令44四、網(wǎng)卡驅(qū)動(dòng)DeviceDrivers--->Networkdevicesupport--->Ethernet(10or100Mbit)--->-*-GenericMediaIndependentInterfacedevicesupport<*>DM9000support(4)DM9000maximumdebuglevel配置好后,保存配置單,然后重新編譯出鏡像,再將鏡像燒寫到開(kāi)發(fā)板中。3.配置并編譯四、網(wǎng)卡驅(qū)動(dòng)DeviceDrivers--->3.配置45五、內(nèi)核裁剪1.取消虛擬內(nèi)存的支持2.取消多余的調(diào)度器3.取消對(duì)舊版本二進(jìn)制執(zhí)行文件的支持4.取消不必要的設(shè)備的支持5.取消不需要的文件系統(tǒng)的支持五、內(nèi)核裁剪1.取消虛擬內(nèi)存的支持46五、內(nèi)核裁剪1.取消虛擬內(nèi)存的支持

虛擬內(nèi)存一般并不需要,可以刪除。進(jìn)入“Generalsetup”菜單項(xiàng),將“Supportforpagingofanonymousmemory(swap)”項(xiàng)去選即可。具體命令顯示如下:Generalsetup--->[]Supportforpagingofanonymousmemory(swap)五、內(nèi)核裁剪1.取消虛擬內(nèi)存的支持虛擬內(nèi)存一47五、內(nèi)核裁剪2.取消多余的調(diào)度器

一般我們使用的調(diào)度器是默認(rèn)的IO調(diào)度器,所以可以刪除其他的調(diào)度器。進(jìn)入“Enabletheblocklayer”菜單項(xiàng),再進(jìn)入子菜單項(xiàng)“IOSchedulers”,將“AnticipatoryI/Oschdeuler”、“DeadlineI/Oscheduler”和“CFQI/Oscheduler”三項(xiàng)去選即可。具體命令顯示如下:五、內(nèi)核裁剪2.取消多余的調(diào)度器一般我們使用48五、內(nèi)核裁剪2.取消多余的調(diào)度器-*-Enabletheblocklayer--->IOSchedulers---><>AnticipatoryI/Oscheduler<*>DeadlineI/Oscheduler<>CFQI/OschedulerDefaultI/Oscheduler(Deadline)--->五、內(nèi)核裁剪2.取消多余的調(diào)度器-*-Enablethe49五、內(nèi)核裁剪3.取消對(duì)舊版本二進(jìn)制執(zhí)行文件的支持

對(duì)舊版本二進(jìn)制執(zhí)行文件的支持這項(xiàng)功能一般也是多余的,可以刪除。進(jìn)入“Userspacebinaryformats”菜單項(xiàng),將“Kernelsupportfora.outandECOFFbinaries”項(xiàng)去選即可。具體命令顯示如下:Userspacebinaryformats---><>Kernelsupportfora.outandECOFFbinaries五、內(nèi)核裁剪3.取消對(duì)舊版本二進(jìn)制執(zhí)行文件的支持50五、內(nèi)核裁剪4.取消不必要的設(shè)備的支持一般對(duì)不需要的設(shè)備支持驅(qū)動(dòng)也刪除,這里比較多,具體的命令顯示請(qǐng)參見(jiàn)教材。五、內(nèi)核裁剪4.取消不必要的設(shè)備的支持一般51五、內(nèi)核裁剪5.取消不需要的文件系統(tǒng)的支持

對(duì)多余的文件系統(tǒng),我們也會(huì)將其刪除以減小內(nèi)核的大小。有關(guān)Linux文件系統(tǒng)的概念,我們將會(huì)再下一章進(jìn)行具體介紹。具體命令為:Filesystems---><>Secondextendedfssupport<>Ext3journallingfilesystemsupport<>Ext4dev/ext4extendedfssupportdevelopment(EXPERIMENTAL)五、內(nèi)核裁剪5.取消不需要的文件系統(tǒng)的支持52五、內(nèi)核裁剪5.取消不需要的文件系統(tǒng)的支持Miscellaneousfilesystems---><>JournallingFlashFileSystemv2(JFFS2)support完成以上的優(yōu)化配置有,內(nèi)核鏡像會(huì)由之前的1.9MB縮減到1.7MB左右。五、內(nèi)核裁剪5.取消不需要的文件系統(tǒng)的支持Miscella53第八章定制內(nèi)核移植第八章定制內(nèi)核移植54重點(diǎn)內(nèi)容:內(nèi)核源碼組織內(nèi)核的定制Makefile定制網(wǎng)卡驅(qū)動(dòng)內(nèi)核裁剪第八章定制內(nèi)核移植重點(diǎn)內(nèi)容:第八章定制內(nèi)核移植55一、Linux內(nèi)核源碼組織Linux用來(lái)支持各種體系結(jié)構(gòu)的源代碼包含大約4500個(gè)C語(yǔ)言程序,存放在270個(gè)左右的子目錄下,總共大約包含200萬(wàn)行代碼,大概占用58MB磁盤空間。其文件結(jié)構(gòu)圖如圖所示:一、Linux內(nèi)核源碼組織Linux用來(lái)支持56一、Linux內(nèi)核源碼組織這里有的目錄是包含多個(gè)部分的內(nèi)容。具體各個(gè)目錄的內(nèi)容組成如下:●arch:arch目錄包括了所有和體系結(jié)構(gòu)相關(guān)的核心代碼。它下面的每一個(gè)子目錄都代表一種Linux支持的體系結(jié)構(gòu),例如i386就是IntelCPU及與之相兼容體系結(jié)構(gòu)的子目錄;●include:include目錄包括編譯核心所需要的大部分頭文件,例如與平臺(tái)無(wú)關(guān)的頭文件在include/linux子目錄下;一、Linux內(nèi)核源碼組織這里有的目錄是包含57一、Linux內(nèi)核源碼組織●init:init目錄包含核心的初始化代碼(不是系統(tǒng)的引導(dǎo)代碼),有main.c和Version.c兩個(gè)文件;●mm:mm目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下;●drivers:drivers目錄中是系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)程序。它又進(jìn)一步劃分成幾類設(shè)備驅(qū)動(dòng),每一種有對(duì)應(yīng)的子目錄,如聲卡的驅(qū)動(dòng)對(duì)應(yīng)于drivers/sound;●ipc:ipc目錄包含了核心進(jìn)程間的通信代碼;一、Linux內(nèi)核源碼組織●init:init目錄包含核心58一、Linux內(nèi)核源碼組織●modules:modules目錄存放了已建好的、可動(dòng)態(tài)加載的模塊;●fs:fs目錄存放Linux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄對(duì)應(yīng),如ext3文件系統(tǒng)對(duì)應(yīng)的就是ext3子目錄;●Kernel:Kernel內(nèi)核管理的核心代碼放在這里。同時(shí)與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下;●net:net目錄里是核心的網(wǎng)絡(luò)部分代碼,其每個(gè)子目錄對(duì)應(yīng)于網(wǎng)絡(luò)的一個(gè)方面;一、Linux內(nèi)核源碼組織●modules:modules59一、Linux內(nèi)核源碼組織●lib:lib目錄包含了核心的庫(kù)代碼,不過(guò)與處理器結(jié)構(gòu)相關(guān)的庫(kù)代碼被放在arch/*/lib/目錄下;●scripts:scripts目錄包含用于配置核心的腳本文件;●documentation:documentation目錄下是一些文檔,是對(duì)每個(gè)目錄作用的具體說(shuō)明。一般在每個(gè)目錄下都有一個(gè)depend文件和一個(gè)Makefile文件。這兩個(gè)文件都是編譯時(shí)使用的輔助文件。一、Linux內(nèi)核源碼組織●lib:lib目錄包含了核心的60二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2.Makefile3.具體配置操作4.添加自己代碼二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)61二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)ARM-Linux內(nèi)核的配置系統(tǒng)由三個(gè)部分組成:Makefile、配置文件和配置工具,它們之間的關(guān)系如圖所示:后綴名為.in的文件為提供選項(xiàng)的文件,通過(guò)配置工具配置之后生成配置文件,最后按照選項(xiàng)來(lái)調(diào)用源碼編譯成待燒錄到目標(biāo)板的鏡像文件zImage。整個(gè)過(guò)程都是由Makefile文件來(lái)調(diào)用管理的。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)ARM-Li62二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)1、MakefileMakefile是Linux系統(tǒng)中非常重要的一個(gè)組成部分,這我們前面也有所介紹。因?yàn)樵趲缀趺恳粋€(gè)子目錄下都會(huì)有Makefile文件。其中位于根目錄下的Makefile文件是總綱式Makefile文件,其它任何Makefile文件都是直接或間接被它調(diào)用。Makefile文件定義了各個(gè)目錄下文件如何被編譯,并最終形成zImage文件。當(dāng)然zImage文件的產(chǎn)生還要借助.config文件,它會(huì)告訴Makefile文件哪些文件被編譯進(jìn)內(nèi)核,哪些源文件沒(méi)有被用戶選中,并不需要被編譯進(jìn)內(nèi)核文件中。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)1、Makefile63二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2、配置文件在ARM-Linux系統(tǒng)中,配置文件存放在各個(gè)子目錄下,它們的名字通常被稱為config.in或Config.in文件,其中后綴名為in的表示的是提供選項(xiàng),而后綴名為config的則是表示是表示進(jìn)行選擇了某些選項(xiàng)之后的配置文件。存放在arch/arm目錄下的config.in文件為總綱領(lǐng)式配置文件,其它c(diǎn)onfig.in文件都是直接或間接被該文件調(diào)用。這些配置文件按照一定的格式編寫,用戶通過(guò)特定的工具可以讀這些配置文件來(lái)進(jìn)行ARM-Linux系統(tǒng)的配置,最終配置的選項(xiàng)結(jié)果存放在內(nèi)核根目錄.config文件中。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2、配置文件64二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)3、配置工具配置工具一般包括配置命令解釋器和配置用戶界面。前者主要作用是對(duì)配置腳本中使用的配置命令進(jìn)行解釋;而后者則是提供基于字符界面、基于Ncurses圖形界面以及基于Xwindows圖形界面的用戶配置界面,各自對(duì)應(yīng)于Makeconfig、Makemenuconfig和makexconfig。這些配置工具都是使用腳本語(yǔ)言,如Tcl/Tk、Perl編寫的(也包含一些用C編寫的代碼)。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)3、配置工具65二、內(nèi)核基本配置2.MakefileMakefile是分布在Linux內(nèi)核源碼的各個(gè)層次目錄中,定義Linux內(nèi)核的編譯規(guī)則。其主要作用是根據(jù)配置的情況,構(gòu)造出需要編譯的源文件列表,然后分別編譯,并把目標(biāo)代碼鏈接到一起,最終形成Linux內(nèi)核二進(jìn)制文件。1、Makefile概述由于Linux內(nèi)核源代碼是按照樹(shù)形結(jié)構(gòu)組織的,所以Makefile也被分布在目錄樹(shù)中。Linux內(nèi)核中的Makefile以及與Makefile直接相關(guān)的文件有:二、內(nèi)核基本配置2.MakefileMak66二、內(nèi)核基本配置2.Makefile●Makefile:頂層Makefile,是整個(gè)內(nèi)核配置、編譯的總體控制文件;●.config:內(nèi)核配置文件,包含由用戶選擇的配置選項(xiàng),用來(lái)存放內(nèi)核配置后的結(jié)果;●arch/*/Makefile:位于各種CPU體系目錄下的Makefile,其中“*”表示不同的平臺(tái),如arch/arm/Makefile,是針對(duì)arm平臺(tái)的Makefile;●各個(gè)子目錄下的Makefile:比如drivers/Makefile,負(fù)責(zé)所在子目錄下源代碼的管理與編譯;●Rules.make:規(guī)則文件,被所有的Makefile使用。二、內(nèi)核基本配置2.Makefile●Makefile:頂67二、內(nèi)核基本配置2.Makefile2、Makefile中的變量頂層Makefile定義并向環(huán)境中輸出了許多變量,為各個(gè)子目錄下的Makefile傳遞一些信息。有些變量,比如SUBDIRS,不僅在頂層Makefile中定義并且賦初值,而且在arch/*/Makefile還作了擴(kuò)充。常用的變量有以下幾類:●版本信息版本信息有:VERSION,PATCHLEVEL,SUBLEVEL,EXTRAVERSION,KERNELRELEASE。二、內(nèi)核基本配置2.Makefile2、Makefile68二、內(nèi)核基本配置2.Makefile●CPU體系結(jié)構(gòu):ARCH?!衤窂叫畔ⅲ篢OPDIR,SUBDIRS●內(nèi)核組成信息:HEAD,CORE_FILES,NETWORKS,DRIVERS,LIBS●編譯信息:CPP,CC,AS,LD,AR,CFLAGS,LINKFLAGS●配置變量CONFIG_*二、內(nèi)核基本配置2.Makefile●CPU體系結(jié)構(gòu):AR69二、內(nèi)核基本配置2.Makefile3、Rules.make變量Rules.make是編譯規(guī)則文件,所有的Makefile中都會(huì)包括Rules.make。Rules.make文件定義了許多變量,最為重要是那些編譯、鏈接列表變量,包括以下這些變量:●O_OBJS,L_OBJS,OX_OBJS,LX_OBJS:本目錄下需要編譯進(jìn)Linux內(nèi)核vmlinux的目標(biāo)文件列表,其中OX_OBJS和LX_OBJS中的“X”表明目標(biāo)文件使用了EXPORT_SYMBOL輸出符號(hào);二、內(nèi)核基本配置2.Makefile3、Rules.mak70二、內(nèi)核基本配置2.Makefile●M_OBJS,MX_OBJS:本目錄下需要被編譯成可裝載模塊的目標(biāo)文件列表。同樣,MX_OBJS中的“X”表明目標(biāo)文件使用了EXPORT_SYMBOL輸出符號(hào);●O_TARGET,L_TARGET:每個(gè)子目錄下都有一個(gè)O_TARGET或L_TARGET,Rules.make首先從源代碼編譯生成O_OBJS和OX_OBJS中所有的目標(biāo)文件,然后使用$(LD)-r把它們鏈接成一個(gè)O_TARGET或L_TARGET。O_TARGET以.o結(jié)尾,而L_TARGET以.a結(jié)尾。二、內(nèi)核基本配置2.Makefile●M_OBJS,MX_71二、內(nèi)核基本配置2.Makefile4、子目錄下的Makefile子目錄Makefile用來(lái)控制本級(jí)目錄以下源代碼的編譯規(guī)則。二、內(nèi)核基本配置2.Makefile4、子目錄下的Make72二、內(nèi)核基本配置3.具體配置操作內(nèi)核源碼的配置文件有自己的格式,這些文件中定義了makefile的使用命令。1、配置命令在Linux內(nèi)核中,配置命令有多種方式,如表所示:二、內(nèi)核基本配置3.具體配置操作內(nèi)核源碼的配73二、內(nèi)核基本配置3.具體配置操作2、配置語(yǔ)言配置語(yǔ)言在這里面使用很簡(jiǎn)單明了,主要包括: ●頂層菜單 ●詢問(wèn)語(yǔ)句 ●定義語(yǔ)句 ●依賴語(yǔ)句 ●選擇語(yǔ)句 ●if語(yǔ)句 ●Source語(yǔ)句 ●菜單塊(menublock)語(yǔ)句二、內(nèi)核基本配置3.具體配置操作2、配置語(yǔ)言74二、內(nèi)核基本配置3.具體配置操作3、缺省配置Linux內(nèi)核支持非常多的硬件平臺(tái),對(duì)于具體的硬件平臺(tái)而言,有些配置就是必需的,有些配置就不是必需的。另外,新增加功能的正常運(yùn)行往往也需要一定的先決條件,針對(duì)新功能,必須作相應(yīng)的配置。因此,特定硬件平臺(tái)能夠正常運(yùn)行對(duì)應(yīng)著一個(gè)最小的基本配置,這就是缺省配置。二、內(nèi)核基本配置3.具體配置操作3、缺省配置75二、內(nèi)核基本配置3.具體配置操作

Linux內(nèi)核中針對(duì)每個(gè)ARCH都會(huì)有一個(gè)缺省配置。在向內(nèi)核代碼增加了新的功能后,如果新功能對(duì)于這個(gè)ARCH是必需的,就要修改此ARCH的缺省配置。二、內(nèi)核基本配置3.具體配置操作Linux內(nèi)76二、內(nèi)核基本配置3.具體配置操作4、幫助文件在配置Linux內(nèi)核時(shí),遇到不懂含義的配置選項(xiàng),可以查看它的幫助,從中可得到選擇的建議。所有配置選項(xiàng)的幫助信息都在Documentation/Configure.help中,它的格式為:<description><variablename><helpfile>二、內(nèi)核基本配置3.具體配置操作4、幫助文件77二、內(nèi)核基本配置3.具體配置操作<description>給出本配置選項(xiàng)的名稱,<variablename>對(duì)應(yīng)配置變量,<helpfile>對(duì)應(yīng)配置幫助信息。在幫助信息中,首先簡(jiǎn)單描述此功能,其次說(shuō)明選擇了此功能后會(huì)有什么效果,不選擇又有什么效果。二、內(nèi)核基本配置3.具體配置操作<description>78二、內(nèi)核基本配置4.添加自己代碼對(duì)于一個(gè)開(kāi)發(fā)者來(lái)說(shuō),將自己開(kāi)發(fā)的內(nèi)核代碼加入到Linux內(nèi)核中,需要有三個(gè)步驟:1)首先確定把自己開(kāi)發(fā)代碼放入到內(nèi)核的位置;2)其次,把自己開(kāi)發(fā)的功能增加到Linux內(nèi)核的配置選項(xiàng)中,使用戶能夠選擇此功能;3)最后,構(gòu)建子目錄Makefile,根據(jù)用戶的選擇,將相應(yīng)的代碼編譯到最終生成的Linux內(nèi)核中去。二、內(nèi)核基本配置4.添加自己代碼對(duì)于一個(gè)開(kāi)79三、內(nèi)核定制1.源碼獲取2.移植過(guò)程三、內(nèi)核定制1.源碼獲取80三、內(nèi)核定制1.源碼獲取源碼的獲取有很多途徑,我們可以從/pub/linux/kernel/v2.6/獲取,這是Linux內(nèi)核的官方網(wǎng)站,定期發(fā)布最新的內(nèi)核,以修補(bǔ)Linux內(nèi)核在使用中的各種bug,可以根據(jù)自己的需要下載適合自己的版本。1.源碼獲取三、內(nèi)核定制1.源碼獲取源碼的獲取有很多途徑81三、內(nèi)核定制2.移植過(guò)程Linux內(nèi)核的移植過(guò)程比較繁瑣,具體步驟:1、解壓內(nèi)核文件解壓文件可以點(diǎn)擊右鍵,選擇“extracthere”命令;也可以在終端中,輸入如下命令: tarxfvlinux-2.6.29.tar.bz2然后進(jìn)入內(nèi)核目錄,輸入如下命令: cdlinux-2.6.292.移植過(guò)程三、內(nèi)核定制2.移植過(guò)程Linux內(nèi)核的移植82三、內(nèi)核定制2、修改機(jī)器碼內(nèi)核的機(jī)器碼必須跟Bootloader中一致,不管是u-boot還是vivi,在smdk2440使用的uboot的機(jī)器碼是168,這里需要修改機(jī)器碼,否則會(huì)出現(xiàn)不能啟動(dòng)的情況。機(jī)器碼保存在內(nèi)核源碼的“arch/arm/tools/mach-types”文件中,大概在379行,把原來(lái)的數(shù)字“362”改為“168”。也可以修改uboot中的機(jī)器碼,在“\include\asm-arm\mach-types.h”文件中,找到“#defineMACH_TYPE_S3C2440168”,將其中的數(shù)字“168”改成與linux內(nèi)核一致的機(jī)器碼,注意,這個(gè)機(jī)器碼要沒(méi)有使用的,否則會(huì)編譯中提示沖突。然后保存即可。2.移植過(guò)程三、內(nèi)核定制2、修改機(jī)器碼2.移植過(guò)程83三、內(nèi)核定制3、修改內(nèi)核源碼根目錄下的Makefile文件內(nèi)核的編譯是根據(jù)Makefile文件中的內(nèi)容進(jìn)行的,所以首先需要修改根目錄下的Makefile文件。更改目標(biāo)代碼的類型,并未編譯內(nèi)核指定一個(gè)編譯器。修改后詳細(xì)內(nèi)容顯示如下:#ARCH?=arm#CROSS_COMPILE?=arm-linux-

ARCH是指架構(gòu),這里我們選擇arm架構(gòu),所以修改成:“#ARCH?=arm”;CROSS_COMPILE是指編譯器,由于要在開(kāi)發(fā)板上運(yùn)行,需要使用交叉編譯器,所以改為:“#CROSS_COMPILE?=arm-linnux-”。2.移植過(guò)程三、內(nèi)核定制3、修改內(nèi)核源碼根目錄下的Makefile文件84三、內(nèi)核定制4、修改“arch/arm/plat-s3c24xx/common-smdk.c”文件,修改NandFlash的分區(qū)信息和NandFlash的硬件信息。這個(gè)文件的修改有兩處,具體為:●smdk_default_nand_part,●smdk_nand_info2.移植過(guò)程三、內(nèi)核定制4、修改“arch/arm/plat-s3c2485三、內(nèi)核定制5、修改時(shí)鐘頻率修改平臺(tái)的時(shí)鐘頻率,以滿足smdk2440工作頻率。修改內(nèi)核源碼,否則在超級(jí)終端中會(huì)出現(xiàn)亂碼。6、增加Yaffs2文件系統(tǒng)的支持解壓Yaffs2并以打補(bǔ)丁的方式將其加入Linux內(nèi)核。最新的yaffs2源代碼包可以從http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs.tar.gz?view=tar獲得。具體操作命令如下:#cdyaffs2#./patch-ker.shc/(linux內(nèi)核路徑)2.移植過(guò)程三、內(nèi)核定制5、修改時(shí)鐘頻率2.移植過(guò)程86三、內(nèi)核定制7、配置內(nèi)核先拷貝s3c2440開(kāi)發(fā)板的默認(rèn)配置到內(nèi)核根目錄下,以簡(jiǎn)化配置過(guò)程,使用如下命令:#cparch/arm/configs/s3c2440_defconfig.config#makemenuconfig2.移植過(guò)程三、內(nèi)核定制7、配置內(nèi)核2.移植過(guò)程87三、內(nèi)核定制下面是Linxu內(nèi)核的幾個(gè)主要配置選項(xiàng):(1) Generalsetup常規(guī)選項(xiàng)設(shè)置(2)SystemType:系統(tǒng)類型(3)Bootoptions:引導(dǎo)選項(xiàng)(4)Enableloadablemodulesupport:對(duì)模塊的支持(5)DeviceDrivers:設(shè)備驅(qū)動(dòng)(6)Filesystems:文件系統(tǒng)2.移植過(guò)程三、內(nèi)核定制下面是Linxu內(nèi)核的幾個(gè)主要配置選項(xiàng):2.移植88三、內(nèi)核定制8、編譯配置好編譯選項(xiàng)之后就可以編譯內(nèi)核了,輸入以下命令: makezImage系統(tǒng)就開(kāi)始編譯內(nèi)核了。一般內(nèi)核編譯需要一定的時(shí)間,十幾分鐘到幾十分鐘不等,具體視個(gè)人機(jī)器而定。編譯結(jié)束之后,會(huì)在“/arch/arm/boot/”目錄下面和者根目錄下面生成一個(gè)名為“zImage”的內(nèi)核鏡像文件。同時(shí)在根目錄中生成另外三個(gè)文件,如圖所示:2.移植過(guò)程三、內(nèi)核定制8、編譯2.移植過(guò)程89三、內(nèi)核定制2.移植過(guò)程三、內(nèi)核定制2.移植過(guò)程90三、內(nèi)核定制vmlinux、System.map和initrd-x.x.x.img三種文件時(shí)Linux內(nèi)核編譯之后可以生成的三種鏡像文件格式。這是這三個(gè)鏡像文件之間略有不同,下面詳細(xì)比較說(shuō)明各種格式的文件特性:1、vmlinuxvmlinux是可引導(dǎo)的、壓縮的內(nèi)核?!皏m”代表“VirtualMemory”。Linux支持虛擬內(nèi)存,不像老的操作系統(tǒng)比如DOS有640KB內(nèi)存的限制。Linux能夠使用硬盤空間作為虛擬內(nèi)存,因此得名“vm”。2.移植過(guò)程三、內(nèi)核定制vmlinux、System.m91三、內(nèi)核定制2、System.mapSystem.map是一個(gè)特定內(nèi)核的內(nèi)核符號(hào)表。它是當(dāng)前運(yùn)行的內(nèi)核的System.map的鏈接。它是由“nmvmlinux”產(chǎn)生的,并且將不相關(guān)的符號(hào)濾除掉。3、initrd-x.x.x.imginitrd是“initialramdisk”的簡(jiǎn)寫。initrd一般被用來(lái)臨時(shí)的引導(dǎo)硬件到實(shí)際內(nèi)核vmlinuz能夠接管并繼續(xù)引導(dǎo)的狀態(tài)。例如ubuntu的initrd.img主要是用于加載ext3等文件系統(tǒng)及scsi設(shè)備的驅(qū)動(dòng)。2.移植過(guò)程三、內(nèi)核定制2、System.map2.移植過(guò)程92四、網(wǎng)卡驅(qū)動(dòng)1.驅(qū)動(dòng)源碼獲取2.修改驅(qū)動(dòng)源碼3.配置并編譯四、網(wǎng)卡驅(qū)動(dòng)1.驅(qū)動(dòng)源碼獲取93四、網(wǎng)卡驅(qū)動(dòng)在內(nèi)核里面網(wǎng)卡驅(qū)動(dòng)是相當(dāng)完善的,這里需要注意一件事情,從2.6.25開(kāi)始的內(nèi)核的“drivers/net/dm9000.c”這個(gè)文件對(duì)應(yīng)的DM9000的驅(qū)動(dòng)(版本為1.3版)并不適合DM9000E這顆芯片,而在筆者使用的目標(biāo)板上面用的是DM9000E這顆芯片,所以我們需要更換“dm9000.c”這個(gè)驅(qū)動(dòng)程序,只要找到1.2版的DM9000的驅(qū)動(dòng)就可以支持DM9000E這顆芯片了。1.驅(qū)動(dòng)源碼獲取四、網(wǎng)卡驅(qū)動(dòng)在內(nèi)核里面網(wǎng)卡驅(qū)動(dòng)是相當(dāng)完善的,94四、網(wǎng)卡驅(qū)動(dòng)我們可以從/pub/linux/kernel/v2.6/下載一個(gè)linux-2.6.24.tar.bz2的源碼包,然后解壓,提取“drivers/net/dm9000.c”這個(gè)文件,這個(gè)驅(qū)動(dòng)文件是1.2版本的,用它去替換掉里面的對(duì)應(yīng)源碼即可開(kāi)始進(jìn)行我們的移植操作。1.驅(qū)動(dòng)源碼獲取四、網(wǎng)卡驅(qū)動(dòng)我們可以從ftp://ftp.k95四、網(wǎng)卡驅(qū)動(dòng)

我們只需要進(jìn)行簡(jiǎn)單的修改就可以成功的驅(qū)動(dòng)上開(kāi)發(fā)板上面的DM9000的網(wǎng)卡芯片。找到內(nèi)核源碼中的“arch/arm/plat-s3c24xx/common-smdk.c”文件,然后主要對(duì)它進(jìn)行修改:●添加對(duì)dm9000網(wǎng)卡的支持(46行)●在151行左右,添加部分代碼(見(jiàn)教材)●在199行左右,添加部分代碼(見(jiàn)教材)●在73行添加部分代碼(見(jiàn)教材)●在414行添加部分代碼(見(jiàn)教材)2.修改驅(qū)動(dòng)源碼四、網(wǎng)卡驅(qū)動(dòng)我們只需要進(jìn)行簡(jiǎn)單的修改就可以成96四、網(wǎng)卡驅(qū)動(dòng)●在428行添加部分代碼(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論