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系统

  1. source build/envsetup.sh
    加载编译用到的环境变量
    定义了一些命令参数,这些命令函数方便用户选择Android产品编译选项,如help,lunch等
    加载vendor目录下自定义厂商产品编译项文件vendorsetup.sh,以此让编译系统编译不同产品的定制系统。
  2. lunch [build-option]
    用于选定编译平台
    不加build-option打印所有的系统编译项,设置主要的环境变量
    TARGET_RPODUCT,TARGET_BUILD_VARIANT、TARGET_BUILD_TYPE
  3. 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 Linux Kernel 移植流程_第1张图片

Android 系统移植流程 Android Linux Kernel 移植流程_第2张图片
Android.mk模板 Android Linux Kernel 移植流程_第3张图片

更多相关文章

  1. android 内存优化(四) 性能优化-Systrace分析UI性能-含demo
  2. Android 原生系统给电信发短信出现乱码或者收不到的原因
  3. 2010.12.16——— android listView 显示图片 内存溢出问题
  4. Android 将自己的应用程序改成系统的应用程序
  5. 转载 Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
  6. Android设置系统开机自动永不休眠
  7. Gsensor的整个系统架构
  8. Android:系统信息(内存、cpu、sd卡、电量、版本)的获取

随机推荐

  1. Android简单图片浏览器
  2. android自定义dialog
  3. android简单的日期时间选择器
  4. Nexus6-Android7.1.1 卡刷root
  5. Android(安卓)get property的一种方法
  6. Android全屏显示 无标题栏、全屏、设置为
  7. android 地图 MapView API Key 获取
  8. Android去掉自动获取焦点
  9. "Failed to fetch URL https://dl-ssl.go
  10. android中shape的使用(android:angle小解)