《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第8章_第1頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第8章_第2頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第8章_第3頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第8章_第4頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第8章_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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年芬蘭大學(xué)生linustorvalds編寫與第一次公布Linux的日子。盡管到目前為止,Linux內(nèi)核系統(tǒng)早已遠(yuǎn)遠(yuǎn)發(fā)展到了torvalds編寫之外的范圍,但torvalds仍保持著對Linux內(nèi)核的控制權(quán),并且是Linux名稱的唯一版權(quán)所有人。自發(fā)布Linux0.12版起,Linux就一直依照GPL(通用公共許可協(xié)議)自由軟件許可協(xié)議進(jìn)行授權(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的詳細(xì)分析,Linux內(nèi)核的配置系統(tǒng)由三個部分組成,分別是:

①?Makefile:分布在Linux內(nèi)核源代碼(包括子目錄)中的Makefile,定義Linux內(nèi)核的編譯規(guī)則;②配置文件(config.in):給用戶提供配置選擇的功能;

③配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進(jìn)行解釋)和配置用戶界面(提供基于字符界面、基于Ncurses圖形界面以及基于Xwindows圖形界面的用戶配置界面,各自對應(yīng)于makeconfig、makemenuconfig和makexconfig)。這些配置工具都是使用腳本語言,如Tcl/TK、Perl編寫的(也包含一些用C編寫的代碼)。

1)?Makefile

(1)?Makefile概述。

Makefile的作用是根據(jù)配置的情況,構(gòu)造出需要編譯的源文件列表,然后分別編譯,并把目標(biāo)代碼連接到一起,最終形成Linux內(nèi)核二進(jìn)制文件。

(2)?Makefile中的變量。

頂層Makefile定義并向環(huán)境中輸出了許多變量,為各個子目錄下的Makefile傳遞一些信息。有些變量,比如SUBDIRS,不僅在頂層Makefile中定義并且賦初值,而且在arch/*/Makefile還作了擴(kuò)充。

(3)?Rules.make變量。

前面講過,Rules.make是編譯規(guī)則文件,所有的Makefile中都會包括Rules.make。Rules.make文件定義了許多變量,最為重要是那些編譯、連接列表變量。

(4)子目錄Makefile。

子目錄Makefile用來控制本級目錄以下源代碼的編譯

規(guī)則。

2)配置文件

(1)配置文件功能概述。

除了Makefile的編寫,另外一個重要的工作就是把新功能加入到Linux的配置選項中,提供此項功能的說明,讓用戶有機(jī)會選擇此項功能。所有的這些都需要在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)核配置過程比較繁瑣,但是配置的適當(dāng)與否和日后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平臺進(jìn)入系統(tǒng)內(nèi)核初始化后的入口函數(shù),它主要完成剩余的與硬件平臺相關(guān)的初始化工作,在進(jìn)行一系列與內(nèi)核相關(guān)的初始化后,調(diào)用第一個用戶進(jìn)程init并等待用戶進(jìn)程的執(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目錄下,并進(jìn)行解壓。

[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è)置進(jìn)行初始配置。

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章成功移植的引導(dǎo)程序vivi,進(jìn)入下載模式,運行命令:

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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論