我是靠谱客的博主 任性萝莉,最近开发中收集的这篇文章主要介绍[笔记分享] [Android] Android的Linux内核与驱动,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

3.1 Android的Linux和标准Linux区别
Android和标准Linux2.6相同,只是多增加了内容,有两种:Android专用驱动和Android使用的设备驱动。还增加了些内容,如yaffs文件系统。

3.2 Android专用驱动
这些驱动一般不操作实际硬件,只是辅助系统运行,包括:
1. Ashmen:匿名共享内存驱动。
2. Logger:轻量级Log驱动。
3. Binder:基于OpenBinder系统驱动,为Android平台提供IPC支持。
4. PM: 电源管理模块。
5. Low Memory Kill: 缺少内存时,杀死进程。
6. Android PMEM: 物理内存驱动

a)Ashmem
通过这种内核机制,可为用户空间程序提供内存分配机制。实现类似于malloc()功能。

b)Binder
Binder的驱动程序为用户层程序提供IPC支持,整个系统依赖于它。它是Android主要使用的IPC方式,通常只要按照模板定义相关类即可,不用直接调用驱动。

c)Logger
该驱动为用户层提供log支持,作为一个工具使用。

3.3 Android使用的设备驱动
a)Framebuffer
标准显示设备驱动。每个系统可以有多个显示设备,对应也可以有多个framebuffer。在用户空间大多使用ioctl、mmap等接口来操作。也可以直接write操作,直接输出显示内容。架构如下:
这里写图片描述

驱动中关键数据结构如下:
这里写图片描述

通常通过以下函数注册:

这里写图片描述

在注册之前,先要初始化fb_info信息,包括fb_ops。当上层用ioctl时,会调用fb_ops中的函数。

Android中的fb路径稍有不同,如下所示:
/dev/graphic/fb0
该节点由init进程创建,被libui库调用。

b)Event输入设备驱动
分成游戏杆、鼠标和事件设备三种驱动。其中事件驱动式通用驱动程序,包括键盘、鼠标、触摸屏等输入设备。
用户空间通过read、ioctl、poll等接口操作。Read读取输入信息,ioctl获得和配置信息、poll可以阻塞,当按键等中断来时,唤醒poll,这样Poll就可返回了。架构如下:
这里写图片描述

驱动中关键输入结构如下:
这里写图片描述

注册函数如下:

这里写图片描述

该节点由init进程创建,被libui库调用。

除了上述驱动之外,还有视频驱动、音频驱动、MTD驱动、蓝牙驱动和wifi驱动。这里就不一一介绍了。

最后

以上就是任性萝莉为你收集整理的[笔记分享] [Android] Android的Linux内核与驱动的全部内容,希望文章能够帮你解决[笔记分享] [Android] Android的Linux内核与驱动所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部