Android Linux 內(nèi)核介紹
已經(jīng)有一些的文章介紹Android內(nèi)核了,本系列篇將從Linux內(nèi)核的角度來(lái)分析Android的內(nèi)核,希望給初學(xué)者提夠有用的信息。本章將簡(jiǎn)單的介紹 Android內(nèi)核的全貌,起到一個(gè)拋磚引玉的作用。從下一篇開(kāi)始將詳細(xì)介紹每一個(gè)Android內(nèi)核驅(qū)動(dòng)程序及其作用。
Android內(nèi)核是基于Linux 2.6內(nèi)核的(目前最新開(kāi)發(fā)版本是2.6.31),它是一個(gè)增強(qiáng)內(nèi)核版本,除了修改部分Bug外,它提供了用于支持Android平臺(tái)的設(shè)備驅(qū)動(dòng),其核心驅(qū)動(dòng)主要包括:
Android Binder ,基于OpenBinder框架的一個(gè)驅(qū)動(dòng),用于提供Android平臺(tái)的進(jìn)程間通訊(IPC,inter-process communication)。
源代碼位于drivers/staging/android/binder.c
Android電源管理(PM) ,一個(gè)基于標(biāo)準(zhǔn)Linux電源管理系統(tǒng)的輕量級(jí)的Android電源管理驅(qū)動(dòng),針對(duì)嵌入式設(shè)備做了很多優(yōu)化。
源代碼位于kernel/power/earlysuspend.c
kernel/power/consoleearlysuspend.c
kernel/power/fbearlysuspend.c
kernel/power/wakelock.c
kernel/power/userwakelock.c
低內(nèi)存管理器(Low Memory Killer) ,相對(duì)于Linux標(biāo)準(zhǔn)OOM(Out Of Memory)機(jī)制更加靈活,它可以根據(jù)需要?dú)⑺肋M(jìn)程來(lái)釋放需要的內(nèi)存。
源代碼位于drivers/staging/android/lowmemorykiller.c
匿名共享內(nèi)存(ashmem) ,為進(jìn)程間提供大塊共享內(nèi)存,同時(shí)為內(nèi)核提供回收和管理這個(gè)內(nèi)存的機(jī)制。
源代碼位于mm/ashmem.c
Android PMEM(Physical) ,PMEM用于向用戶空間提供連續(xù)的物理內(nèi)存區(qū)域,DSP和某些設(shè)備只能工作在連續(xù)的物理內(nèi)存上。
源代碼位于drivers/misc/pmem.c
Android Logger ,一個(gè)輕量級(jí)的日志設(shè)備,用于抓取Android系統(tǒng)的各種日志。
源代碼位于drivers/staging/android/logger.c
Android Alarm ,提供了一個(gè)定時(shí)器用于把設(shè)備從睡眠狀態(tài)喚醒,同時(shí)它也提供了一個(gè)即使在設(shè)備睡眠時(shí)也會(huì)運(yùn)行的時(shí)鐘基準(zhǔn),
源代碼位于drivers/rtc/alarm.c
USB Gadget驅(qū)動(dòng) ,一個(gè)基于標(biāo)準(zhǔn)Linux USB gadget驅(qū)動(dòng)框架的設(shè)備驅(qū)動(dòng),Android的USB驅(qū)動(dòng)是基于gaeget框架的,
源代碼位于drivers/usb/gadget/
Android Ram Console ,為了提供調(diào)試功能,Android允許將調(diào)試日志信息寫(xiě)入一個(gè)被稱(chēng)為RAM Console的設(shè)備里,它是一個(gè)基于RAM的Buffer。
源代碼位于drivers/staging/android/ram_console.c。
Android timed device ,提供了對(duì)設(shè)備進(jìn)行定時(shí)控制功能,目前支持vibrator和LED設(shè)備。
源代碼位于drivers/staging/android/timed_output.c(timed_gpio.c)。
Yaffs2文件系統(tǒng) ,Android 采用Yaffs2作為MTD nand flash文件系統(tǒng),源代碼位于fs/yaffs2/目錄下。Yaffs2是一個(gè)快速穩(wěn)定的應(yīng)用于NAND和NOR Flash的跨平臺(tái)的嵌入式設(shè)備文件系統(tǒng),同其他Flash文件系統(tǒng)相比,Yaffs2使用更小的內(nèi)存來(lái)保存他的運(yùn)行狀態(tài),因此它占用內(nèi)存小;Yaffs2的垃圾回收非常簡(jiǎn)單而且快速,因此能達(dá)到更好的性能;Yaffs2在大容量的NAND Flash上性能表現(xiàn)尤為明顯,非常適合大容量的Flash存儲(chǔ)。
Android內(nèi)核添加或修改的文件很多,下面的列表描述了Android Emulator內(nèi)核的文件:
drivers/misc/kernel_debugger.c
drivers/misc/pmem.c
drivers/misc/qemutrace/qemu_trace_sysfs.c
drivers/misc/qemutrace/qemu_trace.c
drivers/misc/qemutrace/qemu_trace.h
drivers/misc/uid_stat.c
drivers/staging/android/lowmemorykiller.c
drivers/staging/android/logger.c
drivers/staging/android/timed_output.h
drivers/staging/android/ram_console.c
drivers/staging/android/timed_gpio.c
drivers/staging/android/logger.h
drivers/staging/android/binder.h
drivers/staging/android/binder.c
drivers/staging/android/timed_output.c
drivers/staging/android/timed_gpio.h
drivers/rtc/alarm.c
drivers/rtc/rtc-goldfish.c
drivers/net/pppolac.c
drivers/net/ppp_mppe.c
drivers/net/pppopns.c
drivers/video/goldfishfb.c
drivers/switch/switch_class.c
drivers/switch/switch_gpio.c
drivers/char/dcc_tty.c
drivers/char/goldfish_tty.c
drivers/watchdog/i6300esb.c
drivers/input/misc/gpio_event.c
drivers/input/misc/gpio_input.c
drivers/input/misc/gpio_output.c
drivers/input/misc/keychord.c
drivers/input/misc/gpio_axis.c
drivers/input/misc/gpio_matrix.c
drivers/input/keyreset.c
drivers/input/keyboard/goldfish_events.c
drivers/input/touchscreen/synaptics_i2c_rmi.c
drivers/usb/gadget/android.c
drivers/usb/gadget/f_adb.h
drivers/usb/gadget/f_mass_storage.h
drivers/usb/gadget/f_adb.c
drivers/usb/gadget/f_mass_storage.c
drivers/mmc/host/goldfish.c
drivers/power/goldfish_battery.c
drivers/leds/ledtrig-sleep.c
drivers/mtd/devices/goldfish_nand_reg.h
drivers/mtd/devices/goldfish_nand.c
kernel/power/earlysuspend.c
kernel/power/consoleearlysuspend.c
kernel/power/fbearlysuspend.c
kernel/power/wakelock.c
kernel/power/userwakelock.c
kernel/cpuset.c
kernel/cgroup_debug.c
kernel/cgroup.c
mm/ashmem.c
include/linux/ashmem.h
include/linux/switch.h
include/linux/keychord.h
include/linux/earlysuspend.h
include/linux/android_aid.h
include/linux/uid_stat.h
include/linux/if_pppolac.h
include/linux/usb/android.h[!--empirenews.page--]
include/linux/wifi_tiwlan.h
include/linux/android_alarm.h
include/linux/keyreset.h
include/linux/synaptics_i2c_rmi.h
include/linux/android_pmem.h
include/linux/kernel_debugger.h
include/linux/gpio_event.h
include/linux/wakelock.h
include/linux/if_pppopns.h
net/ipv4/sysfs_net_ipv4.c
net/ipv4/af_inet.c
net/ipv6/af_inet6.c
net/bluetooth/af_bluetooth.c
security/commoncap.c
fs/proc/base.c
Android內(nèi)核配置
Android 是基于 Linux 的 , 對(duì)于一個(gè)新的設(shè)備,我們 首先要 編譯一個(gè)支持 Android 的 Kernel ,那么如何 使 你的 Kernel Android 化呢?除了要移植前面提到的驅(qū)動(dòng)之外,就是如何配置你的 Kernel 來(lái)支持 Android 平臺(tái),這可以參考 Goldfish 的內(nèi)核配置文件 - arch/arm/configs/goldfish_defconfig 。
一般來(lái)說(shuō),我們會(huì)基于一個(gè)平臺(tái)標(biāo)準(zhǔn)內(nèi)核配置選項(xiàng)來(lái)配置 Android 內(nèi)核,你可以根據(jù)具體的硬件平臺(tái)來(lái)選擇 Android 內(nèi)核的配置選項(xiàng),可以參考下面的 Android 內(nèi)核配置列表:
一般需要支持的內(nèi)核選項(xiàng)
ANDROID_PARANOID_NETWORK
ASHMEM
CONFIG_FB_MODE_HELPERS
CONFIG_FONT_8x16
CONFIG_FONT_8x8
CONFIG_YAFFS_SHORT_NAMES_IN_RAM
DAB
EARLYSUSPEND
FB
FB_CFB_COPYAREA
FB_CFB_FILLRECT
FB_CFB_IMAGEBLIT
FB_DEFERRED_IO
FB_TILEBLITTING
HIGH_RES_TIMERS
INOTIFY
INOTIFY_USER
INPUT_EVDEV
INPUT_GPIO
INPUT_MISC
LEDS_CLASS
LEDS_GPIO
LOCK_KERNEL
LkOGGER
LOW_MEMORY_KILLER
MISC_DEVICES
NEW_LEDS
NO_HZ
POWER_SUPPLY
PREEMPT
RAMFS
RTC_CLASS
RTC_LIB
SWITCH
SWITCH_GPIO
TMPFS
UID_STAT
UID16
USB_FUNCTION
USB_FUNCTION_ADB
USER_WAKELOCK
VIDEO_OUTPUT_CONTROL
WAKELOCK
YAFFS_AUTO_YAFFS2
YAFFS_FS
YAFFS_YAFFS1
YAFFS_YAFFS2
但是Android推薦不要支持下面兩個(gè)功能:
CONFIG_YAFFS_DISABLE_LAZY_LOAD
DNOTIFY
配置好后,就可以用Toolchain來(lái)編譯內(nèi)核了。編譯內(nèi)核比較簡(jiǎn)單,以Emulator的kernel為例:
- git clone git://android.kernel.org/kernel/common.git kernel-emulator
- cd kernel-emulator
- export ARCH=arm
- export CROSS_COMPILE=arm-eabi-
- export PATH=
- make goldfish_defconfig
- make
Google對(duì) 2.6.25 內(nèi)核里做了什么改動(dòng)呢?
有家公司專(zhuān)門(mén)比較了標(biāo)準(zhǔn)內(nèi)核和android 內(nèi)核,發(fā)現(xiàn) google 修改了 75 個(gè)文件,增加了 88 個(gè)文件。改公司還對(duì)這些被修改的和新增的文件做了注解。
Goldfish -- 44 Files
Android模擬器運(yùn)行了一個(gè)被 google 叫做 “ 金魚(yú) " 的虛擬 CPU. 金魚(yú)運(yùn)行 arm926t 指令集( arm926t 是屬于 armv5 架構(gòu));并且仿真了輸入輸出:比如鍵盤(pán)輸入和 LCD 輸出。這個(gè)模擬器其實(shí)是在 qemu 之上開(kāi)發(fā)的,輸入輸出基于 libSDL.
內(nèi)核里這個(gè)Goldfish 接口實(shí)現(xiàn)了這個(gè)虛擬 “ 金魚(yú) ”CPU 的一些接口,如果想在真實(shí)設(shè)備上運(yùn)行 android, 這些接口肯定要去掉的。
arm926ej的介紹見(jiàn) http://www.arm.com/products/CPUs/ARM926EJ-S.html
YAFFS2 -- 35 Files
不同于PC 機(jī),文件是存儲(chǔ)在硬盤(pán)上的;手機(jī)使用 FLASH 作為存儲(chǔ)介質(zhì)。 HTC 的 G1 使用 NANDFLASH—— 這中存儲(chǔ)目前已經(jīng)相當(dāng)普及了 , 而且種類(lèi)也頗多, (SLC,MLC 等等),存儲(chǔ)密度也越來(lái)越高(已經(jīng)出現(xiàn)幾十 G 大小的 NANDFLASH) ,價(jià)格也越來(lái)越低。
YAFFS2是專(zhuān)門(mén)用在 FLASH 上的文件系統(tǒng), “YAFFS2” 是 "Yet Another Flash File System, 2nd edition" 的縮寫(xiě)。 YAFFS2 為 Linux 內(nèi)核提供了一個(gè)高效訪問(wèn) NANDFLASH 的接口。但是 NANDFLASH 的支持并不包含在標(biāo)準(zhǔn)的 2.6.25 內(nèi)核中,所以 Google 在其中添加了對(duì) NANDFLASH 的支持。
藍(lán)牙 -- 10 files
在藍(lán)牙通訊協(xié)議棧里Google 修改了 10 個(gè)文件。這些改動(dòng)解決了一些跟藍(lán)牙耳機(jī)相關(guān)的明顯的 bug ,以及一些藍(lán)牙調(diào)試和訪問(wèn)控制相關(guān)的函數(shù)。
調(diào)度器 -- 5 files
Android內(nèi)核還修改了進(jìn)程調(diào)度和時(shí)鐘相關(guān)策略,這個(gè)改動(dòng)就比較深入了。其目的和效果估計(jì)在一段時(shí)間后才能找到。
為android 新增的功能 -- 28 files
除了修正一些bug 以及其他的改動(dòng), android 還增加了一些新的 “ 子系統(tǒng) ” ,這些系統(tǒng)都比較重要。
IPC Binder
IPC Binder是一種 IPC( 進(jìn)程間通信)機(jī)制。它是的進(jìn)程能夠?yàn)槠渌M(jìn)程提供服務(wù) —— 還是通過(guò)標(biāo)準(zhǔn)的 linux 系統(tǒng)調(diào)用 api 。 IPC Binder 的概念起源于一家叫做 “Be.Inc" 的公司,在 Google 之前就已經(jīng)被然后被用到 Palm 軟件里去了。
Low Memory Killer
其實(shí)內(nèi)核里已經(jīng)有一個(gè)類(lèi)似的功能, 叫做"oom killer", 就是 out of memory killer, 當(dāng)內(nèi)存不夠的時(shí)候,改策略會(huì)試圖結(jié)束一個(gè)進(jìn)程。不知道為什么 Google 重新實(shí)現(xiàn)了這個(gè)策略。
Ashmem
Ashmem,全程 Anonymous SHared MEMory, 翻譯成中文就是匿名共享內(nèi)存。這個(gè)功能使得進(jìn)程間能夠共享大塊的內(nèi)存。比如說(shuō),系統(tǒng)可以使用 Ashmem 保存一些圖標(biāo),多個(gè)應(yīng)用程序可以訪問(wèn)這個(gè)共享內(nèi)存來(lái)獲取圖標(biāo)。 Ashmem 為內(nèi)核提供了一種回收這些使用完的共享內(nèi)存塊的辦法 , 如果一個(gè)進(jìn)程試圖訪問(wèn)這些已經(jīng)被回收的內(nèi)存塊,它將會(huì)得到錯(cuò)誤的返回值,以便它重新進(jìn)行內(nèi)存塊分配和數(shù)據(jù)初始化。[!--empirenews.page--]
RAM Console and Log Device
為了調(diào)試方便,Android 添加了一個(gè)功能,使得調(diào)試信息可以輸入到一個(gè)內(nèi)存塊中。此外, Android 添加了一個(gè)獨(dú)立的日志模塊,這樣用戶空間的進(jìn)程能夠讀寫(xiě)日志消息,調(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è)備來(lái)說(shuō)相當(dāng)重要,也是最復(fù)雜,開(kāi)發(fā)難度最高的一個(gè)功能。Google 添加了一個(gè)新的電源管理系統(tǒng),并沒(méi)有原先 apm,dpm 等。
其他修改 -- 36 files
除了上述改動(dòng)之外,還有一些小改動(dòng),比如新增的額外的調(diào)試功能, 鍵盤(pán)背光控制,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)支持。
也有一些開(kāi)發(fā)人員將google 對(duì) 2.6.25 內(nèi)核的改動(dòng)做成補(bǔ)丁,直接打在自己開(kāi)發(fā)的內(nèi)核上 —— 當(dāng)然,自己的內(nèi)核也應(yīng)該是 2.6.25 ,否則會(huì)出問(wèn)題。
本文來(lái)自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è)目錄下面沒(méi)有內(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之類(lèi)特征的實(shí)現(xiàn)。
lib:存放體系結(jié)構(gòu)特有的對(duì)諸如strlen和memcpy之類(lèi)的通用函數(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è)備和需要訪問(wèn)存儲(chǔ)設(shè)備的進(jìn)程之間的媒介。存儲(chǔ)設(shè)備可能是本地的物理上可訪問(wèn)的,比如硬盤(pán)或CD-ROM驅(qū)動(dòng)器,它們分別使用ext2/ext3和isofs文件系統(tǒng);也可能是通過(guò)網(wǎng)絡(luò)訪問(wèn)的,使用NFS文件系統(tǒng)。
還有一些虛擬文件系統(tǒng),比如proc,它以一個(gè)標(biāo)準(zhǔn)文件系統(tǒng)出現(xiàn),然而,它其中的文件只存在于內(nèi)存中,并不占用磁盤(pán)空間。
(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)無(wú)關(guān)部分的內(nèi)核代碼可以使用如下形式包含體系相關(guān)部分的頭文件。
#include
include/linux/,與平臺(tái)無(wú)關(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)建和撤銷(xiāo)(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和其他類(lèi)似的函數(shù))以及有關(guān)sprintf和atoi的系列函數(shù)。與arch/lib下的代碼不同,這里的庫(kù)代碼都是使用C編寫(xiě)的,在內(nèi)核新的移植版本中可以直接使用。
(10)mm。
包含了體系結(jié)構(gòu)無(wú)關(guān)部分的內(nèi)存管理代碼,體系相關(guān)的部分位于arch/*/mm目錄下。
(11)net。
網(wǎng)絡(luò)相關(guān)代碼,實(shí)現(xiàn)了各種常見(jiàn)的網(wǎng)絡(luò)協(xié)議,如TCP/IP、IPX等。
(12)scripts。
該目錄下沒(méi)有內(nèi)核代碼,只包含了用來(lái)配置內(nèi)核的腳本文件。當(dāng)運(yùn)行make menuconfig或者make xconfig之類(lèi)的命令配置內(nèi)核時(shí),用戶就是和位于這個(gè)目錄下的腳本進(jìn)行交互的。[!--empirenews.page--]
(13)block。
block層的實(shí)現(xiàn)。最初block層的代碼一部分位于drivers目錄,一部分位于fs目錄,從2.6.15開(kāi)始,block層的核心代碼被提取出來(lái)放在了頂層的block目錄。
(14)crypto。
內(nèi)核本身所用的加密API,實(shí)現(xiàn)了常用的加密和散列算法,還有一些壓縮和CRC校驗(yàn)算法。
(15)security。
這個(gè)目錄包括了不同的Linux安全模型的代碼,比如NSA Security-Enhanced Linux。
(16)sound。
聲卡驅(qū)動(dòng)以及其他聲音相關(guān)的代碼。
(17)usr。
實(shí)現(xiàn)了用于打包和壓縮的的cpio等。