




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8章嵌入式Linux內(nèi)核8.1Linux內(nèi)核簡介8.2Linux內(nèi)核軟件結(jié)構(gòu)分析8.3Linux內(nèi)核移植實例(移植Linux2.6.14.1到博創(chuàng)2410)本章小結(jié)
8.1Linux內(nèi)核簡介
Linux內(nèi)核的起源可追溯到1991年芬蘭大學生linustorvalds編寫與第一次公布Linux的日子。盡管到目前為止,Linux內(nèi)核系統(tǒng)早已遠遠發(fā)展到了torvalds編寫之外的范圍,但torvalds仍保持著對Linux內(nèi)核的控制權(quán),并且是Linux名稱的唯一版權(quán)所有人。自發(fā)布Linux0.12版起,Linux就一直依照GPL(通用公共許可協(xié)議)自由軟件許可協(xié)議進行授權(quán)。
8.2Linux內(nèi)核軟件結(jié)構(gòu)分析
8.2.1Linux內(nèi)核配置系統(tǒng)原理
1.配置系統(tǒng)的基本結(jié)構(gòu)
本節(jié)對Makefile分析方法可參看第7章vivi中Makefile的詳細分析,Linux內(nèi)核的配置系統(tǒng)由三個部分組成,分別是:
①?Makefile:分布在Linux內(nèi)核源代碼(包括子目錄)中的Makefile,定義Linux內(nèi)核的編譯規(guī)則;②配置文件(config.in):給用戶提供配置選擇的功能;
③配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋)和配置用戶界面(提供基于字符界面、基于Ncurses圖形界面以及基于Xwindows圖形界面的用戶配置界面,各自對應(yīng)于makeconfig、makemenuconfig和makexconfig)。這些配置工具都是使用腳本語言,如Tcl/TK、Perl編寫的(也包含一些用C編寫的代碼)。
1)?Makefile
(1)?Makefile概述。
Makefile的作用是根據(jù)配置的情況,構(gòu)造出需要編譯的源文件列表,然后分別編譯,并把目標代碼連接到一起,最終形成Linux內(nèi)核二進制文件。
(2)?Makefile中的變量。
頂層Makefile定義并向環(huán)境中輸出了許多變量,為各個子目錄下的Makefile傳遞一些信息。有些變量,比如SUBDIRS,不僅在頂層Makefile中定義并且賦初值,而且在arch/*/Makefile還作了擴充。
(3)?Rules.make變量。
前面講過,Rules.make是編譯規(guī)則文件,所有的Makefile中都會包括Rules.make。Rules.make文件定義了許多變量,最為重要是那些編譯、連接列表變量。
(4)子目錄Makefile。
子目錄Makefile用來控制本級目錄以下源代碼的編譯
規(guī)則。
2)配置文件
(1)配置文件功能概述。
除了Makefile的編寫,另外一個重要的工作就是把新功能加入到Linux的配置選項中,提供此項功能的說明,讓用戶有機會選擇此項功能。所有的這些都需要在config.in文件中用配置語言來編寫配置腳本。
(2)配置語言。
①頂層菜單。
mainmenu_name/prompt//prompt/是用“或”包圍的字符串,“與”的區(qū)別是‘…’中可使用$引用變量的值。mainmenu_name設(shè)置最高層菜單的名字,它只在makexconfig時才會顯示。②詢問語句。
bool /prompt//symbol/
hex /prompt//symbol//word/
int /prompt//symbol//word/
string /prompt//symbol//word/
tristate /prompt//symbol/③定義語句。
define_bool /symbol//word/
define_hex
/symbol//word/
define_int
/symbol//word/
define_string /symbol//word/
define_tristate /symbol//word/④依賴語句。
dep_bool /prompt//symbol//dep/...
dep_mbool /prompt//symbol//dep/...
dep_hex /prompt//symbol//word//dep/...
dep_int /prompt//symbol//word//dep/...
dep_string /prompt//symbol//word//dep/...
dep_tristate /prompt//symbol//dep/...⑤選擇語句。
choice/prompt//word//word/⑥?if語句。⑦菜單塊(menublock)語句。
mainmenu_optionnext_comment
comment‘…’
…
endmenu⑧source語句。
source/word/
/word/是文件名,source的作用是調(diào)入新的文件。
(3)缺省配置。
Linux內(nèi)核支持非常多的硬件平臺,對于具體的硬件平臺而言,有些配置是必需的,有些配置則不是必需的。另外,新增加功能的正常運行往往也需要一定的先決條件,針對新功能,必須作相應(yīng)的配置。因此,特定硬件平臺能夠正常運行對應(yīng)著一個最小的基本配置,這就是缺省配置。
(4)?helpfile。
在配置Linux內(nèi)核時,遇到不懂含義的配置選項,可以查看它的幫助,從中可得到選擇的建議。下面介紹如何給一個配置選項增加幫助信息。
2.實例
對于一個開發(fā)者來說,將自己開發(fā)的內(nèi)核代碼加入到Linux內(nèi)核中,需要三個步驟。首先確定把自己開發(fā)的代碼放入到內(nèi)核的位置;其次,把自己開發(fā)的功能增加到Linux內(nèi)核的配置選項中,使用戶能夠選擇此功能;最后,構(gòu)建子目錄Makefile,根據(jù)用戶的選擇,將相應(yīng)的代碼編譯到最終生成的Linux內(nèi)核中去。8.2.2配置Linux內(nèi)核
內(nèi)核配置過程比較繁瑣,但是配置的適當與否和日后Linux的運行直接相關(guān),有必要了解一些主要的且經(jīng)常用到的選項的設(shè)置。圖8-1xconfig配置界面圖8-2menuconfig配置界面8.2.3Linux內(nèi)核啟動原理
在Bootloader將Linux內(nèi)核映像拷貝到RAM以后,可以通過下例代碼啟動Linux內(nèi)核:
call_linux(0,
machine_type,
kernel_params_base)。
1.?Linux內(nèi)核入口
Linux非壓縮內(nèi)核的入口位于文件?/arch/arm/kernel/head-armv.S中的stext段。該段的基地址就是壓縮內(nèi)核解壓后的跳轉(zhuǎn)地址。如果系統(tǒng)中加載的內(nèi)核是非壓縮的Image,那么bootloader將內(nèi)核從Flash中拷貝到RAM后將直接跳到該地址處,從而啟動Linux內(nèi)核。
2.?start_kernel函數(shù)
start_kernel是所有Linux平臺進入系統(tǒng)內(nèi)核初始化后的入口函數(shù),它主要完成剩余的與硬件平臺相關(guān)的初始化工作,在進行一系列與內(nèi)核相關(guān)的初始化后,調(diào)用第一個用戶進程init并等待用戶進程的執(zhí)行,這樣整個Linux內(nèi)核便啟動完畢。
8.3Linux內(nèi)核移植實例
(移植Linux2.6.14.1到博創(chuàng)2410)
8.3.1下載Linux內(nèi)核并解壓
下載linux2.6.14.1內(nèi)核至/mnt/hgfs/share/mxl目錄下,并進行解壓。
[root@localhostmxl]#tarxjvflinux2.6.14.1.tar.gz
[root@localhostmxl]#pwd
/mnt/hgfs/share/mxl8.3.2修改Makefile
修改內(nèi)核目錄樹根下的主Makefile,指明交叉編譯器。
[root@localhostlinux2.6.14.1]#viMakefile
找到ARCH和CROSS_COMPILE,修改。
ARCH?=arm
CROSS_COMPILE?=/usr/local/arm/3.4.1/bin/arm-linux-8.3.3設(shè)置Flash分區(qū)
此處一共要修改三個文件,主要內(nèi)容是:
1.指明分區(qū)信息(在arch/arm/mach-s3c2410/devs.c文件中)
在arch/arm/mach-s3c2410目錄中的文件都是板級相關(guān)的,其中比較重要的是如下幾個:
1)處理器和設(shè)備描述
設(shè)備描述主要由兩個結(jié)構(gòu)體完成:structresource和structplatform_device。
2)處理器和設(shè)備操作
①intplatform_device_register(structplatform_device*pdev);注冊設(shè)備;
②voidplatform_device_unregister(structplatform_device*pdev);注銷設(shè)備;
③intplatform_add_devices(structplatform_device**devs,intnum);添加設(shè)備,通過調(diào)用上面兩個函數(shù)實現(xiàn)。
2.指定啟動時初始化
kernel啟動時依據(jù)我們對分區(qū)的設(shè)置進行初始配置。
3.禁止FlashECC校驗
如果內(nèi)核都是通過UBOOT寫到NandFlash的,UBOOT通過的軟件ECC算法產(chǎn)生ECC校驗碼,這與內(nèi)核校驗的ECC碼不一樣,因為內(nèi)核中的ECC碼是由S3C2410中NandFlash控制器產(chǎn)生的,所以這里選擇禁止內(nèi)核ECC校驗。8.3.4配置內(nèi)核
1.支持啟動時掛載devfs
為了使內(nèi)核支持devfs以及在啟動時并在/sbin/init運行之前能自動掛載?/dev為devfs文件系統(tǒng)。
2.配置內(nèi)核產(chǎn)生.config文件
[root@localhostlinux2.6.14.1]#cparch/arm/configs
/smdk2410_defconfig.config
[root@localhostlinux2.6.14.1]#makemenuconfig
3.編譯內(nèi)核
[root@localhostlinux2.6.14.1]#makezImage
成功編譯的結(jié)果如圖8-3所示。圖8-32.6內(nèi)核成功編譯的結(jié)果
4.下載zImage到開發(fā)板
重啟第7章成功移植的引導程序vivi,進入下載模式,運行命令:
vivi>loadflashkernelx
將新內(nèi)核zImage下載到開發(fā)板中,如圖8-4所示。圖8-4串口下載2.6內(nèi)核8.3.5測試2.6.14.1內(nèi)核
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧農(nóng)業(yè)職業(yè)技術(shù)學院《籃球B》2023-2024學年第二學期期末試卷
- 昆明理工大學津橋?qū)W院《企業(yè)沙盤模擬經(jīng)營實訓》2023-2024學年第二學期期末試卷
- 內(nèi)蒙古科技職業(yè)學院《水文地質(zhì)學基礎(chǔ)》2023-2024學年第一學期期末試卷
- 2025年動力專業(yè)考試題型及答案
- 2025年西藏生物考試試題及答案
- 2025年主持人面試題及答案
- 2025年造句游戲小測試題及答案
- 脊柱初級復(fù)習測試卷含答案
- 脊柱2023練習試題及答案
- 2025年啟蒙數(shù)學測試題及答案
- 船舶輪機長常規(guī)命令
- 餐券模板(A4紙15張)
- DIN5480_德標花鍵計算表格
- 急性腎盂腎炎護理查房ppt課件
- 脫水機房設(shè)備安裝方案
- 致愛麗絲鋼琴曲五線譜
- 初中物理命題雙向細目表(人教版)
- 氣體放電基礎(chǔ)分析
- 專業(yè)技術(shù)人員年度(任期)考核登記表
- 人際反應(yīng)指數(shù)量表
- 萜類及揮發(fā)油
評論
0/150
提交評論