护进程的实现; Android中内核的结构和标准Linux2.6内核 Framewoks/base/include/utils/——Binder驱基本相同,但增加了部分私有内容。
Android在 动在用户空间的封装接口;标准的Linux内核中的驱动主要分成两种类型: Frameworks/base/libs/utils/--Binder驱动Android专用驱动和Android使用的设备驱动。
在用户空间的封装实现。
其中主要的专用驱动包括:Ashmen:匿名共享 Binder是Android中主要使用的IPC方式,内存驱动;Logger:轻量级的log驱动;Binder: 使用时通常只需要按照模板定义相关的类即可,基于OpenBinder系统的驱动,为Android平台提 不需要直接调用Binder驱动程序的设备节点。
供IPC支持;Android Power Management(PM): (三)Logger电源管理模块;Low Memory Killer:在缺少内存 该驱动程序为用户层程序提供109支持,作的情况下,杀死进程;Android PMEM:物理内 为一个工具使用。
在用户空间中有3个设备节存驱动。
点:/dev/log/main、/dev/log/event、/dev/log/ (一)Ashmen radio,主设备号为10,次设备号动态生成。
即匿名共享内存(Anonymous Shared Memo— Logger驱动在内核中的头文件和代码路径ry),为用户空间程序提供分配内存的机制,实 如下:现类似malloc的功能。
其设备节点名称为:/ Kemel/inelude/linux/logger.hdev/ashmen.主设备号为10,次设备号动态生 Kernel/driver/mise/logger.e成。
其驱动程序在内核中的头文件和代码路径 在Android的用户空间logcat程序调用Log—如下: get驱动: Kernel/include/linux/ashmen.h SysteⅡ‖coDe/logca‖——可执行程序。
Kemel/mm/ashmen.e Logcat是一个可执行程序,用于提取系统 在用户空问C libutil库对Ashmen进行封装 log信息,是系统的一个辅助工具。
并提供接口; System/core/include/eutils/ashmen.h——简 五、Linux设备驱动在Android上的使用单封装头文件; 分析 System/eore/libeutils/ashmen—dev.c——匿 Linux设备驱动程序,在为智能手机定制的名共享内存在用户空间的调用封装; Android操作系统中得到了广泛的应用,下面对 System/eore/libeutils/ashmen—host.c——没 几个比较有特色的设备驱动的使用情况进行有使用。
分析。
用于为Android系统提供内存分配功能。
(一)Framebuffer显示驱动 (二)Binder Framebuffer驱动在Linux中是标准的显示设 为用户层程序提供进程问通信(IPC)支 备的驱动。
对于Pc系统,它是显卡的驱动;对持,Android整个系统的运行依赖Binder驱动。
于嵌入式SOC处理器系统,它是LCD控制器或其设备节点名称为:/dev/binder,主设备号为 者其他显示控制器的驱动。
它是一个字符设备,10,次设备号动态生成。
在文件系统中设备节点通常是/dev/fbx。
每个系 98 万方数据2010年第4期(总第41期) 广州广播电视大学学报统可以有多个显示设备,依次用/dev/fb0、/ —info);dev/fbl等来表示。
在Android系统中主设备号 具体的Framebuffer驱动需要实现fb—info为29,次设备号递增生成。
结构,实现fb—ops中的各个函数指针。
从驱动 该驱动在用户空问一般使用ioctl、mmap等 程序的用户空间进行ioctl调用时,会转换成调文件系统接口进行操作,ioetl用于获得和设置 用其中的函数。
信息,mmap将Framebuffer的内存映射到用户空 Android对Framebuffer驱动的使用方式是标问。
驱动也可以直接支持write操作,用写的方 准的,在/dev/graphic/中的Framebuffer设备节式输出显示内容。
显示驱动的架构如图2所示。
点由init进程自动创建,被libui库调用。
An— droid的GUI系统中,通过调用Framebuffer驱动 的标准接口,实现显示设备的抽象。
(二)Event输入设备驱动 Input驱动程序是Linux输入设备的驱动程 序,分为游戏杆(joystick)、鼠标(mouse和 mice)和事件设备(Event queue)3种驱动程 序。
其中事件驱动程序是目前通用的程序,可 支持键盘、鼠标、触摸屏等多种输入设备。
In— put驱动程序的主设备号是13,每一种Input设 卜事希画f了i丽硬件层 备从设备号占用5位,3种从设备号分配是:游 戏杆0~61;Mouse鼠标33—62;Mice鼠标63; 事件设备64~95,各个具体的设备在misc、 图2 Framebuffer显示驱动架构图 touchscreen、keyboard等目录中。
Event设备在用户空问使用read、iocfl、poll 驱动的主要头文件位于include/linux/fb.h 等文件系统的接口操作,read用于读取输入信文件中;驱动核心实现位于drivers/video/fb— 息,ioctl用于获取和设置信息,poll用于用户空mem.e文件中,驱动中核心的数据接口是m— 问的阻塞,当内核有按键等中断时,通过在中info在fb.h中定义,如下所示。
断中唤醒内核的poll实现。
Event输入驱动的架 Struct fb—info{ Int node; 构如图3所示: Int flags; Struct fb—var—screeninfo var; /:}=变化屏幕信息木/ Struct fb—fix—screeninfo fix; /:l:固定屏幕信息木/ Struct fb—ops:}=fbops: /:l:Framebuffer驱动的操作:l:/ ……‘ } 该结构包含了驱动主要信息,struct fb—vat—screeninfo和Stmct fb—fix—screeninfo两个数据结构对应FBIOGET—VSCREENINFO和FBIO— 降两_再季i面两萌丽硬件层GET_FSCREENINFO这两个ioctl从用户空间获得的显示信息。
Fb—ops表示Framebuffer驱动的操作,通常通过以下函数进行注册: .
上一篇:
智能手机系统中文件 Android 实时监控的研究与实现
下一篇:
7*30m公路预应力混凝土连续梁桥上部结构设计