zoukankan      html  css  js  c++  java
  • Android驱动

    Android驱动

    >>>用户空间驱动程序

    在用户空间实现驱动程序是把驱动程序的一部分放在用户空间,但不能将驱动程序的任意部分放在用户空间内。而且并非所有设备驱动都在用户空间实现(对于大部分设备驱动程序是在内核空间实现的)。

    >>>Linux设备驱动

    Linux将所有的设备当做文件处理(设备文件,通常在/dev目录下),应用程序可以像操作普通文件一样对设备文件进行操作。Linux系统的设备分为三类:字符设备、块设备和网络设备。

    字符设备:通常指像普通文件或字节流一样,一字节为单位顺序读/写的设备,如并口设备、虚拟控制台等。与普通文件的区别在于:普通文件可以被随机访问,而大多数字符设备只能提供顺序访问,因为对它们的访问不会被系统所缓存(帧缓存(framebuffer)除外)。

    块设备:指一些需要以块为单位随机读/写的设备,不仅可以提供随机访问,而且可以容纳文件系统(硬盘、缓存等)。

    网络设备:指通过网络能够与其他主机进行数据通信的设备(网卡等)。不同于内核和字符,以及块设备驱动程序之间的通信,内核和网络设备驱动程序之间的通信调用一套数据包处理函数。Linux网络设备不是面向流的设备,因此不会将网络设备的名称(如eth0)映射到文件系统中去。

    >>>Android专用驱动

    Android专用驱动一般不是Linux的标准驱动,作用是辅助系统运行,一般不操作实际硬件。

    (1)Ashmem:匿名共享内存驱动,通过内核的机制,为用户空间程序提供分配内存的机制
    (2)Logger:轻量级的log驱动,为用户层程序提供log的支持
    (3)Binder驱动:基于OpenBinder驱动,为Android平台提供IPC(进程间通信)的支持
    (4)能源管理:基于Linux的能源管理,为嵌入式系统做了优化
    (5)Android Power Management:定时器驱动,用于唤醒设备
    (6)Low Memory Killer:在缺少内存的情况下,杀死进程
    (7)Android PMEM:物理内存驱动

    >>>Android使用的设备驱动

    Framebuffer驱动、输入设备驱动、v4l2摄像头-视频驱动、OSS音频驱动,以上驱动的工作原理大致一致,在此做个总结:通过文件接口调用驱动设备节点(用户空间实现),查找对应的设备号,基于字符设备驱动程序核心,调用各自的驱动核心,进而调用具体驱动,通过驱动对硬件进行操作(内核空间实现)。
    ALSA音频驱动,工作原理与上述几种驱动有所不同:ALSA工具通过ALSA用户空间接口调用ALSA库,进而通过文件接口调用驱动设备节点,后面流程类似。
    MTD(内存技术设备)驱动,分为字符设备和块设备,二者统一调用MTD原始设备驱动核心,进而通过调用Flash驱动程序实现对硬件的调用。
    蓝牙驱动和WLAN驱动,二者皆为网络设备,使用网络接口。蓝牙设备的网络协议为协议族AF_BLUETOOTH(31),WLAN在用户空间使用标准的Socket接口进行控制。

  • 相关阅读:
    构造函数+this关键字+super关键字
    封装
    数组+方法
    流程控制语句
    java运算符+引用数据类型
    java的基础安装
    mysql数据库连接
    mysql数据库约束
    mysql数据库
    练习010:按奇偶排序数组
  • 原文地址:https://www.cnblogs.com/siyecho/p/9378487.html
Copyright © 2011-2022 走看看