新闻中心

EEPW首页>嵌入式系统>设计应用> 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 内核,你可以根据具体的硬件平台来选择 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 内核,发现 google 修改了 75 个文件,增加了 88 个文件。改公司还对这些被修改的和新增的文件做了注解。

Goldfish -- 44 Files

Android模拟器运行了一个被 google 叫做 “ 金鱼 的虚拟 CPU. 金鱼运行 arm926t 指令集( arm926t 是属于 armv5 架构);并且仿真了输入输出:比如键盘输入和 LCD 输出。这个模拟器其实是在 qemu 之上开发的,输入输出基于 libSDL.

内核里这个Goldfish 接口实现了这个虚拟 “ 金鱼 ”CPU 的一些接口,如果想在真实设备上运行 android, 这些接口肯定要去掉的。

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

YAFFS2 -- 35 Files

不同于PC 机,文件是存储在硬盘上的;手机使用 FLASH 作为存储介质。 HTC 的 G1 使用 NANDFLASH—— 这中存储目前已经相当普及了 , 而且种类也颇多, (SLC,MLC 等等),存储密度也越来越高(已经出现几十 G 大小的 NANDFLASH) ,价格也越来越低。

YAFFS2是专门用在 FLASH 上的文件系统, “YAFFS2” 是 Yet Another Flash File System, 2nd edition 的缩写。 YAFFS2 为 Linux 内核提供了一个高效访问 NANDFLASH 的接口。但是 NANDFLASH 的支持并不包含在标准的 2.6.25 内核中,所以 Google 在其中添加了对 NANDFLASH 的支持。

蓝牙 -- 10 files

在蓝牙通讯协议栈里Google 修改了 10 个文件。这些改动解决了一些跟蓝牙耳机相关的明显的 bug ,以及一些蓝牙调试和访问控制相关的函数。

调度器 -- 5 files

Android内核还修改了进程调度和时钟相关策略,这个改动就比较深入了。其目的和效果估计在一段时间后才能找到。

为android 新增的功能 -- 28 files

除了修正一些bug 以及其他的改动, android 还增加了一些新的 “ 子系统 ” ,这些系统都比较重要。

IPC Binder

IPC Binder是一种 IPC( 进程间通信)机制。它是的进程能够为其他进程提供服务 —— 还是通过标准的 linux 系统调用 api 。 IPC Binder 的概念起源于一家叫做 “Be.Inc 的公司,在 Google 之前就已经被然后被用到 Palm 软件里去了。

Low Memory Killer

其实内核里已经有一个类似的功能, 叫做oom killer, 就是 out of memory killer, 当内存不够的时候,改策略会试图结束一个进程。不知道为什么 Google 重新实现了这个策略。

Ashmem

Ashmem,全程 Anonymous SHared MEMory, 翻译成中文就是匿名共享内存。这个功能使得进程间能够共享大块的内存。比如说,系统可以使用 Ashmem 保存一些图标,多个应用程序可以访问这个共享内存来获取图标。 Ashmem 为内核提供了一种回收这些使用完的共享内存块的办法 , 如果一个进程试图访问这些已经被回收的内存块,它将会得到错误的返回值,以便它重新进行内存块分配和数据初始化。



关键词:

评论


相关推荐

技术专区

关闭