新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Android Linux 內(nèi)核介紹

Android Linux 內(nèi)核介紹

作者: 時間:2016-09-12 來源:網(wǎng)絡 收藏

RAM Console and Log Device

為了調(diào)試方便,Android 添加了一個功能,使得調(diào)試信息可以輸入到一個內(nèi)存塊中。此外, Android 添加了一個獨立的日志模塊,這樣用戶空間的進程能夠讀寫日志消息,調(diào)試打印信息等。

Android Debug Bridge

嵌入式設備的調(diào)試的確比較麻煩。為了便于調(diào)試,google 設計了這個調(diào)試工具,可以叫做 ADB ,使用 USB 作為連接方式 ,ADB 可以看作是鏈接 android 的設備和 PC 機的一套協(xié)議。

Android 還添加了其他的東西,比如 real-time clock, switch , timed GPIO 。

Power Management -- 5 files

電源管理對于移動設備來說相當重要,也是最復雜,開發(fā)難度最高的一個功能。Google 添加了一個新的電源管理系統(tǒng),并沒有原先 apm,dpm 等。

其他修改 -- 36 files

除了上述改動之外,還有一些小改動,比如新增的額外的調(diào)試功能, 鍵盤背光控制,TCP 網(wǎng)絡管理等等,共涉及 36 個文件。

根據(jù)上述,google 對標準的內(nèi)核做了很大的改動。相比其他的項目,比如 Nokia N810,Openmoko 等項目中,內(nèi)核的改動僅僅是增加了某個平臺的支持。所以移植最快也是最可能的辦法是在 google 使用的 kernel 上增加平臺支持。

也有一些開發(fā)人員將google 對 2.6.25 內(nèi)核的改動做成補丁,直接打在自己開發(fā)的內(nèi)核上 —— 當然,自己的內(nèi)核也應該是 2.6.25 ,否則會出問題。

本文來自CSDN博客,轉(zhuǎn)載請標明出處: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目錄下,該目錄下的每一個子目錄都代表了一個特定的內(nèi)核功能性子集,下面針對2.6.23版本進行簡單描述。

(1)Documentation。

這個目錄下面沒有內(nèi)核代碼,只有很多質(zhì)量參差不齊的文檔,但往往能夠給我們提供很多的幫助。

(2)arch。

所有與體系結(jié)構(gòu)相關的代碼都在這個目錄以及include/asm-*/目錄中,Linux支持的每種體系結(jié)構(gòu)在arch目錄下都有對應的子目錄,而在每個體系結(jié)構(gòu)特有的子目錄下又至少包含3個子目錄。

kernel:存放支持體系結(jié)構(gòu)特有的諸如信號量處理和SMP之類特征的實現(xiàn)。

lib:存放體系結(jié)構(gòu)特有的對諸如strlen和memcpy之類的通用函數(shù)的實現(xiàn)。

mm:存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實現(xiàn)。

除了這3個子目錄之外,大多數(shù)體系結(jié)構(gòu)在必要的情況下還有一個boot子目錄,包含了在這種硬件平臺上啟動內(nèi)核所使用的部分或全部平臺特有代碼。

此外,大部分體系結(jié)構(gòu)所特有的子目錄還根據(jù)需要包含了供附加特性使用的其他子目錄。比如,i386目錄包含一個math-emu子目錄,其中包括了在缺少數(shù)學協(xié)處理器(FPU)的CPU上運行模擬FPU的代碼。

(3)drivers。

這個目錄是內(nèi)核中最龐大的一個目錄,顯卡、網(wǎng)卡、SCSI適配器、PCI總線、USB總線和其他任何Linux支持的外圍設備或總線的驅(qū)動程序都可以在這里找到。

(4)fs。

虛擬文件系統(tǒng)(VFS,Virtual File System)的代碼,和各個不同文件系統(tǒng)的代碼都在這個目錄中。Linux支持的所有文件系統(tǒng)在fs目錄下面都有一個對應的子目錄。比如ext2文件系統(tǒng)對應的是fs/ext2目錄。

一個文件系統(tǒng)是存儲設備和需要訪問存儲設備的進程之間的媒介。存儲設備可能是本地的物理上可訪問的,比如硬盤或CD-ROM驅(qū)動器,它們分別使用ext2/ext3和isofs文件系統(tǒng);也可能是通過網(wǎng)絡訪問的,使用NFS文件系統(tǒng)。

還有一些虛擬文件系統(tǒng),比如proc,它以一個標準文件系統(tǒng)出現(xiàn),然而,它其中的文件只存在于內(nèi)存中,并不占用磁盤空間。

(5)include。

這個目錄包含了內(nèi)核中大部分的頭文件,它們按照下面的子目錄進行分組。

include/asm-*/,這樣的子目錄有多個,每一個都對應著一個arch的子目錄,比如include/asm-alpha、include/asm-arm、include/asm-i386等。每個子目錄中的文件都定義了支持給定體系結(jié)構(gòu)所必須的預處理器宏和內(nèi)聯(lián)函數(shù),這些內(nèi)聯(lián)函數(shù)多數(shù)都是全部或部分使用匯編語言實現(xiàn)的。

編譯內(nèi)核時,系統(tǒng)會建立一個從include/asm目錄到目標體系結(jié)構(gòu)特有的目錄的符號鏈接。比如對于arm平臺,就是include/asm-arm到include/asm的符號鏈接。因此,體系結(jié)構(gòu)無關部分的內(nèi)核代碼可以使用如下形式包含體系相關部分的頭文件。

#include

include/linux/,與平臺無關的頭文件都在這個目錄下面,它通常會被鏈接到目錄/usr/include/linux(或者它里面的所有文件會被復制到/usr/include/linux目錄下面)。因此用戶應用程序里和內(nèi)核代碼里的語句:

#include

包含的頭文件的內(nèi)容是一致的。

include目錄下的其他子目錄,在此不做贅述。

(6)init。

內(nèi)核的初始化代碼。包括main.c、創(chuàng)建早期用戶空間的代碼以及其他初始化代碼。

(7)ipc。

IPC,即進程間通信(interprocess communication)。它包含了共享內(nèi)存、信號量以及其他形式IPC的代碼。

(8)kernel。

內(nèi)核中最核心的部分,包括進程的調(diào)度(kernel/sched.c),以及進程的創(chuàng)建和撤銷(kernel/fork.c和kernel/exit.c)等,和平臺相關的另外一部分核心的代碼在arch/*/kernel目錄。

(9)lib。

庫代碼,實現(xiàn)了一個標準C庫的通用子集,包括字符串和內(nèi)存操作的函數(shù)(strlen、mmcpy和其他類似的函數(shù))以及有關sprintf和atoi的系列函數(shù)。與arch/lib下的代碼不同,這里的庫代碼都是使用C編寫的,在內(nèi)核新的移植版本中可以直接使用。

(10)mm。

包含了體系結(jié)構(gòu)無關部分的內(nèi)存管理代碼,體系相關的部分位于arch/*/mm目錄下。

(11)net。

網(wǎng)絡相關代碼,實現(xiàn)了各種常見的網(wǎng)絡協(xié)議,如TCP/IP、IPX等。

(12)scripts。

該目錄下沒有內(nèi)核代碼,只包含了用來配置內(nèi)核的腳本文件。當運行make menuconfig或者make xconfig之類的命令配置內(nèi)核時,用戶就是和位于這個目錄下的腳本進行交互的。



關鍵詞:

評論


相關推薦

技術專區(qū)

關閉