版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
嵌入式單片機原理第八章第一頁,共55頁。一、Linux內(nèi)核源碼組織Linux用來支持各種體系結(jié)構(gòu)的源代碼包含大約4500個C語言程序,存放在270個左右的子目錄下,總共大約包含200萬行代碼,大概占用58MB磁盤空間。其文件結(jié)構(gòu)圖如圖所示:第二頁,共55頁。一、Linux內(nèi)核源碼組織這里有的目錄是包含多個部分的內(nèi)容。具體各個目錄的內(nèi)容組成如下:●arch:arch目錄包括了所有和體系結(jié)構(gòu)相關的核心代碼。它下面的每一個子目錄都代表一種Linux支持的體系結(jié)構(gòu),例如i386就是IntelCPU及與之相兼容體系結(jié)構(gòu)的子目錄;●include:include目錄包括編譯核心所需要的大部分頭文件,例如與平臺無關的頭文件在include/linux子目錄下;第三頁,共55頁。一、Linux內(nèi)核源碼組織●init:init目錄包含核心的初始化代碼(不是系統(tǒng)的引導代碼),有main.c和Version.c兩個文件;●mm:mm目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關的內(nèi)存管理代碼位于arch/*/mm目錄下;●drivers:drivers目錄中是系統(tǒng)中所有的設備驅(qū)動程序。它又進一步劃分成幾類設備驅(qū)動,每一種有對應的子目錄,如聲卡的驅(qū)動對應于drivers/sound;●ipc:ipc目錄包含了核心進程間的通信代碼;第四頁,共55頁。一、Linux內(nèi)核源碼組織●modules:modules目錄存放了已建好的、可動態(tài)加載的模塊;●fs:fs目錄存放Linux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄對應,如ext3文件系統(tǒng)對應的就是ext3子目錄;●Kernel:Kernel內(nèi)核管理的核心代碼放在這里。同時與處理器結(jié)構(gòu)相關代碼都放在arch/*/kernel目錄下;●net:net目錄里是核心的網(wǎng)絡部分代碼,其每個子目錄對應于網(wǎng)絡的一個方面;第五頁,共55頁。一、Linux內(nèi)核源碼組織●lib:lib目錄包含了核心的庫代碼,不過與處理器結(jié)構(gòu)相關的庫代碼被放在arch/*/lib/目錄下;●scripts:scripts目錄包含用于配置核心的腳本文件;●documentation:documentation目錄下是一些文檔,是對每個目錄作用的具體說明。一般在每個目錄下都有一個depend文件和一個Makefile文件。這兩個文件都是編譯時使用的輔助文件。第六頁,共55頁。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2.Makefile3.具體配置操作4.添加自己代碼第七頁,共55頁。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)ARM-Linux內(nèi)核的配置系統(tǒng)由三個部分組成:Makefile、配置文件和配置工具,它們之間的關系如圖所示:后綴名為.in的文件為提供選項的文件,通過配置工具配置之后生成配置文件,最后按照選項來調(diào)用源碼編譯成待燒錄到目標板的鏡像文件zImage。整個過程都是由Makefile文件來調(diào)用管理的。第八頁,共55頁。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)1、MakefileMake系統(tǒng)中非常重要的一個組成部分,這我們前面也有所介紹。因為在幾乎每一個子目錄下都會有Makefile文件。其中位于根目錄下的Makefile文件是總綱式Makefile文件,其它任何Makefile文件都是直接或間接被它調(diào)用。Makefile文件定義了各個目錄下文件如何被編譯,并最終形成zImage文件。當然zImage文件的產(chǎn)生還要借助.config文件,它會告訴Makefile文件哪些文件被編譯進內(nèi)核,哪些源文件沒有被用戶選中,并不需要被編譯進內(nèi)核文件中。第九頁,共55頁。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)2、配置文件在ARM-Linux系統(tǒng)中,配置文件存放在各個子目錄下,它們的名字通常被稱為config.in或Config.in文件,其中后綴名為in的表示的是提供選項,而后綴名為config的則是表示是表示進行選擇了某些選項之后的配置文件。存放在arch/arm目錄下的config.in文件為總綱領式配置文件,其它config.in文件都是直接或間接被該文件調(diào)用。這些配置文件按照一定的格式編寫,用戶通過特定的工具可以讀這些配置文件來進行ARM-Linux系統(tǒng)的配置,最終配置的選項結(jié)果存放在內(nèi)核根目錄.config文件中。第十頁,共55頁。二、內(nèi)核基本配置1.內(nèi)核配置系統(tǒng)3、配置工具配置工具一般包括配置命令解釋器和配置用戶界面。前者主要作用是對配置腳本中使用的配置命令進行解釋;而后者則是提供基于字符界面、基于Ncurses圖形界面以及基于Xwindows圖形界面的用戶配置界面,各自對應于Makeconfig、Makemenuconfig和makexconfig。這些配置工具都是使用腳本語言,如Tcl/Tk、Perl編寫的(也包含一些用C編寫的代碼)。第十一頁,共55頁。二、內(nèi)核基本配置2.MakefileMakefile是分布在Linux內(nèi)核源碼的各個層次目錄中,定義Linux內(nèi)核的編譯規(guī)則。其主要作用是根據(jù)配置的情況,構(gòu)造出需要編譯的源文件列表,然后分別編譯,并把目標代碼鏈接到一起,最終形成Linux內(nèi)核二進制文件。1、Makefile概述由于Linux內(nèi)核源代碼是按照樹形結(jié)構(gòu)組織的,所以Makefile也被分布在目錄樹中。Linux內(nèi)核中的Makefile以及與Makefile直接相關的文件有:第十二頁,共55頁。二、內(nèi)核基本配置2.Makefile●Makefile:頂層Makefile,是整個內(nèi)核配置、編譯的總體控制文件;●.config:內(nèi)核配置文件,包含由用戶選擇的配置選項,用來存放內(nèi)核配置后的結(jié)果;●arch/*/Makefile:位于各種CPU體系目錄下的Makefile,其中“*”表示不同的平臺,如arch/arm/Makefile,是針對arm平臺的Makefile;●各個子目錄下的Makefile:比如drivers/Makefile,負責所在子目錄下源代碼的管理與編譯;●Rules.make:規(guī)則文件,被所有的Makefile使用。第十三頁,共55頁。二、內(nèi)核基本配置2.Makefile2、Makefile中的變量頂層Makefile定義并向環(huán)境中輸出了許多變量,為各個子目錄下的Makefile傳遞一些信息。有些變量,比如SUBDIRS,不僅在頂層Makefile中定義并且賦初值,而且在arch/*/Makefile還作了擴充。常用的變量有以下幾類:●版本信息版本信息有:VERSION,PATCHLEVEL,SUBLEVEL,EXTRAVERSION,KERNELRELEASE。第十四頁,共55頁。二、內(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_*第十五頁,共55頁。二、內(nèi)核基本配置2.Makefile3、Rules.make變量Rules.make是編譯規(guī)則文件,所有的Makefile中都會包括Rules.make。Rules.make文件定義了許多變量,最為重要是那些編譯、鏈接列表變量,包括以下這些變量:●O_OBJS,L_OBJS,OX_OBJS,LX_OBJS:本目錄下需要編譯進Linux內(nèi)核vmlinux的目標文件列表,其中OX_OBJS和LX_OBJS中的“X”表明目標文件使用了EXPORT_SYMBOL輸出符號;第十六頁,共55頁。二、內(nèi)核基本配置2.Makefile●M_OBJS,MX_OBJS:本目錄下需要被編譯成可裝載模塊的目標文件列表。同樣,MX_OBJS中的“X”表明目標文件使用了EXPORT_SYMBOL輸出符號;●O_TARGET,L_TARGET:每個子目錄下都有一個O_TARGET或L_TARGET,Rules.make首先從源代碼編譯生成O_OBJS和OX_OBJS中所有的目標文件,然后使用$(LD)-r把它們鏈接成一個O_TARGET或L_TARGET。O_TARGET以.o結(jié)尾,而L_TARGET以.a結(jié)尾。第十七頁,共55頁。二、內(nèi)核基本配置2.Makefile4、子目錄下的Makefile子目錄Makefile用來控制本級目錄以下源代碼的編譯規(guī)則。第十八頁,共55頁。二、內(nèi)核基本配置3.具體配置操作內(nèi)核源碼的配置文件有自己的格式,這些文件中定義了makefile的使用命令。1、配置命令在Linux內(nèi)核中,配置命令有多種方式,如表所示:第十九頁,共55頁。二、內(nèi)核基本配置3.具體配置操作2、配置語言配置語言在這里面使用很簡單明了,主要包括: ●頂層菜單 ●詢問語句 ●定義語句 ●依賴語句 ●選擇語句 ●if語句 ●Source語句 ●菜單塊(menublock)語句第二十頁,共55頁。二、內(nèi)核基本配置3.具體配置操作3、缺省配置Linux內(nèi)核支持非常多的硬件平臺,對于具體的硬件平臺而言,有些配置就是必需的,有些配置就不是必需的。另外,新增加功能的正常運行往往也需要一定的先決條件,針對新功能,必須作相應的配置。因此,特定硬件平臺能夠正常運行對應著一個最小的基本配置,這就是缺省配置。第二十一頁,共55頁。二、內(nèi)核基本配置3.具體配置操作
Linux內(nèi)核中針對每個ARCH都會有一個缺省配置。在向內(nèi)核代碼增加了新的功能后,如果新功能對于這個ARCH是必需的,就要修改此ARCH的缺省配置。第二十二頁,共55頁。二、內(nèi)核基本配置3.具體配置操作4、幫助文件在配置Linux內(nèi)核時,遇到不懂含義的配置選項,可以查看它的幫助,從中可得到選擇的建議。所有配置選項的幫助信息都在Documentation/Configure.help中,它的格式為:<description><variablename><helpfile>第二十三頁,共55頁。二、內(nèi)核基本配置3.具體配置操作<description>給出本配置選項的名稱,<variablename>對應配置變量,<helpfile>對應配置幫助信息。在幫助信息中,首先簡單描述此功能,其次說明選擇了此功能后會有什么效果,不選擇又有什么效果。第二十四頁,共55頁。二、內(nèi)核基本配置4.添加自己代碼對于一個開發(fā)者來說,將自己開發(fā)的內(nèi)核代碼加入到Linux內(nèi)核中,需要有三個步驟:1)首先確定把自己開發(fā)代碼放入到內(nèi)核的位置;2)其次,把自己開發(fā)的功能增加到Linux內(nèi)核的配置選項中,使用戶能夠選擇此功能;3)最后,構(gòu)建子目錄Makefile,根據(jù)用戶的選擇,將相應的代碼編譯到最終生成的Linux內(nèi)核中去。第二十五頁,共55頁。三、內(nèi)核定制1.源碼獲取2.移植過程第二十六頁,共55頁。三、內(nèi)核定制1.源碼獲取源碼的獲取有很多途徑,我們可以從獲取,這是Linux內(nèi)核的官方網(wǎng)站,定期發(fā)布最新的內(nèi)核,以修補Linux內(nèi)核在使用中的各種bug,可以根據(jù)自己的需要下載適合自己的版本。1.源碼獲取第二十七頁,共55頁。三、內(nèi)核定制2.移植過程Linux內(nèi)核的移植過程比較繁瑣,具體步驟:1、解壓內(nèi)核文件解壓文件可以點擊右鍵,選擇“extracthere”命令;也可以在終端中,輸入如下命令: tarxfvlinux-2.6.29.tar.bz2然后進入內(nèi)核目錄,輸入如下命令: cdlinux-2.6.292.移植過程第二十八頁,共55頁。三、內(nèi)核定制2、修改機器碼內(nèi)核的機器碼必須跟Bootloader中一致,不管是u-boot還是vivi,在smdk2440使用的uboot的機器碼是168,這里需要修改機器碼,否則會出現(xiàn)不能啟動的情況。機器碼保存在內(nèi)核源碼的“arch/arm/tools/mach-types”文件中,大概在379行,把原來的數(shù)字“362”改為“168”。也可以修改uboot中的機器碼,在“\include\asm-arm\mach-types.h”文件中,找到“#defineMACH_TYPE_S3C2440168”,將其中的數(shù)字“168”改成與linux內(nèi)核一致的機器碼,注意,這個機器碼要沒有使用的,否則會編譯中提示沖突。然后保存即可。2.移植過程第二十九頁,共55頁。三、內(nèi)核定制3、修改內(nèi)核源碼根目錄下的Makefile文件內(nèi)核的編譯是根據(jù)Makefile文件中的內(nèi)容進行的,所以首先需要修改根目錄下的Makefile文件。更改目標代碼的類型,并未編譯內(nèi)核指定一個編譯器。修改后詳細內(nèi)容顯示如下:#ARCH?=arm#CROSS_COMPILE?=arm-linux-
ARCH是指架構(gòu),這里我們選擇arm架構(gòu),所以修改成:“#ARCH?=arm”;CROSS_COMPILE是指編譯器,由于要在開發(fā)板上運行,需要使用交叉編譯器,所以改為:“#CROSS_COMPILE?=arm-linnux-”。2.移植過程第三十頁,共55頁。三、內(nèi)核定制4、修改“arch/arm/plat-s3c24xx/common-smdk.c”文件,修改NandFlash的分區(qū)信息和NandFlash的硬件信息。這個文件的修改有兩處,具體為:●smdk_default_nand_part,●smdk_nand_info2.移植過程第三十一頁,共55頁。三、內(nèi)核定制5、修改時鐘頻率修改平臺的時鐘頻率,以滿足smdk2440工作頻率。修改內(nèi)核源碼,否則在超級終端中會出現(xiàn)亂碼。6、增加Yaffs2文件系統(tǒng)的支持解壓Yaffs2并以打補丁的方式將其加入Linux內(nèi)核。最新的yaffs2源代碼包可以從獲得。具體操作命令如下:#cdyaffs2#./patch-ker.shc/(linux內(nèi)核路徑)2.移植過程第三十二頁,共55頁。三、內(nèi)核定制7、配置內(nèi)核先拷貝s3c2440開發(fā)板的默認配置到內(nèi)核根目錄下,以簡化配置過程,使用如下命令:#cparch/arm/configs/s3c2440_defconfig.config#makemenuconfig2.移植過程第三十三頁,共55頁。三、內(nèi)核定制下面是Linxu內(nèi)核的幾個主要配置選項:(1) Generalsetup常規(guī)選項設置(2)SystemType:系統(tǒng)類型(3)Bootoptions:引導選項(4)Enableloadablemodulesupport:對模塊的支持(5)DeviceDrivers:設備驅(qū)動(6):文件系統(tǒng)2.移植過程第三十四頁,共55頁。三、內(nèi)核定制8、編譯配置好編譯選項之后就可以編譯內(nèi)核了,輸入以下命令: makezImage系統(tǒng)就開始編譯內(nèi)核了。一般內(nèi)核編譯需要一定的時間,十幾分鐘到幾十分鐘不等,具體視個人機器而定。編譯結(jié)束之后,會在“/arch/arm/boot/”目錄下面和者根目錄下面生成一個名為“zImage”的內(nèi)核鏡像文件。同時在根目錄中生成另外三個文件,如圖所示:2.移植過程第三十五頁,共55頁。三、內(nèi)核定制2.移植過程第三十六頁,共55頁。三、內(nèi)核定制vmlinux、System.map和initrd-x.x.x.img三種文件時Linux內(nèi)核編譯之后可以生成的三種鏡像文件格式。這是這三個鏡像文件之間略有不同,下面詳細比較說明各種格式的文件特性:1、vmlinuxvmlinux是可引導的、壓縮的內(nèi)核?!皏m”代表“VirtualMemory”。Linux支持虛擬內(nèi)存,不像老的操作系統(tǒng)比如DOS有640KB內(nèi)存的限制。Linux能夠使用硬盤空間作為虛擬內(nèi)存,因此得名“vm”。2.移植過程第三十七頁,共55頁。三、內(nèi)核定制2、System.mapSystem.map是一個特定內(nèi)核的內(nèi)核符號表。它是當前運行的內(nèi)核的System.map的鏈接。它是由“nmvmlinux”產(chǎn)生的,并且將不相關的符號濾除掉。3、initrd-x.x.x.imginitrd是“initialramdisk”的簡寫。initrd一般被用來臨時的引導硬件到實際內(nèi)核vmlinuz能夠接管并繼續(xù)引導的狀態(tài)。例如ubuntu的initrd.img主要是用于加載ext3等文件系統(tǒng)及scsi設備的驅(qū)動。2.移植過程第三十八頁,共55頁。四、網(wǎng)卡驅(qū)動1.驅(qū)動源碼獲取2.修改驅(qū)動源碼3.配置并編譯第三十九頁,共55頁。四、網(wǎng)卡驅(qū)動在內(nèi)核里面網(wǎng)卡驅(qū)動是相當完善的,這里需要注意一件事情,從2.6.25開始的內(nèi)核的“drivers/net/dm9000.c”這個文件對應的DM9000的驅(qū)動(版本為1.3版)并不適合DM9000E這顆芯片,而在筆者使用的目標板上面用的是DM9000E這顆芯片,所以我們需要更換“dm9000.c”這個驅(qū)動程序,只要找到1.2版的DM9000的驅(qū)動就可以支持DM9000E這顆芯片了。1.驅(qū)動源碼獲取第四十頁,共55頁。四、網(wǎng)卡驅(qū)動我們可以從下載一個linux-2.6.24.tar.bz2的源碼包,然后解壓,提取“drivers/net/dm9000.c”這個文件,這個驅(qū)動文件是1.2版本的,用它去替換掉2.6.29.3里面的對應源碼即可開始進行我們的移植操作。1.驅(qū)動源碼獲取第四十一頁,共55頁。四、網(wǎng)卡驅(qū)動
我們只需要進行簡單的修改就可以成功的驅(qū)動上開發(fā)板上面的DM9000的網(wǎng)卡芯片。找到內(nèi)核源碼中的“arch/arm/plat-s3c24xx/common-smdk.c”文件,然后主要對它進行修改:●添加對dm9000網(wǎng)卡的支持(46行)●在151行左右,添加部分代碼(見教材)●在199行左右,添加部分代碼(見教材)●在73行添加部分代碼(見教材)●在414行添加部分代碼(見教材)2.修改驅(qū)動源碼第四十二頁,共55頁。四、網(wǎng)卡驅(qū)動●在428行添加部分代碼(見教材)●在628行添加部分代碼(見教材)●另外,這樣編譯之后網(wǎng)卡已經(jīng)能夠驅(qū)動,在linux中能正常使用,但是,如果使用nfs卻不能正常下載文件系統(tǒng),此時我們還必須修改dm9000.c這個文件。2.修改驅(qū)動源碼第四十三頁,共55頁。四、網(wǎng)卡驅(qū)動修改完以上的內(nèi)容之后,輸入一下命令進行內(nèi)核的重新編譯: #makemenuconfig編譯完成之后,進入配置單,然后添加上對DM9000網(wǎng)卡的配置,具體命令如下:3.配置并編譯第四十四頁,共55頁。四、網(wǎng)卡驅(qū)動DeviceDrivers--->Networkdevicesupport--->Ethernet(10or100Mbit)--->-*-GenericMediaIndependentInterfacedevicesupport<*>DM9000support(4)DM9000maximumdebuglevel配置好后,保存配置單,然后重新編譯出鏡像,再將鏡像燒寫到開發(fā)板中。3.配置并編譯第四十五頁,共55頁。五、內(nèi)核裁剪1.取消虛擬內(nèi)存的支持2.取消多余的調(diào)度器3.取消對舊版本二進制執(zhí)行文件的支持4.取消不必要的設備的支持5.取消不需要的文件系統(tǒng)的支持第四十六頁,共55頁。五、內(nèi)核裁剪1.取消虛擬內(nèi)存的支持
虛擬內(nèi)存一般并不需要,可以刪除。進入“Generalsetup”菜單項,將“Supportforpagingofanonymousmemory(swap)”項去選即可。具體命令顯示如下:Generalsetup--->[]Supportforpagingofanonymousmemory(swap)第四十七頁,共55頁。五、內(nèi)核裁剪2.取消多余的調(diào)度器
一般我們使用的調(diào)度器是默認的IO調(diào)度器,所以可以刪除其他的調(diào)度器。進入“Enabletheblocklayer”菜單項,再進入子菜單項“IOSchedulers”,將“AnticipatoryI/Oschdeuler”、“DeadlineI/Oscheduler”和“
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肺結(jié)核培訓課件鄉(xiāng)鎮(zhèn)
- 2026年汽車數(shù)據(jù)共享培訓
- 2026年倉儲管理技術(shù)應用培訓
- 2026年財務分析技能培訓
- 1·《莊子》二則 教學課件
- 醫(yī)患關系改善的積極因素
- 超市內(nèi)部消防安全管理
- 卡通手繪小學生新年新學期新計劃模板
- 卡通插畫中小學開學季主題教育模板
- 職業(yè)發(fā)展規(guī)劃精要
- 2025年衛(wèi)生人才評價考試(臨床醫(yī)學工程技術(shù)中級)歷年參考題庫含答案
- 呼吸康復科普脫口秀
- 2025年《思想道德與法治》期末考試題庫及答案
- 2025初一英語閱讀理解100篇
- 2026屆四川省成都市青羊區(qū)樹德實驗中學物理九年級第一學期期末考試試題含解析
- 高溫熔融金屬冶煉安全知識培訓課
- 林業(yè)種苗培育與管理技術(shù)規(guī)范
- 遼寧中考數(shù)學三年(2023-2025)真題分類匯編:專題06 幾何與二次函數(shù)壓軸題 解析版
- 修復征信服務合同范本
- 湖南省5年(2021-2025)高考物理真題分類匯編:專題11 近代物理(原卷版)
- 螺桿泵知識點培訓課件
評論
0/150
提交評論