Android Kernel移植流程
参考文档
Documentation/android.txt
修改kernel config
Android Driver
- Android Binder:基于openBinder框架的驱动,进程间通信底层主要驱动,没有可它,android无法工作
- Android Logger:是一个轻量级的日志系统,在内核里是misc(杂项)设备驱动,它与logcat配合实现调试。
代码位置:driver/staging/android/logger.c - Android Low memory killer:低内存管理器,是linux标准OOM(Out Of Memory)改进版,当系统内存不足时,会杀死一些不重要的进程,释放空间
代码位置:driver/staging/android/lowmemorykiller.c - Android Ram Console:辅助调试的内核机制,它用一段物理内存虚拟一个console设备,这样printk的时候会把调试信息写一份到这块ram,最后通过/proc文件系统输出
- Android Timed Device timed_gpio:基于platform driver实现的一个增强的gpio驱动,它与内核定时器绑定在了一起,实现了一种时钟控制的gpio
- Android Switch:android新引进的驱动,用于检查一些开关量,如耳机插入,USB设备插入,通过sysfs实现
- Android Power Mananger:基于标准linux电源管理系统的轻量级电源管理驱动
- Android Ashmem:匿名共享内存,为进程间通信提供大块共享内存,同时为内核提供回收和管理这些内存的机制
- Android PMEM:用于向用户空间提供连续的物理内存,DSP和其他需要连续物理内存的设备需要它的提供服务
代码位置:driver/misc/pmem.c - Android alarm:提供一个定时器用于把设备从睡眠状态唤醒,同时它也提供了一个即使在设备睡眠时也会运行的时钟基准。
代码位置:driver/rtc/alarm.c - USB Gadget:一个基于标准Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gadget框架的
代码位置:driver/usb/gadget
移植Drivers
Connectivity
Bluetooth
GPS
Wi-Fi
Display Drivers
Input Devices
Keymaps and Keyboard
Lights
Multimedia
Audio
Camera/Video
Power Management
Sensors
Telephony
Radio Interface Layer
SIM Toolkit Application(STK)
Android Linux Kernel 特性
从Linux 2.6.33开始,Google智能手机操作系统Android核心代码被删除。
Android 2.2 froyo使用Linux Kernel版本为2.6.32
Linux 2.6.32版本上Android添加了如下几个模块
几个重要的makefile
- Android.mk 编译源码mk文件,每个module和package目录下有这么一个文件
- main.mk 定义编译全部代码的依赖关系
- config.mk 用于配制编译系统,决定如何编译
- envsetup.mk 定义了编译环境配置
- product_config.mk 读取AndroidProducts.mk生成TARGET_DEVICE变量
- AndroidProducts.mk 定义了某厂商所有产品文件列表
- BoardConfig.mk 定义开发板软件相关配置项,将来影响系统条件编译。
编译Android系统
- source build/envsetup.sh
加载编译用到的环境变量
定义了一些命令参数,这些命令函数方便用户选择Android产品编译选项,如help,lunch等
加载vendor目录下自定义厂商产品编译项文件vendorsetup.sh,以此让编译系统编译不同产品的定制系统。 - lunch [build-option]
用于选定编译平台
不加build-option打印所有的系统编译项,设置主要的环境变量
TARGET_RPODUCT,TARGET_BUILD_VARIANT、TARGET_BUILD_TYPE - make
执行编译
make 依据当前目录下Makefile编译目标文件
-j4 表示4线程同时编译(多核心)
make snod make //sdk no depend 只编译SDK,生成system.img
make ramdisk
make framework
make sdk
m 编译全部
mm 只编译当前目录
mmm 编译指定目录
编译结果
保存目录:out/target/product/<products>/
ramdisk.img | 虚拟内存盘,用内存来模拟磁盘,它在Linux内核启动后被挂载,该镜像里保存有Android最基本的文件系统以及一些命令 |
system.img | Android系统主要的文件系统镜像,里面包含有Android系统运行必须的库,程序和配置文件 |
userdata.img | 用户数据镜像,它是用户应用程序,用户信息保存目录 |
recovery.img | 系统恢复镜像,当系统进入恢复模式时的启动镜像 |
Android系统磁盘分区(一般情况)
boot分区 | 存储boot.img镜像 |
system分区 | 存放system.img镜像 |
userdata分区 | 存放userdata.img镜像 |
recovery分区 | 存放recovery.img镜像 |
cache分区 | 应用程序缓存分区,加快程序启动 |
misc分区 | 系统设置厂商硬件设置信息分区 |
Android 系统移植流程
Android.mk模板