新聞中心

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

Android Linux 內核介紹

作者: 時間:2016-09-12 來源:網絡 收藏

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內核配置

Android 是基于 Linux 的 , 對于一個新的設備,我們 首先要 編譯一個支持 Android 的 Kernel ,那么如何 使 你的 Kernel Android 化呢?除了要移植前面提到的驅動之外,就是如何配置你的 Kernel 來支持 Android 平臺,這可以參考 Goldfish 的內核配置文件 - arch/arm/configs/goldfish_defconfig 。

一般來說,我們會基于一個平臺標準內核配置選項來配置 Android 內核,你可以根據(jù)具體的硬件平臺來選擇 Android 內核的配置選項,可以參考下面的 Android 內核配置列表:

一般需要支持的內核選項

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推薦不要支持下面兩個功能:

CONFIG_YAFFS_DISABLE_LAZY_LOAD

DNOTIFY

配置好后,就可以用Toolchain來編譯內核了。編譯內核比較簡單,以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= PATH

- make goldfish_defconfig

- make

Google對 2.6.25 內核里做了什么改動呢?

有家公司專門比較了標準內核和android 內核,發(fā)現(xiàn) google 修改了 75 個文件,增加了 88 個文件。改公司還對這些被修改的和新增的文件做了注解。

Goldfish -- 44 Files

Android模擬器運行了一個被 google 叫做 “ 金魚 的虛擬 CPU. 金魚運行 arm926t 指令集( arm926t 是屬于 armv5 架構);并且仿真了輸入輸出:比如鍵盤輸入和 LCD 輸出。這個模擬器其實是在 qemu 之上開發(fā)的,輸入輸出基于 libSDL.

內核里這個Goldfish 接口實現(xiàn)了這個虛擬 “ 金魚 ”CPU 的一些接口,如果想在真實設備上運行 android, 這些接口肯定要去掉的。

arm926ej的介紹見 http://www.arm.com/products/CPUs/ARM926EJ-S.html

YAFFS2 -- 35 Files

不同于PC 機,文件是存儲在硬盤上的;手機使用 FLASH 作為存儲介質。 HTC 的 G1 使用 NANDFLASH—— 這中存儲目前已經相當普及了 , 而且種類也頗多, (SLC,MLC 等等),存儲密度也越來越高(已經出現(xiàn)幾十 G 大小的 NANDFLASH) ,價格也越來越低。

YAFFS2是專門用在 FLASH 上的文件系統(tǒng), “YAFFS2” 是 Yet Another Flash File System, 2nd edition 的縮寫。 YAFFS2 為 Linux 內核提供了一個高效訪問 NANDFLASH 的接口。但是 NANDFLASH 的支持并不包含在標準的 2.6.25 內核中,所以 Google 在其中添加了對 NANDFLASH 的支持。

藍牙 -- 10 files

在藍牙通訊協(xié)議棧里Google 修改了 10 個文件。這些改動解決了一些跟藍牙耳機相關的明顯的 bug ,以及一些藍牙調試和訪問控制相關的函數(shù)。

調度器 -- 5 files

Android內核還修改了進程調度和時鐘相關策略,這個改動就比較深入了。其目的和效果估計在一段時間后才能找到。

為android 新增的功能 -- 28 files

除了修正一些bug 以及其他的改動, android 還增加了一些新的 “ 子系統(tǒng) ” ,這些系統(tǒng)都比較重要。

IPC Binder

IPC Binder是一種 IPC( 進程間通信)機制。它是的進程能夠為其他進程提供服務 —— 還是通過標準的 linux 系統(tǒng)調用 api 。 IPC Binder 的概念起源于一家叫做 “Be.Inc 的公司,在 Google 之前就已經被然后被用到 Palm 軟件里去了。

Low Memory Killer

其實內核里已經有一個類似的功能, 叫做oom killer, 就是 out of memory killer, 當內存不夠的時候,改策略會試圖結束一個進程。不知道為什么 Google 重新實現(xiàn)了這個策略。

Ashmem

Ashmem,全程 Anonymous SHared MEMory, 翻譯成中文就是匿名共享內存。這個功能使得進程間能夠共享大塊的內存。比如說,系統(tǒng)可以使用 Ashmem 保存一些圖標,多個應用程序可以訪問這個共享內存來獲取圖標。 Ashmem 為內核提供了一種回收這些使用完的共享內存塊的辦法 , 如果一個進程試圖訪問這些已經被回收的內存塊,它將會得到錯誤的返回值,以便它重新進行內存塊分配和數(shù)據(jù)初始化。



關鍵詞:

評論


相關推薦

技術專區(qū)

關閉