platform是一条虚拟的总线.设备用platform_device表示,驱动用platform_driver进行注册,Linux platform driver机制和传统的device driver机制(通过driver_register进行注册)相比,一个明显的优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动中使用这些资源时通过platform device提供的标准结构进行申请并使用.这样提高了驱动和资源的独立性,并且具有较好的可移植性和安全性(这些标准接口…
在Linux驱动中把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体表述).miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同. 所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作. miscdevice的API实现在drivers/char/misc.c中. struct miscdevice { int min…
使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问,这两个系统调用最终又会引发设备驱动中的poll()函数被执行,所以我们的问题就集中到了如何编写设备驱动中的poll()函数就可以了.先来看看设备驱动中的poll()函数原型: unsigned int (*poll)(struct file *filp, struct poll_table *wait); 这个函数要进行下面两项工作.首先,对可能引起设备文件状态变化的等待队列调用poll_…
在需要创建一个由一系列数据顺序组合而成的/proc虚拟文件或一个较大的/proc虚拟文件时,推荐使用seq_file接口. 数据结构struct seq_fille定义在include/linux/seq_file.h struct seq_file { char *buf;     //seq_file接口使用的缓存页指针 size_t size;   //seq_file接口使用的缓存页大小 size_t from;   //从seq_file中向用户态缓冲区拷贝时相对于buf的偏移地址 s…
/** * Author:hasen * 參考 :<linux设备驱动开发具体解释> * 简单介绍:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date:2014-11-15 */ 一.内核定时器             1.内核定时器编程             软件意义上的定时器终于依赖硬件定时器来是实现.内核在时钟中断发生后运行检測各定时器是否到期, 到期后的定时器处理函数将作为软中断在底半部运行.实质上,时钟中断处理程序会唤起TIMER_SOFTIR…
/********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /********************************************************/ 1.什么是platform(平台)总线? 相对于USB.PCI.I2C.SPI等物理总线来说,platform总线是一种虚拟.抽象出来的总线,实际中并不存在这样的总线. 那为什么需要platform总线呢?…
Introduction the naive "scull" 首先.什么是scull? scull (Simple Character Utility for Loading Localities). scull is a char driver that acts on a memory area as though it were a device. 和第一个C程序Hello world一样.他什么都不能干,却能非常好的阐释怎么一步步进阶的去写驱动 blog的最后,我会给出这对于s…
Flash存储器 ——>Flash存储器是近几年来发展最快的存储设备,通常也称作闪存.Flash属于EEPROM(电可擦除可编程只读存储器),是一类存取速度很高的存储器. ——>它既有ROM断电可保存数据的特点,又有易于擦写的特点.Flash可以在断电的情况下长期保存信息,因此被广泛的应用在PC机的BIOS和嵌入式系统的存储设备. Linux Flash驱动结构 ——>Linux内核对Flash存储器有很好的支持.内核设计了一个MTD结构支持Flash设备,用户只需要按照MTD的要求设置…
说在前面的话 :      设备驱动模型系列的文章主要依据的内核版本是2.6.32的,因为我装的Linux系统差不多就是这个版本的(实际上我用的fedora 14的内核版本是2.6.35.13的.) 今天是今年的第256天,换句话来说,每年的第256天被定为——程序员节.本来我懒得再写东西的了,但是今天好歹是个节日,所以在这时写点东西是有些意义的. linux设备驱动模型本身就极具复杂性,所以第一次接触这个东西的伙伴们千万不要惊呆.不要气馁.这方面的资料网上还是有很多的,但是真正写的明白的其实很…
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD的函数,单独做一个添加DVD的函数,如果还要往这个媒体库里添加其他的媒体类,还要再创建另一个添加函数.我们说这样的代码不具备可扩展性.另外,CD和DVD有很多相似之处,它们的成员变量里都有标题,播放时长,评论,等等,我们称这样的程序存在大量的代码复制,代码复制是代码不良的表现.所以我们可以创建一个它…