Android Linux Kernel 移植流程

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张图片

你可能感兴趣的:(嵌入式,Android)