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/<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如何单编kernel android linux kernel_Linux




Android.mk模板

android如何单编kernel android linux kernel_android如何单编kernel_02