
驱动相关
文章平均质量分 86
CoderChe
通信专业,大学时代的arm相关的东西基本忘光了
Qt开发Win客户端2年
16.05至今开发windows游戏前后端
展开
-
简单linux内核模块的开发
看了一个月的应用开发,今天开始看简单的驱动。开始看的是韦大神的代码,但是期间出现了几个小问题。所以回头看国嵌的视频,内核模块开发这一部分。内核模块我自己的理解就是驱动程序注册进内核的过程。 开发环境:Redhat 企业版5。 这次做的实验是编写两个相互关联的模块,分别是hello.c和calculate.c。hello.c的代码#include #i原创 2013-05-20 18:24:44 · 1222 阅读 · 0 评论 -
input子系统的基础知识
输入子系统由驱动层、输入子系统核心、事件处理层三部分组成。一个输入事件,如鼠标移动、键盘按下等通过Driver->Inputcore->Event handler->userspace的顺序到达用户控件的应用程序。 驱动层:将底层的硬件输入转化为统一事件形式,想输入核心(Input Core)汇报。输入子系统核心:承上启下。为驱动层提供输入设备注册与操作接口,如:input_reg原创 2013-06-19 13:44:12 · 1007 阅读 · 0 评论 -
input输入子系统之按键驱动
内核版本:linux-2.6.32.2关于input子系统的基础知识看上一篇博客,网上的资料也是大同小异,也是linux设备驱动模型之一。下面开始介绍这一个按键驱动程序。①dev_initstatic int __init dev_init(void){ /*request irq*/ s3c24xx_request_ir原创 2013-06-19 14:54:01 · 2250 阅读 · 1 评论 -
mini2440的触摸屏驱动----使用input子系统实现
没说程序之前先上图一张,这个图方便理解input子系统下的触摸屏的实现。关于input子系统的实现在前几篇博客中已经实现了input子系统的按键驱动。下面开始说触摸屏的驱动程序。在说之前先结合上面的图说一下几个主要的函数的调用情况。个中断函数的调用次序: 先是stylus_updown TC中断处理函数, 如果要是压下则调用touch_timer_fire来启动ADC转原创 2013-06-20 20:46:21 · 1475 阅读 · 0 评论 -
mini2440触摸屏驱动----非input子系统实现方法
触摸屏的驱动程序在不是使用input子系统的实现过程中,其实和普通的字符设备驱动没有太大的差别,只要按照触摸屏那几个步骤正常进行就可以。①s3c2410_ts_init函数,这是整个程序的入口处。实现了各类初始化的作用。/*设备初始化函数*/static int __init s3c2410_ts_init(void){ int ret; tsEvent原创 2013-06-20 19:48:14 · 1085 阅读 · 0 评论 -
电阻式触摸屏的工作原理
1,电阻式触摸屏实物触摸屏附着在显示器的表面,与显示器相配合使用,如果能测量出触摸点在屏幕上的坐标位置,则可根据显示屏上对应坐标点的显示内容或图符获知触摸者的意图。触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式、表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。为了防止触摸屏和LCD混淆,来张实物图,这就是我们要了解在四线触摸屏,咋一看就是一片一玻璃,转载 2013-06-20 19:02:49 · 5782 阅读 · 0 评论 -
bus基础知识
昨天晚上开始看LCD发现前面总线部分掌握的不是很好,后来总结原因,一是很早就明白了大概的总线原理,二是总线学习的时候没有出现大例程,三是那是端午假期刚回来,没状态。算了,不找理由了,写下来基础知识,巩固一下吧。总线是处理器和一个或多个设备之间的通道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟"platform"总线。可以通过ls -l /sys/bus看到系统加载的所有总线。原创 2013-06-22 11:53:50 · 1570 阅读 · 0 评论 -
bus,device和driver
其实这三个部分涉及的很广,但是这里只简单的说一下模型。首先来看一下bus程序部分:/*多出来了一个出注册总线设备*/#include #include #include #include #include MODULE_AUTHOR("David Xie");MODULE_LICENSE("Dual BSD/GPL");static ch原创 2013-06-22 12:11:28 · 862 阅读 · 0 评论 -
platform设备驱动全透析
想找些platform额外的资料看看,突然还有个以外收获。原文地址http://blog.donews.com/21cnbao/archive/2010/07/14/1581997.aspx1.1 platform总线、设备与驱动在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每转载 2013-06-22 13:12:17 · 802 阅读 · 0 评论 -
PCI设备驱动
一、PCI简介 PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。 PCI是Peripheral Component Interconnect(外围设备互联转载 2013-06-22 20:00:36 · 1889 阅读 · 0 评论 -
linuxTTY体系结构基础知识
一、终端设备的结构Linux内核中 tty的层次结构图所示,包含tty核心、tty线路规程和tty驱动。tty核心是对整个tty设备的抽象,对用户提供统一的接口,tty线路规程是对传输数据的格式化,tty驱动则是面向tty设备的驱动,这是对设备的驱动,应该要我们来实现的,但是后面我们可以看到,对于串口驱动Linux还要进行抽象把共性提取出来封装,使得整个驱动层次化简单化。使得驱动的修改原创 2013-06-24 11:23:04 · 1975 阅读 · 0 评论 -
linux下的串口驱动程序
看了两天的串口驱动,总算把一个大神的驱动看的差不多了,想自己写一篇博客的,突然发现写了也是那位大神的内容,所以还是转载吧。原文地址:http://blog.youkuaiyun.com/wulong117/article/details/7378265串口驱动确实不简单,不过多花费心思整体思路还是容易理清的。原文如下:一、核心数据结构串口驱动有3个核心数据结构,它们都定义在1、uart_driver原创 2013-06-25 18:35:16 · 4594 阅读 · 0 评论 -
linux下的块设备驱动(二)
上一章主要讲了请求队列的一系列问题。下面主要说一下请求函数。首先来说一下硬盘类块设备的请求函数。请求函数可以在没有完成请求队列的中的所有请求的情况下就返回,也可以在一个请求都不完成的情况下就返回。下面贴出请求函数的例程:static int simp_blkdev_make_request(struct request_queue *q, struct bio *bio){原创 2013-07-01 18:17:14 · 2013 阅读 · 0 评论 -
linux下的块设备驱动(一)
块设备的驱动比字符设备的难,这是因为块设备的驱动和内核的联系进一步增大,但是同时块设备的访问的几个基本结构和字符还是有相似之处的。有一句话必须记住:对于存储设备(硬盘~~带有机械的操作)而言,调整读写的顺序作用巨大,因为读写连续的扇区比分离的扇区快。但是同时:SD卡和U盘这类设备没有机械上的限制,所以像上面说的进行连续扇区的调整显得就没有必要了。 先说一下对于硬盘这类设备的简单的驱原创 2013-07-01 16:05:05 · 1882 阅读 · 0 评论 -
cs8900网卡驱动解析(二)
cs8900_read和cs8900_write这两个函数本身的结构不是很难。说白了就是向硬件进行读写,完成硬件的控制。但是这个过程是整个驱动程序设计中最关键的。换句话说,你要写驱动,很重要的一部分工作就是设置你的网络芯片,使它能乖乖的为你工作。函数原型定义如下://这是一个纯正的系统调用。读取寄存器的值并返回。//这一部分也是纯正的底层的硬件操作。inline i原创 2013-06-18 16:43:00 · 1562 阅读 · 0 评论 -
cs8900网卡驱动解析(四)
现在开始说一下网卡的收发函数。其实当时程序看到这里的时候我倒有一种灯火伊人的感觉,不过伊人就是伊人,还是有盲区。首先说一下网卡接收函数。网卡的接收函数是在中断中被调用的。 while ((status = readword(dev, ISQ_PORT))) { DPRINTK(4, "%s: event=%04x\n", dev->name, status);原创 2013-06-18 17:17:31 · 1255 阅读 · 0 评论 -
驱动的基础知识
一、驱动的基础知识,老谢说的对,驱动其实就是操作硬件的软件。两个基本的点必须永远记住:1)设备的分类:①块设备 block ②字符设备 char ③网络设备 2)块设备和字符设备的区别 ①字符设备原创 2013-05-20 20:51:56 · 1116 阅读 · 0 评论 -
字符设备驱动基础知识(设备号-设备文件)
对驱动程序的字符设备的操作整体可以分为两部分,分别是对设备号的操作和对设备的操作。一、基础知识1.主设备号用来辨别哪类设备,次设备号用来辨别哪个设备(同类型的设备)。2.用dev_t来描述住次设备号,其实主次设备号的描述就是一个32位的整数。高12位是主设备号,低20十位是次设备号。3.使用MAJOR(dev_t dev)宏提取主设备号,使用MINOR(dev_t dev)宏来提取原创 2013-05-21 23:57:39 · 1508 阅读 · 0 评论 -
关于Ioctl
从北京回来了,挺累的,诺基亚的笔试挺恶心,还是自己没学到位,菜鸟还是菜鸟。把老谢讲的Ioctl写下来。一、Ioctl的作用:大部分驱动除了需要具备读写设备的能力外,还需要具备对硬件控制的能力。例如,要求设备报告错误信息,改变波特率,这些操作常常通过 ioctl 方法来实现。二、Ioctl有用户空间的Ioctl和驱动空间的Ioctl1.用户空间的Ioctl:使用ioctl 系统调用来原创 2013-05-26 14:26:11 · 2020 阅读 · 0 评论 -
内存映射函数mmap的初步理解
一、功能负责把文件内容(设备)映射到进程的虚拟内存(用户)空间, 通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read,write等操作。二、映射函数void* mmap ( void * addr, size_tlen, int prot, int flags , int fd, off_t offset)返回值:mmap的返回值就是起始地址。参数:原创 2013-05-30 22:18:22 · 1374 阅读 · 0 评论 -
关于等待队列
从等待队列到poll()感觉都不简单,老宋写的个人觉得不是很仔细,不过倒是可以理解原理,在加上老谢的视频,把两个都写下来吧。一、等待队列的含义:在Linux驱动程序设计中,可以使用等待队列来实现进程的阻塞,等待队列可看作保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待等列中取出进程。可以实现内核中异步事件的通知机制。Linux 2.6内核提供了如下关于等待队列的操作:原创 2013-05-30 13:09:05 · 1062 阅读 · 0 评论 -
设备驱动的轮询编程select()和poll()
看到轮询设备操作的时候DT了,不是很懂,今天又看了看,感觉理解了,但是肯定还是不扎实。使用非阻塞IO的应用程序通常会使用select()和poll()系统调用查询是否可以对设备进行无阻塞访问。在用户空间使用的是select(),在内核空间使用的是poll()。一、select1.定义:Select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。、2.原创 2013-05-30 16:01:10 · 1266 阅读 · 0 评论 -
阻塞型字符设备
阻塞型字符设备是驱动中的一个重点。一、问题:当一个设备无法立刻满足用户的读写请求时应当如何处理?解答:应用程序通常不关心这种问题,应用程序只是调用 read 或 write 并得到返回值。驱动程序应当(缺省地)阻塞进程,使它进入睡眠,直到请求可以得到满足。二、阻塞方式在阻塞型驱动程序中,Read实现方式如下:如果进程调用read,但设备没有数据或数据不足,进程阻塞。当新数据到达后,原创 2013-05-30 14:38:41 · 1136 阅读 · 0 评论 -
mmap()第二部分
老谢把mmap()讲完了,但是理解的很不完全,有好几个问题。1.他说驱动程序中的mmap()建立页表进行地址映射,那么映射的是什么?是设备的物理地址,还是SDRAM中的地址?2.系统调用的mmap()也是负责把文件内容映射到进程的虚拟内存空间,那么这个文件是什么?是相对应的设备操作文件?下面罗列驱动中mmap()。一般情况下,用户空间是不可能直接访问硬件设备的。但是驱动程序中的可实原创 2013-06-01 10:12:03 · 1072 阅读 · 0 评论 -
关于混杂设备驱动
混杂设备驱动?个人理解就是一类设备,为了开发方便,可以把这一类设备的属性都放在一起,方便开发。 一、混杂设备的定义在Linux系统中,存在一类字符设备,它们共享一个主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查找到相应的miscdevice设备。二、描述混杂设备的结构体struct原创 2013-06-02 21:36:39 · 1197 阅读 · 0 评论 -
全亮全灭点亮mini2440的设备驱动
首先,求助一下。今天忙了一下午,就为了找到一个可以和国嵌内核匹配的u-boot,但是还是没有找到。网上的大神们谁有国嵌的mini2440的u-boot可以传给我一个,感激不尽。由于没有u-boot,内核模块编译出来了也不能在板子上运行,所以很多代码没有亲测。 首先说编译内核模块,编译内核模块的Makefile如下:ifneq ($(KERNELRELEASE),)obj-m原创 2013-06-02 22:09:22 · 1092 阅读 · 0 评论 -
第一个中断驱动程序
这是一个按键中断。linux的中断机制和中断原理的内容很多,不在这里写了。先写一下关于第一个中断的驱动程序。中断的驱动程序也是按照模块进行编写的。首先这是一个按键中断,按键的驱动文件不能写,可以读,可以打开。这个程序中还使用了poll()对中断进行了监控。static int __init dev_init(void){ int ret; ret = misc_原创 2013-06-14 23:14:50 · 1399 阅读 · 0 评论 -
第一个mini2440led驱动程序--各种过程--(大神请过路,小牛勿喷)
学习驱动要半个月了,学的其实不是很好。上周学完了国嵌的led驱动,使用Ioctl控制。应用的代码和驱动的代码都是使用国嵌的。问题:使用的驱动代码是国嵌的,驱动相关的内核是国嵌的linux-2.6.29。但是手上没有国嵌的可以启动linux2.6.29的u-boot,国嵌带了u-boot,但是不知道什么原因编译不过去。后来通过各种渠道弄到的都是国嵌针对mini2440的linux2.6.32.2原创 2013-06-06 21:28:52 · 4248 阅读 · 0 评论 -
Sys文件系统分析 --kobject,kset
这里我们先来看一段documentation/filesystems/sysfs.txt里关于sysfs文件系统的描述: sysfs is a ram-based filesystem initially based on ramfs.It provides a means to export kernel data structures,their attributes,and the l转载 2013-06-08 16:18:19 · 1158 阅读 · 0 评论 -
关于系统调用、C库和应用程序API
最近从应用程序转手驱动,读了一本书,把前面应用编程的时候学的知识搞乱了。总是纠结于应用编程API、系统调用和C库这几个的关系。和同学进行了几次讨论,把这几个东西的关系和概念整理一下写出来,增强记忆。原创 2013-05-22 00:12:40 · 1039 阅读 · 0 评论