随笔分类 -  linux驱动

摘要:INIT函数: 这是内核模块的初始化函数,其所作的工作只有注册定义好的USB驱动结构体。USB驱动结构体如下: Usb_driver中的probe函数是驱动和设备匹配成功后调用。 Usb_driver中的disconnect函数是驱动和设备断开连接后后调用。 Id_table中是驱动能够支持的设备列表,usb_device_id中记载的就是支持的设备。其中USB_interface_info是用... 阅读全文
posted @ 2016-03-08 19:55 DChipNau 阅读(1192) 评论(0) 推荐(0)
摘要:Linux USB架构 可以看出一个USB体系需要4个驱动:USB设备驱动(主要编写这部分),USB主控制器驱动,Gadget驱动,UDC驱动。 USB主要有4个功能: MassStorage:大容量存储,如硬盘,U盘。 USB-HID:人体接口设备,鼠标,键盘。 RNDIS:网卡。 CDC-ACM:u转串口。 USB描述符: USB驱动程序位于不同的内核子系统和USB主控制器之间,... 阅读全文
posted @ 2016-03-08 19:54 DChipNau 阅读(4285) 评论(0) 推荐(0)
摘要:USB简介:USB的几种版本:1. USB 1.0:速度 1.5Mb/s2. USB 1.1:速度 12Mb/s3. USB 2.0:速度 60MbB/s4. USB 3.0:速度 640MB/s USB的主要优点:1. 可以热插拔:不需要重复“关机将并口或串口电缆接上再开机”的动作。2. 携带方便。3. 标准统一,USB鼠标,USB硬盘,USB打印机都是用同样的标准与个人电脑连接。4. 可以连接... 阅读全文
posted @ 2016-03-08 19:51 DChipNau 阅读(5354) 评论(1) 推荐(0)
摘要:终端(tty): 在LINUX中,终端(TTY)是一类字符设备的统称,包含了三种类型:控制台,串口等物理串口和伪终端。 控制台: 供内核使用的终端为控制台,控制台在linux启动时,通过命令console=…制定,如果没有指定控制台,系统会把第一个注册的终端作为控制台。 控制台有如下的特点:1. 控制台是一个虚拟的终端,它必须映射到真正的终端上。比如映射到串口上。2. 控制台可以简答的理解为pr... 阅读全文
posted @ 2016-03-08 19:44 DChipNau 阅读(610) 评论(0) 推荐(0)
摘要:PCI总线概述:因为不实际操作了,所以就写一些方法论上的东西,纪念一下。PCI总线有三个非常显著的优点:1. 在计算机和外设传输数据时具有更好的性能。2. 能够尽量独立于具体的平台。3. 可以方便的实现即插即用。 PCI总线有两种非常常见的体系结构: 图一:从结构上看,PCI总线是一种不依附于某个具体处理器的局部总线,他是CPU和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的... 阅读全文
posted @ 2016-03-08 19:43 DChipNau 阅读(815) 评论(0) 推荐(0)
摘要:简介: LCD是基于液晶的。LCD(liquid crystal display)按驱动方式分类可以分为静态驱动,简单矩阵驱动,主动矩阵驱动。其中,简单矩阵又可以分为扭转向列型(TN)和超转向列型(STN),而主动矩阵驱动则以TFT(用的最多)为主。TN型液晶驱动:是LCD中最基本的,他只能将入射光旋转90度,视角只有30度。STN型驱动液晶:可以讲入射光旋转180度至270度,也改善了视角... 阅读全文
posted @ 2016-03-08 19:40 DChipNau 阅读(523) 评论(0) 推荐(0)
摘要:蜂鸣器驱动蜂鸣器分直流和交流两种,所谓的直流蜂鸣器是加个电压就可以响,交流蜂鸣器其实就相当于一个喇叭,直接加直流后不会出声或者声音很低,需要外加脉冲才能正常工作,这个脉冲可以是方波,也可以是一段音乐,这个信号属于交流信号。mini2440的蜂鸣器连接图如下: 貌似这是一个交流蜂鸣器,所以需要pwm驱动。 在此之前先介绍几个函数: S3C2410_GPB 如果gpioa的最低位引脚偏... 阅读全文
posted @ 2016-03-08 19:38 DChipNau 阅读(1383) 评论(0) 推荐(0)
摘要:sysfs文件系统:sysfs是2.6内核的一个特性,它允许内核代码经由一个in-memory的文件系统把信息出报(export)到用户进程中。在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值,也可以读取其文件获得属性值。对于每个注册到系统的kobject,在sys中都有一个目录来展现它,这个目录(... 阅读全文
posted @ 2016-03-08 19:36 DChipNau 阅读(450) 评论(0) 推荐(0)
摘要:Input system (输入子系统) 以前写一些输入设备(键盘,鼠标等)的驱动都是字符设备,混杂设备处理的,linux开源社区的大神门看到了这大量的输入设备如此分散不堪,就想有木有一种机制,可以对分散的,不同类别的输入设备进行统一的驱动,所以才出现了输入子系统。 输入子系统引入的好处:1) 统一了物理形态各异的相似输入设备的处理功能。例如:各种鼠标,不论PS/2,usb,还是蓝牙,都被同样... 阅读全文
posted @ 2015-12-01 14:56 DChipNau 阅读(666) 评论(0) 推荐(0)
摘要:总线设备驱动模型一个总线设备驱动包含三个元素:总线,驱动,设备。总线是处理器和设备之间的同道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟“platform”总线。 总线:描述总线的数据结构如下: 总线注册和删除使用: 下面介绍几个比较重要的总线方法: 。总线属性Buf_attribute的结构定义如下: 而总线设备和总线属性的结合和解除如下: 设备:Linux系统中的每一个总线... 阅读全文
posted @ 2015-12-01 14:51 DChipNau 阅读(436) 评论(0) 推荐(0)
摘要:Mmap系统调用: Mmap函数是内存映射函数,负责把文件内容映射到进程的虚拟内存空间,通过对这段内存的读取和修改,来实现堆文件的读取和修改,而不需要再调用read,write等操作。 原型如下: 其参数含义如下: 有映射函数就有解除映射函数,munmap就是解除映射的函数: 注意:直接映射过来的区间虽然用字符型形式表示,但是不一定包含‘\0’,所以使用字符型拷贝函数的时候要慎重。最好用内存拷贝... 阅读全文
posted @ 2015-12-01 14:50 DChipNau 阅读(517) 评论(0) 推荐(0)
摘要:等待队列:在linux驱动程序设计中,可以实现等待队列来实现进程的阻塞。等待队列可以看做保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待队列中取出进程。 主要方法如下: 但是我写的等待队列阻塞程序总有一些问题,就是不能成功唤醒等待程序,如下:正确版本: 错误版本: 查看了内核源码,原来是这样,如果传进去一个常数0,wait_event就永远都不会跳出去了。 Selec... 阅读全文
posted @ 2015-12-01 14:45 DChipNau 阅读(174) 评论(0) 推荐(0)
摘要:本文就来揭秘一下到底一个驱动的接口函数是如何被调用的: 首先我们来反汇编读驱动的程序: 跳转到__libc_read,发现他把r7赋值给3,3是传过去的参数,然后调用svc指令,进入内核态相应的入口: 接下来就已经进入内核态,入口函数中将存入r7中的3取出。 然后加载一张表,表名是sys_call_call,根据这个表中内容,断定3到底是对应什么操作: 这个表如下,可以看出表中第三项对应C... 阅读全文
posted @ 2015-11-24 23:40 DChipNau 阅读(586) 评论(0) 推荐(0)
摘要:应用程序使用驱动:一个设备驱动其实就是一个内核模块。应用程序使用一个字符设备是通过使用其设备文件来完成的,通过对其设备文件的读写来完成对设备的交互: 那么,想要使用字符设备驱动就首先得有一个字符设备文件,创建一个字符设备文件的方式有两种: 驱动初始化 因为驱动程序是一个内核模块,所以驱动的初始化操作是放在内核模块的初始化函数里: 主要流程如下: 下面展示一段示例代码: 下面来解释一... 阅读全文
posted @ 2015-11-24 23:38 DChipNau 阅读(433) 评论(0) 推荐(0)