新聞中心

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

        Android Linux 內核介紹

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

        RAM Console and Log Device

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

        Android Debug Bridge

        嵌入式設備的調試的確比較麻煩。為了便于調試,google 設計了這個調試工具,可以叫做 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

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

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

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

        本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/guoshaobei/archive/2010/08/21/5827399.aspx

        Android是基于Linux,而Linux Kernel的目錄結果如下:

        瀏覽內核代碼之前,有必要知道內核源碼的整體分布情況,按照慣例,內核代碼安裝在/usr/src/linux目錄下,該目錄下的每一個子目錄都代表了一個特定的內核功能性子集,下面針對2.6.23版本進行簡單描述。

        (1)Documentation。

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

        (2)arch。

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

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

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

        mm:存放體系結構特有的內存管理程序的實現(xiàn)。

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

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

        (3)drivers。

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

        (4)fs。

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

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

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

        (5)include。

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

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

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

        #include

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

        #include

        包含的頭文件的內容是一致的。

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

        (6)init。

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

        (7)ipc。

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

        (8)kernel。

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

        (9)lib。

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

        (10)mm。

        包含了體系結構無關部分的內存管理代碼,體系相關的部分位于arch/*/mm目錄下。

        (11)net。

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

        (12)scripts。

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



        關鍵詞:

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 河曲县| 鹤壁市| 招远市| 罗甸县| 保靖县| 盐山县| 调兵山市| 麦盖提县| 咸宁市| 万州区| 新和县| 广德县| 文水县| 抚顺县| 海原县| 民丰县| 资中县| 黄浦区| 唐山市| 元阳县| 登封市| 舟曲县| 西昌市| 宿松县| 哈密市| 阳朔县| 阳曲县| 德昌县| 榆树市| 阿坝县| 文安县| 盐城市| 丁青县| 桃园市| 丰城市| 会昌县| 三亚市| 南岸区| 沈丘县| 湘潭市| 廉江市|