嵌入式Linux內(nèi)核裁減移植_第1頁
嵌入式Linux內(nèi)核裁減移植_第2頁
嵌入式Linux內(nèi)核裁減移植_第3頁
嵌入式Linux內(nèi)核裁減移植_第4頁
嵌入式Linux內(nèi)核裁減移植_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式嵌入式Linux內(nèi)核裁減移植內(nèi)核裁減移植課程安排課程安排nLinux內(nèi)核配置與編譯內(nèi)核配置與編譯nLinux內(nèi)核內(nèi)核MakefilenLinux內(nèi)核啟動流程內(nèi)核啟動流程Linux系統(tǒng)結(jié)構(gòu)系統(tǒng)結(jié)構(gòu)用戶與內(nèi)核空間用戶與內(nèi)核空間 從上圖得從上圖得 知,知, LinuxLinux由由 用戶空間用戶空間和和內(nèi)核內(nèi)核空間空間兩部分組兩部分組 成。成。 為什么為什么 LinuxLinux系統(tǒng)會被劃分為系統(tǒng)會被劃分為 用戶用戶空間空間與與內(nèi)核空間內(nèi)核空間?CPU工作模式工作模式 現(xiàn)代現(xiàn)代 CPUCPU通常實現(xiàn)了不同通常實現(xiàn)了不同 的工作模的工作模 式,以式,以ARMARM為例為例 , 實現(xiàn)了實現(xiàn)了 7

2、7種工作模式:種工作模式: 用用 戶模式戶模式 ( usrusr)、)、 快速中斷快速中斷 (fiq)(fiq)、 外部中斷外部中斷(irq)(irq)、 管理模管理模 式(式( svcsvc) 、 數(shù)據(jù)訪問中數(shù)據(jù)訪問中(abt)(abt)、 系統(tǒng)模系統(tǒng)模 式式 (sys)(sys)、 未未 定義指令異常定義指令異常 (und)(und) X86X86也實現(xiàn)了也實現(xiàn)了 4 4個不同的級別個不同的級別 : Ring0Ring3Ring0Ring3。Ring0Ring0下下 , 可以執(zhí)行特權(quán)可以執(zhí)行特權(quán) 指令,可以訪問指令,可以訪問 IOIO設(shè)備等,在設(shè)備等,在 Ring3Ring3則有則有 很多

3、限很多限 制。制。 體系結(jié)構(gòu)體系結(jié)構(gòu) LinuxLinux系統(tǒng)利用了系統(tǒng)利用了 CPUCPU的的 這一特性,使用了其中這一特性,使用了其中的兩級來分別運行的兩級來分別運行 LinuxLinux內(nèi)核與應(yīng)用程序,這樣內(nèi)核與應(yīng)用程序,這樣使操作系統(tǒng)本身得到充分的保護使操作系統(tǒng)本身得到充分的保護。 例如:如果使用例如:如果使用 X86X86,用,用 戶代碼運行在戶代碼運行在 Ring3Ring3,內(nèi)核代碼運行在內(nèi)核代碼運行在Ring0Ring0。 體系結(jié)構(gòu)體系結(jié)構(gòu) 內(nèi)核空間與用戶空間是內(nèi)核空間與用戶空間是程序執(zhí)行的兩種不程序執(zhí)行的兩種不同狀態(tài)同狀態(tài),通過,通過系統(tǒng)調(diào)用系統(tǒng)調(diào)用和和硬件中斷硬件中斷能夠完

4、能夠完成從用戶空間到內(nèi)核空間的轉(zhuǎn)移。成從用戶空間到內(nèi)核空間的轉(zhuǎn)移。 什么是什么是LinuxLinux內(nèi)核?內(nèi)核? 內(nèi)核架構(gòu)內(nèi)核架構(gòu)內(nèi)核配置與編譯內(nèi)核配置與編譯LinuxLinux內(nèi)核具有可定制的優(yōu)點內(nèi)核具有可定制的優(yōu)點 , ,具體步驟如下:具體步驟如下:1. 1. 清除臨時文件、中間文件和配置文件清除臨時文件、中間文件和配置文件 . . make cleanmake clean:remove most generated files remove most generated files but keep the configbut keep the config make mrproperm

5、ake mrproper:remove all generated remove all generated files + config filesfiles + config files make distcleanmake distclean:mrproper + remove editor mrproper + remove editor backup and patch filesbackup and patch files內(nèi)核配置與編譯內(nèi)核配置與編譯2 2、確定目標系統(tǒng)的、確定目標系統(tǒng)的 軟硬件配置情況,比如軟硬件配置情況,比如 CPUCPU的類型、網(wǎng)的類型、網(wǎng)卡的型號,所需支持的

6、網(wǎng)絡(luò)協(xié)議等卡的型號,所需支持的網(wǎng)絡(luò)協(xié)議等3 3、使用如下命令、使用如下命令之一之一配置內(nèi)核:配置內(nèi)核: make configmake config:基于文本模式的交互式配置。:基于文本模式的交互式配置。 make menuconfigmake menuconfig:基于文本模式的菜單型配置。:基于文本模式的菜單型配置。(推薦使(推薦使用)用) make oldconfigmake oldconfig:使用已有的配置:使用已有的配置 文文 件(件( .config.config) , 但但 是會詢是會詢 問新增問新增 的配置的配置 選項。選項。 make xconfigmake xconfig

7、:圖:圖 形形 化的化的 配置(配置(需需 安裝圖安裝圖 形化系統(tǒng)形化系統(tǒng) )。)。4 4、配置信息保存為、配置信息保存為.config.config文件文件內(nèi)核配置與編譯內(nèi)核配置與編譯make menuconfig make menuconfig 是是 最為常用的內(nèi)核配置方式,最為常用的內(nèi)核配置方式,按功能分層次來組織配置選項按功能分層次來組織配置選項使用方法如下:使用方法如下:1 1、使用方向鍵在各選項間移動;、使用方向鍵在各選項間移動;2 2、使用、使用 “Enter”Enter”鍵進入下一層鍵進入下一層 選單;每個選項上的高亮字母是鍵盤快選單;每個選項上的高亮字母是鍵盤快捷方式,使用它

8、可以快速地到達想要設(shè)置的選單項;捷方式,使用它可以快速地到達想要設(shè)置的選單項;3 3、在括號中按、在括號中按 “y”y”將這個項目將這個項目編譯進內(nèi)核編譯進內(nèi)核中,按中,按“m”m”編譯為編譯為 模塊模塊,按,按 “n”n”為為不選擇不選擇(按(按空格鍵空格鍵也可在編譯進內(nèi)核、編譯為模塊和不編譯三也可在編譯進內(nèi)核、編譯為模塊和不編譯三者間進行切換),按者間進行切換),按“h”h”將將 顯示這個選項的顯示這個選項的幫助信息幫助信息,按,按 “Esc”Esc”鍵鍵將將返回到上層選單返回到上層選單。內(nèi)核配置與編譯內(nèi)核配置與編譯 Y Y:編譯出目標文件,并直接鏈接到內(nèi)核映像:編譯出目標文件,并直接鏈接

9、到內(nèi)核映像imageimage M M:編譯出目標文件,但不鏈接:編譯出目標文件,但不鏈接 N N:不編譯:不編譯 Y Y、M M、N N的區(qū)的區(qū)別?別? 內(nèi)核配置與編譯內(nèi)核配置與編譯 配置菜單中的項該怎么配置菜單中的項該怎么選擇選擇呢?呢? 參考參考Linux.2.6Linux.2.6內(nèi)核配置手冊內(nèi)核配置手冊文檔文檔內(nèi)核配置通常在一個已有的配置文件基礎(chǔ)上,通過修改得到新的配置文件內(nèi)核配置通常在一個已有的配置文件基礎(chǔ)上,通過修改得到新的配置文件,Linux,Linux內(nèi)內(nèi)核提供了一系列可供參考的內(nèi)核配置文件,位于核提供了一系列可供參考的內(nèi)核配置文件,位于arch/$cpu/configsarc

10、h/$cpu/configs make xxx_defconfig,make xxx_defconfig,生成生成.config.config更便捷的方法是使用廠家提供的配置文件更便捷的方法是使用廠家提供的配置文件 cp config_mini6410_n43 .configcp config_mini6410_n43 .config內(nèi)核配置與編譯內(nèi)核配置與編譯4 4、編譯內(nèi)核:、編譯內(nèi)核:編譯內(nèi)核映像編譯內(nèi)核映像 make zImagemake zImage make bzImage make bzImage 區(qū)別:在區(qū)別:在X86X86平臺,平臺, zImagezImage只能用于小于只能

11、用于小于 512K512K的內(nèi)的內(nèi) 生成帶生成帶UbootUboot文件頭的的內(nèi)核文件頭的的內(nèi)核: :make uImagemake uImage 注意需要注意需要ubootuboot的的mkimagemkimage工具支持工具支持, ,但本開發(fā)板但本開發(fā)板ubootuboot支持直接引導(dǎo)支持直接引導(dǎo)zImagezImage參見參見:cmd_bootm.c:cmd_bootm.c:#ifdef CONFIG_ZIMAGE_BOOT:#ifdef CONFIG_ZIMAGE_BOOT如需獲取詳細編譯過程信息如需獲取詳細編譯過程信息, ,可使用:可使用: make zImage V=1make z

12、Image V=1 make bzImage V=1make bzImage V=1編譯出錯時,可以通過查看編譯過程信息定位錯誤,例如缺編譯出錯時,可以通過查看編譯過程信息定位錯誤,例如缺少某些編譯選項時少某些編譯選項時可以到相應(yīng)目錄下的可以到相應(yīng)目錄下的MakefileMakefile去修改去修改 編譯好的內(nèi)核位于編譯好的內(nèi)核位于arch/boot/arch/boot/目錄下目錄下 內(nèi)核映像構(gòu)成內(nèi)核映像構(gòu)成 內(nèi)核映像構(gòu)成內(nèi)核映像構(gòu)成 內(nèi)核映像構(gòu)成內(nèi)核映像構(gòu)成 啟動代碼功能代碼符號鏈接Linux內(nèi)核啟動流程內(nèi)核啟動流程 演示:編譯使用開發(fā)板內(nèi)核演示:編譯使用開發(fā)板內(nèi)核1、使用廠商提供的配置文件

13、配置內(nèi)核、使用廠商提供的配置文件配置內(nèi)核2、編譯內(nèi)核映像、編譯內(nèi)核映像zImage3、下載到開發(fā)板通過、下載到開發(fā)板通過uboot啟動內(nèi)核啟動內(nèi)核課程安排課程安排nLinux內(nèi)核配置與編譯內(nèi)核配置與編譯nLinux內(nèi)核內(nèi)核MakefilenLinux內(nèi)核啟動流程內(nèi)核啟動流程內(nèi)核內(nèi)核Makefile組成組成內(nèi)核內(nèi)核Makefile作用作用1 1、決定、決定編譯哪些文件編譯哪些文件?2 2、決定、決定怎樣編譯怎樣編譯這些文件?這些文件?3 3、決定、決定怎樣鏈接怎樣鏈接這些文件,最重要是它們的連接順序如何?這些文件,最重要是它們的連接順序如何?編譯哪些文件編譯哪些文件1 1、頂層頂層Makefil

14、eMakefile決定根目錄下決定根目錄下哪些子目錄將被編譯哪些子目錄將被編譯(1 1)、將子目錄分為以下幾類:)、將子目錄分為以下幾類:init-yinit-y、drivers-ydrivers-y、net-ynet-y、libs-ylibs-y、和、和core-ycore-y(2 2)、)、archarch目錄內(nèi)的目錄內(nèi)的MakefileMakefile直接包含進來直接包含進來 include $(srctree)/arch/$(ARCH)/Makefileinclude $(srctree)/arch/$(ARCH)/Makefile(3 3)、)、ARCHARCH變量在變量在make

15、menuconfigmake menuconfig時配置或者時配置或者makemake時傳入時傳入make ARCH=arm CROSS_COMPILE=arm-linux-make ARCH=arm CROSS_COMPILE=arm-linux- 在頂層目錄在頂層目錄MakefileMakefile可查看這兩個體系結(jié)構(gòu)相關(guān)變量可查看這兩個體系結(jié)構(gòu)相關(guān)變量編譯哪些文件編譯哪些文件2 2、arch/$(ARCH)/Makefilearch/$(ARCH)/Makefile決定決定arch/$(ARCH)arch/$(ARCH)目錄下哪些文件、哪些目錄被編目錄下哪些文件、哪些目錄被編譯譯(1 1

16、)、增加)、增加head-yhead-y類:類: head-y:=arch/arm/kernel/head.o arch/arm/kernel/init.task.ohead-y:=arch/arm/kernel/head.o arch/arm/kernel/init.task.o(2 2)、并且擴展)、并且擴展libs-ylibs-y、core-ycore-y類中類中體系結(jié)構(gòu)相關(guān)內(nèi)容體系結(jié)構(gòu)相關(guān)內(nèi)容3 3、編譯時,依次進入、編譯時,依次進入init-yinit-y、drivers-ydrivers-y、net-ynet-y、libs-ylibs-y、和、和core-ycore-y所列出的目錄

17、中執(zhí)行它們的所列出的目錄中執(zhí)行它們的Makefile Makefile 怎樣編譯文件怎樣編譯文件1 1、各級子目錄下的、各級子目錄下的MakefileMakefile決定所在目錄下哪些文件將被決定所在目錄下哪些文件將被編譯進內(nèi)核編譯進內(nèi)核,哪些,哪些文件將被文件將被編譯成模塊編譯成模塊,進入哪些子目錄繼續(xù),進入哪些子目錄繼續(xù)調(diào)用它們的調(diào)用它們的MakefileMakefile(1)(1)、配置內(nèi)核時生成、配置內(nèi)核時生成.config.config,轉(zhuǎn)化為,轉(zhuǎn)化為include/config/auto.confinclude/config/auto.conf文件(去文件(去掉了掉了.config

18、.config中的注釋)頂層中的注釋)頂層MakefileMakefile引用該文件引用該文件include include/config/auto.confinclude include/config/auto.conf(2)(2)、auto.confauto.conf中的變中的變量值有兩類:量值有兩類:“y”y”和和“m”m”, ,子目錄子目錄MakefileMakefile使用這些使用這些變量來決定哪些文件被編譯進內(nèi)核中,哪些文件被編譯成模塊變量來決定哪些文件被編譯進內(nèi)核中,哪些文件被編譯成模塊(3)(3)、obj-yobj-y,定義文件,定義文件編譯進內(nèi)核編譯進內(nèi)核: : obj-y

19、obj-y中定義的中定義的.o.o文件由當前目錄下的文件由當前目錄下的.c.c或或.S.S文件編譯生成,它們連同下級文件編譯生成,它們連同下級子目錄的子目錄的build-in.obuild-in.o一起鏈接成當前目錄下的一起鏈接成當前目錄下的build-in.obuild-in.o文件,被上一層文件,被上一層MakefileMakefile使用使用怎樣編譯文件怎樣編譯文件(4 4)obj-mobj-m,定義文件編譯成,定義文件編譯成可加載模塊可加載模塊obj-mobj-m中定義的中定義的.o.o文件由當前目錄下的文件由當前目錄下的.c.c或或.S.S文件編譯生成,但不會編進文件編譯生成,但不會

20、編進 build-in.o build-in.o中,而是編譯成可加載模塊中,而是編譯成可加載模塊.ko.ko當某個模塊當某個模塊(m)(m)需要多個文件編譯制作而成需要多個文件編譯制作而成: :obj-m = a.oobj-m = a.oa-objs:= b.o, c.o, d.oa-objs:= b.o, c.o, d.o由由b.ob.o,c.o,d.oc.o,d.o組合生成組合生成a.oa.o,a.oa.o最后制作成最后制作成a.koa.ko模塊模塊(5 5)、)、obj-mobj-m、obj-yobj-y變量中變量中增加子目錄名增加子目錄名則進入該子目錄執(zhí)行則進入該子目錄執(zhí)行Makefi

21、le Makefile (6 6)、)、 lib-ylib-y,定義文件被編,定義文件被編譯成庫文件譯成庫文件lib-ylib-y中定義的中定義的.o.o文件由當前目錄下的文件由當前目錄下的.c.c或或.S.S文件編譯生成,并且被打包成當前目文件編譯生成,并且被打包成當前目錄下的一個庫文件錄下的一個庫文件lib.alib.a要把要把lib.alib.a編譯進內(nèi)核,需要在頂層編譯進內(nèi)核,需要在頂層MakefileMakefile中中l(wèi)ibs-ylibs-y中列出該目錄中列出該目錄要編譯成庫的代碼一般在要編譯成庫的代碼一般在lib/lib/、arch/$(ARCH)/lib/arch/$(ARCH

22、)/lib/這兩個目錄下這兩個目錄下怎樣鏈接文件怎樣鏈接文件1 1、除了、除了head-yhead-y外,外,init-yinit-y、drivers-ydrivers-y等都是目錄名,頂層等都是目錄名,頂層MakefileMakefile中,這中,這些目錄名直接加上些目錄名直接加上build-in.obuild-in.o或或lib.a,lib.a,表示要鏈接進內(nèi)核的文件表示要鏈接進內(nèi)核的文件init-y := $(patsubst %/, %/build-in.o, $(init-y)init-y := $(patsubst %/, %/build-in.o, $(init-y)將在將在$(

23、init-y)$(init-y)變量中將變量中將“/”/”替換成替換成“/build-in.o”/build-in.o”2 2、內(nèi)核映像鏈接順序、內(nèi)核映像鏈接順序vmlinux-init:=vmlinux-init:=$(head-y) $(head-y) $(init-y)$(init-y)vmlinux-main:=$(core-y) $(libs-y) $(drivers-y) $(net-y)vmlinux-main:=$(core-y) $(libs-y) $(drivers-y) $(net-y)vmlinux-all:$(vmlinux-init) $(vmlinux-main)

24、vmlinux-all:$(vmlinux-init) $(vmlinux-main)3 3、內(nèi)核映像鏈接腳本、內(nèi)核映像鏈接腳本vmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.ldsvmlinux-lds:=arch/$(ARCH)/kernel/vmlinux.lds怎樣鏈接文件怎樣鏈接文件5 5、頂層目錄、頂層目錄MakefileMakefile和和arch/$(ARCH)/Makefilearch/$(ARCH)/Makefile設(shè)置了影響所有文件的編譯設(shè)置了影響所有文件的編譯鏈接選項:鏈接選項:CFLAGSCFLAGS、AFLAGSAFLAGS、LDF

25、LAGSLDFLAGS、ARFLAGSARFLAGS6 6、各級子目錄下的、各級子目錄下的MakefileMakefile中可以設(shè)置能影響當前目錄下所有文件的編譯鏈中可以設(shè)置能影響當前目錄下所有文件的編譯鏈界選項:界選項:EXTRA_CFLAGSEXTRA_CFLAGS、EXTRA_AFLAGSEXTRA_AFLAGS、EXTRA_LDFLAGSEXTRA_LDFLAGS、EXTRA_ARFLAGSEXTRA_ARFLAGS7 7、還可以設(shè)置只影響某個文件的編譯選項:、還可以設(shè)置只影響某個文件的編譯選項:CFLAGS_$CFLAGS_$、AFLAGS_$AFLAGS_$, $, $目標目標表示

26、文件名表示文件名課程安排課程安排nLinux內(nèi)核配置與編譯內(nèi)核配置與編譯nLinux內(nèi)核內(nèi)核MakefilenLinux內(nèi)核啟動流程內(nèi)核啟動流程內(nèi)核啟動過程內(nèi)核啟動過程1 1、LinuxLinux內(nèi)核啟動過程也可分為兩個階段內(nèi)核啟動過程也可分為兩個階段(1 1)、架構(gòu))、架構(gòu)/ /開發(fā)板相關(guān)的開發(fā)板相關(guān)的引導(dǎo)過程引導(dǎo)過程機器機器ID使用使用檢查是否支持傳入的機器類型檢查是否支持傳入的機器類型(1 1)head.shead.s中調(diào)用中調(diào)用head-common.Shead-common.S實現(xiàn)的實現(xiàn)的_lookup_machine_type_lookup_machine_type檢測機器檢測機器

27、IDID機器機器ID使用使用(2 2)、)、_arch_info_begin_arch_info_begin、_arch_info_end_arch_info_end在鏈接腳本在鏈接腳本arch/arm/kernel/vmlinux.ldsarch/arm/kernel/vmlinux.lds中定義中定義(3 3)、)、include/arm/include/asm/mach/arch.hinclude/arm/include/asm/mach/arch.h中定義了如下結(jié)構(gòu)中定義了如下結(jié)構(gòu)機器機器ID使用使用(4 4)、)、arch/arm/mach-s3c64xx/mach-mini6410

28、arch/arm/mach-s3c64xx/mach-mini6410中定義了如下結(jié)構(gòu)中定義了如下結(jié)構(gòu)如果內(nèi)核配置了如果內(nèi)核配置了mini6410mini6410開發(fā)板,則開發(fā)板,則 struct machine_desc _mach_desc_mini6410 struct machine_desc _mach_desc_mini6410結(jié)構(gòu)被定義在結(jié)構(gòu)被定義在.init段段,在該段中包含了,在該段中包含了mini6410mini6410開發(fā)板的開發(fā)板的機器機器IDID:MACH_TYPE_MINI6410MACH_TYPE_MINI6410各種開發(fā)板機器各種開發(fā)板機器IDID由由arch/arm/tools/ma

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論