
Linux 设备驱动程序
Byte1990
这个作者很懒,什么都没留下…
展开
-
USB驱动程序设计
USB 系统架构(基础知识)系统结构:每个结构都有一个Host主控制器,下面可接多级Hub,最多可接127个设备。常见USB主控制器规格:OHCI:非PC系统的USB芯片UHCI:大多Intel和Via主板控制器,USB1.1规格EHCI:兼容OHCI、EHCI,USB2.0规格USB设备逻辑结构包含4个层次:设备、配置、接口、端点,设备通常有1个或多个配置,配置有1个原创 2014-02-21 09:09:20 · 1222 阅读 · 0 评论 -
块设备(二)
块设备驱动(二)块设备数据访问流程:generic_make_request () ------> __genenric_make_request() -----> q->make_request_fn(q, bio)当有用户需求来的时候,在通用块层使用generic_make_request () 形成一个请求,然后调用__genenric_make_request(bio)形成原创 2014-03-04 21:37:15 · 992 阅读 · 0 评论 -
串口驱动程序设计
终端控制台体系串口之前要知道终端控制台,在Linux中,tty(终端)是一类字符设备的统称,包括3种类型: 控制台、串口和伪终端。控制台:内核信息打印到的地方,printk打印的地方,控制台可以指定,通过console=ttys0指定串口0终端为控制台,是虚拟的要绑定真实的设备,比如串口、显示器。伪终端:成对出现的,通常用来做远程通信,类似管道。终端体系:包含:tty原创 2014-03-02 21:48:30 · 2738 阅读 · 0 评论 -
PCI总线(一)
总线用来连接计算机和外部设备的,传输信号和数据,是数据通信的通道,由电气接口和编程接口组成,重点关注编程接口。PCI是Peripheral Component Interconnect(外围设备互联)的简称,在pc系统广泛使用。PCI三个显著优点:在计算机和外设间传递数据具有更好的性能;能够尽量独立于具体的平台;可以方便的实现即插即用。体系结构,CPU和存储器之间是系统总线原创 2014-02-27 22:04:23 · 2130 阅读 · 0 评论 -
PCI总线(二)
PCI网卡驱动程序分析 针对GNIC- II的千兆以太网卡,源程序文件/drivers/net/hamachi.c1:初始化static int __init hamachi_init (void) {if(pci_register_driver (&hamachi_driver) > 0)return 0;pci_unregister_driver (&hamachi_原创 2014-02-27 22:05:33 · 1240 阅读 · 0 评论 -
USB设备驱动程序(三)
Linux2.6内核 #include #include #include #include #include #include /* for apple IDs */ #ifdef CONFIG_USB_HID_MODULE #include "../hid-ids.h" #endif MODULE_AUTHOR(DRIVER_AUTHOR); MODU原创 2014-02-21 21:47:29 · 1336 阅读 · 0 评论 -
USB设备驱动程序(四)
首先分析usb_mouse_init,通过usb_register(&usb_mouse_driver)注册驱动程序,probe函数调用1.先插设备后安装驱动,USB core会遍历所有系统中已存在的USB设备,然后看usb_mouse_id_table, /* 所能支持设备列表 */有无系统支持的设备如果有则调用probe函数,2.先装驱动后装鼠标,USB core发现新的设备进来,会寻找有无能原创 2014-02-21 21:48:42 · 1069 阅读 · 0 评论 -
platform设备驱动
平台(Platform)总线是Linux2.6引入的一条虚拟总线,由两部分组成平台设备(platform_device),平台驱动(platform_driver),传统驱动模型转化成platform驱动会提高程序的可移植性,比如改platform总线为PCI或USB总线,移植的工作量就很小,如果为传统字符设备,移植工作量就很大,而且内核可以帮助platform总线驱动的管理。开发流程1:通过原创 2014-02-24 21:42:33 · 947 阅读 · 0 评论 -
触摸屏驱动程序
触摸屏工作原理:S3c2440触摸屏目标是获取X/Y坐标信息,坐标信息获取分两种:1:X/Y位置分布转换模式,先获取其中一个坐标,再获取另外一个。2:X/Y自动转换模式,两个坐标同时获取到。工作流程一:选择X/Y坐标获取模式,分别还是自动。二:设置触摸屏到等待终端的状态。三:如果中断发生启动相应数模转换。四:数模转换完成后获取坐标X/Y值,返回等待中断状态,到二之后三之原创 2014-02-26 21:53:30 · 1454 阅读 · 0 评论 -
Linux 输入子系统 input 子系统
input 子系统Linux系统提供了input子系统,按键、触摸屏、鼠标等输入型设备都可以使用input接口函数模型来设计设备驱动,通过这些设备Linux能够获取到一些按键键值、坐标等信息。input子系统模型。系统由3部分组成,1:driver驱动程序(工程师需要完成)2:input core 3:事件处理Event Handler,这两者内核已提供。我们只原创 2014-02-26 21:51:54 · 1538 阅读 · 0 评论 -
Cs8900网卡驱动程序分析
Cs8900网卡驱动程序分析首先介绍Cs8900一些寄存器的情况:LINECTL(线控制寄存器)(0112H)用于决定网卡工作模式情况。RXCTL(接收控制寄存器)(0104H)表示接收网络上的广播或目的接收地址同本地mac地址 相同的数据包。RXCFG(接收配置寄存器)(0102H)当收到包后是否产生接受中断。BUSCT(0116H)可控制芯片的I/O接口的一些操作,设置原创 2014-02-26 21:41:48 · 1338 阅读 · 0 评论 -
总线设备驱动模型
总线设备驱动模型总线是主机和设备之间的通道,由bus_type结构描述。int bus_register(struct bus_type *bus) 总线的注册,若成功,新的总线将被添加进系统,并可在sysfs的/sys/bus 下看到。void bus_unregister(struct bus_type *bus) 总线的删除。int (*match) (struct de原创 2014-02-23 22:01:16 · 938 阅读 · 0 评论 -
中断-----按键中断驱动程序
中断处理1:外设的处理速度一般慢于CPU。2:CPU不能一直等待外部事件,所以设备必须有一种方法来通知CPU它的工作进度,这个方法就是中断,外设与CPU信息交互的机制,提高CPU利用率。处理之外还有查询,但是查询会一直占有CPU资源,导致CPU低利用率,好处是实现简单。Linux系统中为设备实现中断处理程序,需要做两件事,1:向内核注册中断,让Linux内核知道中断的存在。2:实现中断处理原创 2014-02-24 21:44:17 · 1520 阅读 · 0 评论 -
Linux网络协子系统架构
Linux网络协子系统架构System call interface :网络相关系统调用的实现。Protocol agnostic interface(协议无关接口):屏蔽协议相关的操作,不论什么协议(UDP,TCP),提供给系统调用一个统一的接口。Network protocols:Linux网络协议栈,用来实现各种各样的网络协议。Device agnostic interf原创 2014-02-25 21:40:22 · 1662 阅读 · 0 评论 -
驱动程序中的硬件操作(2)
硬件访问 就是访问寄存器,所以必须要了解寄存器和内存的区别,在LDD中说明,寄存器的操作会出现副作用(side effect 或边际效果),当读寄存器时,可能会改变寄存器的值,并不是一定,读取某个地址时可能导致该地址内容发生变化,比如有的中断状态寄存器,读过后会自动清零,因为寄存器以为你已经把中断状态取走了,已经知道中断发生。接下来还要内存和I/O概念在x86处理器中存在I/O空间的概念,I/原创 2014-02-23 21:45:04 · 1141 阅读 · 0 评论 -
kobject和kset
kobject和kset首先介绍Sys文件系统:基于RAM的文件系统,把内核数据结构以及他们之间的属性和关系展示给用户,从linux2.6引入,sys同proc同类级别属于内存的文件系统,设备和总线驱动模型就在sysfs中,被加载到 /sys/目录下,子目录包括1:Block:里面存放块设备的信息,系统中每个块设备在该目录下都会有一个子目录。2:Bus:在Linux中注册的每一条总线在原创 2014-02-23 21:55:32 · 941 阅读 · 0 评论 -
驱动程序中的硬件操作(1)
mmap设备驱动mmap 系统调用void* mmap (void *addr, size_t len , int port, int flags, int fd, off_t offset)作用把文件内容映射到进程虚拟地址空间,映射后对文件的操作,就不会使用read,write函数,直接使用指针就可以操作,参数意义:addr指定定映射的起始地址(进程虚拟空间位置),通常为NULL,由系原创 2014-02-23 21:42:33 · 1042 阅读 · 0 评论 -
USB设备驱动程序(二)
USB设备驱动程序中的结构在Linux内核中,使用struct usb_driver结构描述一个USB驱动。struct usb_driver {int devnum; /*USB设备号*/char devpath[16] ; /*设置ID字符串*/enum usb_device_state state; /*设备状态:未连接,已配置*/enum usb_devic原创 2014-02-21 21:45:12 · 1209 阅读 · 0 评论 -
块设备(一)
块设备驱动(一)以数据块为访问单位的设备,数据块的大小不固定一般为512的倍数,块设备和字符设备的区别读写数据的基本单元不同,块设备读写数据的基本单元为块,字符设备基本单元为字节,块设备可以随机访问,字符设备只能顺序访问。块设备在Linux结构中体系Disk Caches(缓存):当用户发起文件访问请求时,首先回到Disk Caches中寻找文件是否被缓存了,如果在Disk原创 2014-03-04 21:34:31 · 1120 阅读 · 0 评论