怎么写usb驱动( 二 )


设备节点 :/dev/binder 源码位置:Kernel/include/linux/binder.h Kernel/drivers/misc/binder.c 4.Android Power Management 一个基于标准 linux 电源管理的轻量级 Android 电源管理系统 , 在 drivers/android/power.c kernel/power/ 5.Low Memory Killer 它在用户空间中指定了一组内存临界值 , 当其中某个值与进程描述中的 oom_adj 值在同一范围时 , 该进程将被Kill掉(在parameters/adj中指定oome_adj 的最小值) 。它与标准的Linux OOM机制类似 , 只是实现方法不同 源码位置:drivers/misc/lowmemorykiller.c 6.Android PMEM PMEM 主要作用就是向用户空间提供连续的物理内存区域 。
1.让 GPU 或 VPU 缓冲区共享 CPU 核心 。2.用于 Android service 堆 。
源码位置:include/linux/android_pmem.h drivers/android/pmem.c 7.USB Gadget 基于标准 Linux USB gaeget 驱动框架的设备驱动 。源码位置:drivers/usb/gadet/ 8.Ram Console 为了提供调试功能 , android 允许将调试日志信息写入这个设备 , 它是基于 RAM 的 buffer. 源码位置: drivers/staging/android/ram_console.c 9.Time Device 定时控制 , 提供了对设备进行定时控制的功能 。
源码位置:drivers/staging/android/timed_output.c(timed_gpio.c) 10.Android Alarm 提供一个定时器 , 用于把设备从睡眠状态唤醒 , 同时它还提供了一个即使在设备睡眠时也会运行的时钟基准 。设备节点:/dev/alarm 源码位置:drivers/trc/alarm.c Android 设备驱动 1. Framebuffer 帧缓存设备 Framebuffer 驱动在 Linux 中是标准的显示设备的驱动 。
对于 PC 系统 , 它是显卡的驱动 ; 对于嵌入式 SOC 处理器系统 , 它是 LCD 控制器或者其他显示控制器的驱动 。它是一个字符设备 , 在文件系统中设备节点通常是 /dev/fbx。
每个系统可以有多个显示设备  ,  依次用 /dev/fbO 、/dev/fb l 等来表示 。在 Android 系统中主设备号为 29  , 次设备号递增生成 。
【怎么写usb驱动】 Android 对 Framebuffer 驱动的使用方式是标准的  ,  在 / dev / graphie / 中的 Framebuffer 设备节点由 init 进程自动创建  ,  被 libui 库调用。Android 的 GUI 系统中  ,  通过调用 Framebuffer 驱动的标准接口 , 实现显示设备的抽象 。
Framebuff的结构框架和实现 : linux LCD驱动(二)--FrameBuffer Linux LCD驱动(四)--驱动的实现 2.Event输入设备驱动 Input 驱动程序是 Linux 输入设备的驱动程序  ,  分为游戏杆 (joystick) 、鼠标 (mouse 和 mice)和事件设备 (Event queue)3 种驱动程序 。其中事件驱动程序是目前通用的程序 , 可支持键盘 、鼠标、触摸屏等多种输入设备 。
Input 驱动程序的主设备号是 l3  , 每一种 Input 设备从设备号占 用5 位  ,  3 种从设备号分配是 : 游戏杆 0 ~ 61 ; Mouse 鼠标 33 ~ 62 ; Mice 鼠标 63 ; 事件设备 64 ~ 95  , 各个具体的设备在 misc 、touchscreen 、keyboard 等目录中 。Event 设备在用户空问使用 read 、ioctl 、poll 等文件系统的接口操作 ,  read 用于读取输入信息 ,  ioctl 用于获取和设置信息 ,  poll 用于用户空间的阻塞 , 当内核有按键等中断时 , 通过在中断中唤醒内核的 poll 实现 。

3. 怎样写Linux下的USB设备驱动程序 写一个USB的驱动程序最 基本的要做四件事:驱动程序要支持的设备、注册USB驱动程序、探测和断开、提交和控制urb(USB请求块) 驱动程序支持的设备:有一个结构体struct usb_device_id , 这个结构体提供了一列不同类型的该驱动程序支持的USB设备 , 对于一个只控制一个特定的USB设备的驱动程序来说 , struct usb_device_id表被定义为:/* 驱动程序支持的设备列表 */ static struct usb_device_id skel_table [] = { { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) } ,  { } /* 终止入口 */ }; MODULE_DEVICE_TABLE (usb, skel_table); 对 于PC驱动程序 , MODULE_DEVICE_TABLE是必需的 , 而且usb必需为该宏的第一个值 , 而USB_SKEL_VENDOR_ID和 USB_SKEL_PRODUCT_ID就是这个特殊设备的制造商和产品的ID了 , 我们在程序中把定义的值改为我们这款USB的 , 如:/* 定义制造商和产品的ID号 */#define USB_SKEL_VENDOR_ID 0x1234#define USB_SKEL_PRODUCT_ID 0x2345 这两个值可以通过命令lsusb , 当然你得先把USB设备先插到主机上了 。