Android系统中的专有驱动

Posted on Sep 6, 2016


在本章中,将逐个分析Android系统对于Linux添加的一些特有驱动。 注意,这里解析的驱动是与硬件无关的驱动,这些驱动通常是为Android的上层软件层所使用的。 如果你需要了解Linux硬件驱动层的开发知识,请参阅其他资料。

准备工作

驱动层的代码并不在AOSP的代码库中,而是与Linux 内核的代码在同一个仓库。 又由于种种原因,Android特有的驱动程序并没有合入Linux Kernel的主线。因此,你需要专门针对你设备获取相应的内核代码。

你可以通过git clone来获取代码,内核的仓库有:

git clone https://android.googlesource.com/kernel/common.git

git clone https://android.googlesource.com/kernel/hikey-linaro

git clone https://android.googlesource.com/kernel/x86_64.git

git clone https://android.googlesource.com/kernel/exynos.git

git clone https://android.googlesource.com/kernel/goldfish.git

git clone https://android.googlesource.com/kernel/msm.git

git clone https://android.googlesource.com/kernel/omap.git

git clone https://android.googlesource.com/kernel/samsung.git

git clone https://android.googlesource.com/kernel/tegra.git

这其中:

  • goldfish项目包含了模拟器的内核代码
  • msm项目是为Qualcomm MSM芯片,支持的设备包括:ADP1, ADP2, Nexus One, Nexus 4, Nexus 5, Nexus 6, Nexus 5X, Nexus 6P, Nexus 7 (2013)
  • omap项目是为TI OMAP芯片,支持的设备包括:PandaBoard 和 Galaxy Nexus
  • samsung是为Samsung Hummingbird芯片,支持的设备包括:Nexus S
  • tegra项目是为NVIDIA Tegra芯片,支持的设备包括: Xoom, Nexus 7 (2012)
  • exynos项目是为Samsung Exynos芯片,支持的设备包括:Nexus 10
  • x86_64项目是为Intel x86_64芯片,支持的设备包括:Nexus Player
  • hikey-linaro是为HiSilicon 620芯片

专有驱动

Android在Linux中新增了几个专有驱动,这些驱动基本上与硬件无关,主要是为了上层软件层服务的,它们是:

  • Binder: 进程间通讯(IPC)基础设施。Binder在Android系统中使用的地方非常多,几乎所有的Framework层的服务都是通过Binder的形式暴露出接口供外部使用的。
  • Ashmem 匿名共享内存。共享内存的作用是,当多个进程需要访问同一块数据时,可以避免数据拷贝。例如,经由ContentProvider接口获取数据的客户端和ContentProvider之间就是通过共享内存的方式来访问的。
  • lowmemorykiller 进程回收模块。在Framework层,所有的应用进程都是有ActivityManagerService来管理,它会根据进程的重要性设置一个优先级,这个优先级会被LMK读取。在系统内存较低时,LMK会根据进程的优先级排序,将优先级低的进程杀死,直到系统恢复到合适的内存状态。
  • logger 日志相关。开发人员经常会使用logcat读取日志来帮助分析问题。而无论是logcat工具,还是通过日志API写入日志,最终都是有底层的Logger驱动进行处理。
  • wakelock 电源管理相关。Android系统通常运行在以电池供电的移动设备上,因此专门增加了该模块来管理电源。
  • Alarm 闹钟相关,为AlarmManager服务。

推荐读物

对于Linux驱动的相关知识,推荐以下两本书籍:

当然,如果希望了解更多的内核开发知识,也是有益的:

参考资料


 Contents