驱动
文章平均质量分 56
深度思索
走在路上思考着前进
展开
-
字符设备结构体 cdev 初始化
转自:http://hi.baidu.com/grdd/blog/item/2d799d0adc2b7b1895ca6bde.html内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev { struct kobject kobj; // 每个 cdev 都转载 2014-02-26 17:35:50 · 1393 阅读 · 0 评论 -
linux的poll机制
linux的poll机制Poll就是监控文件是否可读的一种机制,作用与select一样。应用程序的调用函数如下:int poll(struct pollfd *fds,nfds_t nfds, int timeout);Poll机制会判断fds中的文件是否可读,如果可读则会立即返回,返回的值就是可读fd的数量,如果不可读,那么就进程就会休眠timeout这么长的时间,然转载 2014-03-26 23:13:57 · 958 阅读 · 0 评论 -
input_event
设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键模拟,具体方法就是操作/dev/input/event1文件,向它写入个input_event结构体就可以模拟按键的输入了。linux/input.h中有定义,这个文件还定义了标准按键的编码等struct input_event {struct转载 2014-04-21 16:15:46 · 1693 阅读 · 0 评论 -
linux驱动头文件位置的说明
在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不转载 2014-04-07 20:58:48 · 1550 阅读 · 0 评论 -
输入子系统---按键
一、linux输入子系统——基础知识 1、首先我们要知道什么时候我们可以用到input输入子系统,以及为什么我们要用input输入子系统?像按键、触摸屏、鼠标等输入设备我们都可以采用input接口函数来实现设备驱动。那么采用input输入子系统有什么优点呢?其实一句话,采用input输入子系统可以使驱动程序变得异常简单。2、input输入子系统体系结构 我们看到输入转载 2014-04-20 20:51:02 · 956 阅读 · 0 评论 -
EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接
EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接EWOULDBLOCK用于非阻塞模式,不需要重新读或者写EINTR指操作被中断唤醒,需要重新读/写在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-b转载 2014-03-24 23:08:01 · 751 阅读 · 0 评论 -
mod_timer函数及其它定时器函数
当一个定时器已经被插入到内核动态定时器链表中后,我们还可以修改该定时器的expires值。函数mod_timer()实现这一点修改注册入计时器列表的handler的起动时间int mod_timer(struct timer_list *timer, unsigned long expires) { int ret; unsigned long flags; spin_原创 2014-04-20 21:41:19 · 13851 阅读 · 1 评论 -
outb,inb等I/O端口操作函数
功能:如 i386 ,在区别 I/O 空间和内存空间的进程的 I/O 空间写入数据。outb() I/O 上写入 8 位数据 ( 1 字节 );outw() I/O 上写入 16 位数据 ( 2 字节 );outl () I/O 上写入 32 位数据 ( 4 字节)。原型:引用 #include void outb (unsigned char原创 2014-04-18 11:42:10 · 15002 阅读 · 0 评论 -
IO端口和IO内存的区别及分别使用的函数接口
目录(?)[+]IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令转载 2014-04-18 11:41:29 · 5015 阅读 · 0 评论 -
s3c2410 cs8900a 网卡驱动
/* CS8900a.h */ #define CONFIG_CERF_CS8900A 1 /* * cs8900a.c: A Crystal Semiconductor (Now Cirrus Logic) CS8900A driver for SMDK-s3c2410 (based on cs89x0.c) * * Author: Yong-iL Joh t原创 2014-04-17 22:04:12 · 1209 阅读 · 0 评论 -
关于request_region()
void request_region(unsigned long from, unsigned long num, const char *name) 这个函数用来申请一块输入输出区域。 如果这段I/O端口没有被占用,在我们的驱动程序中就可以使用它。在使用之前,必须向系统登记,以防止被其他程序占用。登记后,在/proc/ioports文件中可以看到你登记的io口。原创 2014-04-17 21:43:19 · 2306 阅读 · 0 评论 -
linux内核及驱动开发中有关__init,__exit和__initdata的用法
要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性或定义的函数或数,__attribute__主要用于改变所声明据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。但这里我们比较感兴趣的是对代转载 2014-04-15 17:26:45 · 1207 阅读 · 0 评论 -
write的奥秘-linux系统调用如何实现?
在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面去,这个过程到底是怎么实现的呢?这个奥秘就在于设备驱动程序的write实现中,这里我结合一些源代码来解释如何使得一个简简单单的write函数能够完成向设备里面写数据的复杂过程。这里的源代码主要来自两个地方。第一是ore转载 2014-03-09 19:01:31 · 2844 阅读 · 0 评论 -
字符设备驱动原理图解
在第二章讲解字符设备的时候,个人觉得比较有收获的主要是两个方面的知识:1、字符设备号的管理原理(char_device_struct)2、字符设备驱动的file_operation中的函数如何与file结构体中的相应结构对应上,并被应用程序调用。 对于以上两个主要的知识点,我觉得书上的条理已经很清楚的,很容易看懂,我在这里复述就多余了。我把学到的两个知识点用图的方式总转载 2014-03-09 18:48:45 · 1299 阅读 · 0 评论 -
file结构体
struct file, 定义于 , 是设备驱动中第二个最重要的数据结构. 注意 file 与用户空间程序的FILE 指针没有任何关系. 一个 FILE 定义在 C 库中, 从不出现在内核代码中. 一个 struct file, 另一方面, 是一个内核结构, 从不出现在用户程序中. 文件结构代表一个打开的文件. (它不特定给设备驱动; 系统中每个打开的文件有一个关联的 structfi转载 2014-03-08 20:47:41 · 937 阅读 · 0 评论 -
linux原子操作
所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作转载 2014-03-07 12:06:42 · 915 阅读 · 0 评论 -
struct inode 和 struct file
1、struct inode──字符设备驱动相关的重要结构介绍内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。Linux2.6.27内核中,inode结构体具体定义如下:struct inode {struct hlist_node i_hash;struct list_head i_list;struct list_head转载 2014-02-26 20:49:35 · 780 阅读 · 0 评论 -
linux字符cdev和Inode的关系
struct mutex *lock; }; static struct char_device_struct { struct char_device_struct *next; unsigned int major; unsigned int baseminor; int minorct; char name[64]; str转载 2014-02-26 20:09:46 · 1030 阅读 · 0 评论 -
misc设备驱动模型及实例解析
1、misc设备驱动模型 本节我们来看一下misc设备驱动模型的有关内容,首先是看看它的设备结构体,定义在include/linux/miscdevice.h中:[cpp] view plaincopystruct miscdevice { int minor; //次设备号,若为 MISC_DYNAMIC转载 2014-04-11 15:49:10 · 785 阅读 · 0 评论