Android(安卓)Linux Kernel 移植流程
16lz
2022-06-05
Android Kernel移植流程
参考文档 Documentation/android.txt 修改kernel configAndroid 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/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.mk模板
更多相关文章
- 关于Ant编译Android中Ant学习研究
- Android(安卓)emulator中的system.img,userdata.img和ramdisk.img
- Debian 5 Android(安卓)编译
- Ubuntu 10.10 编译Android(安卓)2.2
- Android(安卓)Studio编译release版本
- android jni
- 重装或者升级Android(安卓)Studio后,打开旧的Android项目,同步编译
- Android(安卓)recovery 模式
- windows下搭建android NDK环境