Android Linux 內(nèi)核介紹
RAM Console and Log Device
為了調(diào)試方便,Android 添加了一個(gè)功能,使得調(diào)試信息可以輸入到一個(gè)內(nèi)存塊中。此外, Android 添加了一個(gè)獨(dú)立的日志模塊,這樣用戶空間的進(jìn)程能夠讀寫日志消息,調(diào)試打印信息等。
Android Debug Bridge
嵌入式設(shè)備的調(diào)試的確比較麻煩。為了便于調(diào)試,google 設(shè)計(jì)了這個(gè)調(diào)試工具,可以叫做 ADB ,使用 USB 作為連接方式 ,ADB 可以看作是鏈接 android 的設(shè)備和 PC 機(jī)的一套協(xié)議。
Android 還添加了其他的東西,比如 real-time clock, switch , timed GPIO 。
Power Management -- 5 files
電源管理對(duì)于移動(dòng)設(shè)備來說相當(dāng)重要,也是最復(fù)雜,開發(fā)難度最高的一個(gè)功能。Google 添加了一個(gè)新的電源管理系統(tǒng),并沒有原先 apm,dpm 等。
其他修改 -- 36 files
除了上述改動(dòng)之外,還有一些小改動(dòng),比如新增的額外的調(diào)試功能, 鍵盤背光控制,TCP 網(wǎng)絡(luò)管理等等,共涉及 36 個(gè)文件。
根據(jù)上述,google 對(duì)標(biāo)準(zhǔn)的內(nèi)核做了很大的改動(dòng)。相比其他的項(xiàng)目,比如 Nokia N810,Openmoko 等項(xiàng)目中,內(nèi)核的改動(dòng)僅僅是增加了某個(gè)平臺(tái)的支持。所以移植最快也是最可能的辦法是在 google 使用的 kernel 上增加平臺(tái)支持。
也有一些開發(fā)人員將google 對(duì) 2.6.25 內(nèi)核的改動(dòng)做成補(bǔ)丁,直接打在自己開發(fā)的內(nèi)核上 —— 當(dāng)然,自己的內(nèi)核也應(yīng)該是 2.6.25 ,否則會(huì)出問題。
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/guoshaobei/archive/2010/08/21/5827399.aspx
Android是基于Linux,而Linux Kernel的目錄結(jié)果如下:
瀏覽內(nèi)核代碼之前,有必要知道內(nèi)核源碼的整體分布情況,按照慣例,內(nèi)核代碼安裝在/usr/src/linux目錄下,該目錄下的每一個(gè)子目錄都代表了一個(gè)特定的內(nèi)核功能性子集,下面針對(duì)2.6.23版本進(jìn)行簡(jiǎn)單描述。
(1)Documentation。
這個(gè)目錄下面沒有內(nèi)核代碼,只有很多質(zhì)量參差不齊的文檔,但往往能夠給我們提供很多的幫助。
(2)arch。
所有與體系結(jié)構(gòu)相關(guān)的代碼都在這個(gè)目錄以及include/asm-*/目錄中,Linux支持的每種體系結(jié)構(gòu)在arch目錄下都有對(duì)應(yīng)的子目錄,而在每個(gè)體系結(jié)構(gòu)特有的子目錄下又至少包含3個(gè)子目錄。
kernel:存放支持體系結(jié)構(gòu)特有的諸如信號(hào)量處理和SMP之類特征的實(shí)現(xiàn)。
lib:存放體系結(jié)構(gòu)特有的對(duì)諸如strlen和memcpy之類的通用函數(shù)的實(shí)現(xiàn)。
mm:存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實(shí)現(xiàn)。
除了這3個(gè)子目錄之外,大多數(shù)體系結(jié)構(gòu)在必要的情況下還有一個(gè)boot子目錄,包含了在這種硬件平臺(tái)上啟動(dòng)內(nèi)核所使用的部分或全部平臺(tái)特有代碼。
此外,大部分體系結(jié)構(gòu)所特有的子目錄還根據(jù)需要包含了供附加特性使用的其他子目錄。比如,i386目錄包含一個(gè)math-emu子目錄,其中包括了在缺少數(shù)學(xué)協(xié)處理器(FPU)的CPU上運(yùn)行模擬FPU的代碼。
(3)drivers。
這個(gè)目錄是內(nèi)核中最龐大的一個(gè)目錄,顯卡、網(wǎng)卡、SCSI適配器、PCI總線、USB總線和其他任何Linux支持的外圍設(shè)備或總線的驅(qū)動(dòng)程序都可以在這里找到。
(4)fs。
虛擬文件系統(tǒng)(VFS,Virtual File System)的代碼,和各個(gè)不同文件系統(tǒng)的代碼都在這個(gè)目錄中。Linux支持的所有文件系統(tǒng)在fs目錄下面都有一個(gè)對(duì)應(yīng)的子目錄。比如ext2文件系統(tǒng)對(duì)應(yīng)的是fs/ext2目錄。
一個(gè)文件系統(tǒng)是存儲(chǔ)設(shè)備和需要訪問存儲(chǔ)設(shè)備的進(jìn)程之間的媒介。存儲(chǔ)設(shè)備可能是本地的物理上可訪問的,比如硬盤或CD-ROM驅(qū)動(dòng)器,它們分別使用ext2/ext3和isofs文件系統(tǒng);也可能是通過網(wǎng)絡(luò)訪問的,使用NFS文件系統(tǒng)。
還有一些虛擬文件系統(tǒng),比如proc,它以一個(gè)標(biāo)準(zhǔn)文件系統(tǒng)出現(xiàn),然而,它其中的文件只存在于內(nèi)存中,并不占用磁盤空間。
(5)include。
這個(gè)目錄包含了內(nèi)核中大部分的頭文件,它們按照下面的子目錄進(jìn)行分組。
include/asm-*/,這樣的子目錄有多個(gè),每一個(gè)都對(duì)應(yīng)著一個(gè)arch的子目錄,比如include/asm-alpha、include/asm-arm、include/asm-i386等。每個(gè)子目錄中的文件都定義了支持給定體系結(jié)構(gòu)所必須的預(yù)處理器宏和內(nèi)聯(lián)函數(shù),這些內(nèi)聯(lián)函數(shù)多數(shù)都是全部或部分使用匯編語(yǔ)言實(shí)現(xiàn)的。
編譯內(nèi)核時(shí),系統(tǒng)會(huì)建立一個(gè)從include/asm目錄到目標(biāo)體系結(jié)構(gòu)特有的目錄的符號(hào)鏈接。比如對(duì)于arm平臺(tái),就是include/asm-arm到include/asm的符號(hào)鏈接。因此,體系結(jié)構(gòu)無關(guān)部分的內(nèi)核代碼可以使用如下形式包含體系相關(guān)部分的頭文件。
#include
include/linux/,與平臺(tái)無關(guān)的頭文件都在這個(gè)目錄下面,它通常會(huì)被鏈接到目錄/usr/include/linux(或者它里面的所有文件會(huì)被復(fù)制到/usr/include/linux目錄下面)。因此用戶應(yīng)用程序里和內(nèi)核代碼里的語(yǔ)句:
#include
包含的頭文件的內(nèi)容是一致的。
include目錄下的其他子目錄,在此不做贅述。
(6)init。
內(nèi)核的初始化代碼。包括main.c、創(chuàng)建早期用戶空間的代碼以及其他初始化代碼。
(7)ipc。
IPC,即進(jìn)程間通信(interprocess communication)。它包含了共享內(nèi)存、信號(hào)量以及其他形式IPC的代碼。
(8)kernel。
內(nèi)核中最核心的部分,包括進(jìn)程的調(diào)度(kernel/sched.c),以及進(jìn)程的創(chuàng)建和撤銷(kernel/fork.c和kernel/exit.c)等,和平臺(tái)相關(guān)的另外一部分核心的代碼在arch/*/kernel目錄。
(9)lib。
庫(kù)代碼,實(shí)現(xiàn)了一個(gè)標(biāo)準(zhǔn)C庫(kù)的通用子集,包括字符串和內(nèi)存操作的函數(shù)(strlen、mmcpy和其他類似的函數(shù))以及有關(guān)sprintf和atoi的系列函數(shù)。與arch/lib下的代碼不同,這里的庫(kù)代碼都是使用C編寫的,在內(nèi)核新的移植版本中可以直接使用。
(10)mm。
包含了體系結(jié)構(gòu)無關(guān)部分的內(nèi)存管理代碼,體系相關(guān)的部分位于arch/*/mm目錄下。
(11)net。
網(wǎng)絡(luò)相關(guān)代碼,實(shí)現(xiàn)了各種常見的網(wǎng)絡(luò)協(xié)議,如TCP/IP、IPX等。
(12)scripts。
該目錄下沒有內(nèi)核代碼,只包含了用來配置內(nèi)核的腳本文件。當(dāng)運(yùn)行make menuconfig或者make xconfig之類的命令配置內(nèi)核時(shí),用戶就是和位于這個(gè)目錄下的腳本進(jìn)行交互的。
評(píng)論