Linux设备驱动
jianchi88
这个作者很懒,什么都没留下…
展开
-
2.4、2.6字符设备注册对比
韦东山书本和视频讲的都是字符设备驱动都是2.4的接口但大多新书早已经是讲2.6的接口了,如LDD3、国嵌、宋宝华的书(1)早期版本的字符设备注册。早期版本的设备注册使用函数 register_chrdev(),调用该函数后就可以向系统申请 主设备号,如果 regist原创 2011-09-24 13:54:47 · 1460 阅读 · 0 评论 -
Linux设备模型(下)之Platform
从Linux2.6内核起,引入一套新的驱动管理和注册机制:platform_device和 platform_driver 。Linux 中大部分的设备驱动,都可以使用这套机制,设备用 platform_device 表示;驱动用platform_driver 进行注册。 platform是一个虚拟的地址总线,相比pci,usb,它主要用于描述SOC上的片上资源,比如s3c2440上集成的控制器(原创 2012-01-18 16:37:48 · 4424 阅读 · 0 评论 -
Linux设备驱动--块设备(一)之概念和框架
基本概念 块设备(blockdevice)--- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。字符设备(Character device)---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所以对这种设备的读原创 2012-01-20 17:01:19 · 26726 阅读 · 2 评论 -
Linux设备驱动--块设备(二)之相关结构体
上回最后面介绍了相关数据结构,下面再详细介绍块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区。如果该结构代表一个分区,则其成员bd_part指向设备的分区结构。如果该结构代表设备,则其成员bd_disk指向设备的通用硬盘结构gendisk当用户打开块设备文件时,内核创建结构block_device实例,设备驱动程原创 2012-01-20 18:15:03 · 11446 阅读 · 4 评论 -
Linux设备驱动--块设备(三)之程序设计
块设备驱动注册与注销块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为:int register_blkdev(unsigned int major, const char *name);major 参数是块设备要使用的主设备号,name为设备名,它会在/proc/devices中被显示。 如果major为0,内核会原创 2012-01-20 19:06:44 · 7918 阅读 · 1 评论 -
Linux设备驱动--块设备(四)之“自造请求”
前面, 我们已经讨论了内核所作的在队列中优化请求顺序的工作; 这个工作包括排列请求和, 或许, 甚至延迟队列来允许一个预期的请求到达. 这些技术在处理一个真正的旋转的磁盘驱动器时有助于系统的性能. 但是, 许多面向块的设备, 例如闪存阵列, 用于数字相机的存储卡的读取器、u盘等, 并且 RAM 盘真正地有随机存取的性能, 包含从高级的请求队列逻辑中获益. 其他设备, 例如软件 RAID 阵列或者被原创 2012-01-21 14:59:31 · 7797 阅读 · 1 评论 -
I2C设备驱动流程
I2C设备驱动流程一、I2C设备驱动流程1) i2c_register_board_info定义I2C器件信息(Name,Address,etc.)static struct i2c_board_info __initdata pi2c_board_info[] = { { I2C_BOARD_INFO("max1586", 0x14)转载 2012-03-06 16:05:57 · 8269 阅读 · 0 评论 -
sysfs接口函数的建立_DEVICE_ATTR
sysfs接口函数到建立_DEVICE_ATTR最近在弄Sensor驱动,看过一个某厂家的成品驱动,里面实现的全都是sysfs接口,hal层利用sysfs生成的接口,对Sensor进行操作。说道sysfs接口,就不得不提到函数宏 DEVICE_ATTR原型是#define DEVICE_ATTR(_name, _mode, _show, _store转载 2012-03-05 18:09:50 · 5196 阅读 · 0 评论 -
Framebuffer架构图
原创 2012-03-26 10:46:19 · 275 阅读 · 0 评论 -
Linux下读写芯片的I2C寄存器
要想在Linux下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章《手把手教你写Linux I2C设备驱动》已经做了初步的介绍,并且留下了两个疑问尚未解决,第一个是如何对Linux提供的I2C操作函数进行进一步封装,实现对芯片寄存器的读写;另一个是如何在用户空间调用该I2C驱动代码。本文将讨论前一个问题。 首先,我们要转载 2012-03-12 15:17:01 · 2738 阅读 · 0 评论 -
使用printk调试kernel
printk(KERN_ERR "\n\nfile: %s \t line = %d\t function: %s\n", __FILE__, __LINE__, __func__);printk("KERNEL:File: %s\t line = %d\t function: %s\n", __FILE__, __LINE__, __func__);调试kernel增加一些打印信息,可能转载 2012-03-30 17:10:03 · 1832 阅读 · 0 评论 -
内核定时器
转自 http://hi.baidu.com/xiangjunzhao/blog/item/68ae5afebbf00338730eec37.htmlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将介绍内核定时器的使用。xxxxxxxxxxxxxxxxx转载 2012-04-26 11:31:35 · 1704 阅读 · 0 评论 -
Linux设备模型(中)之上层容器
基本概念 总线 Linux设备模型是由总线(bus_type),设备(device),驱动(device_driver)这三个数据结构来描述的。总线是处理器和一个或多个设备之间的通道。在设备模型中, 所有的设备都通过总线相连, 甚至是内部的虚拟“platform”总线(下一篇介绍),注意,这里设备模型中只是为个更好方便管理,所以有些总线是pic,i2c,usb等,但都只是一个分类的名字原创 2012-01-18 16:13:50 · 2078 阅读 · 0 评论 -
高级字符设备驱动--中断下半部机制之workqueue(二)
工作队列workqueue工作队列(work queue)是另外一种将中断的部分工作推后的一种方式,它可以实现一些tasklet不能实现的工作,比如工作队列机制可以睡眠。这种差异的本质原因是,在工作队列机制中,将推后的工作交给一个称之为工作者线程(worker thread)的内核线程去完成(单核下一般会交给默认的线程events/0)。因此,在该机制中,当内核在执行中断的剩余工作时就处在进程原创 2012-01-14 01:11:51 · 2648 阅读 · 0 评论 -
高级字符设备驱动--中断下半部机制之tasklet(一)
综述 Linux把中断处理例程分两部分:上半分:实际响应中断的例程。下半分:被顶部分调用,通过开中断的方式进行。两种机制实现:Tasklet工作队列work queue上半部的功能是"登记中断",当一个中断发生时,它进行相应地硬件读写后就把中断例程的下半部挂到该设备的下半部执行队列中去。因此,上半部执行的速度就会很快,可以服务更多的中断请求。但是,仅有"登记中断"是远远原创 2012-01-14 01:01:12 · 1906 阅读 · 0 评论 -
简单字符设备驱动程序
linux驱动程序开发步骤1)查看原理图、数据手册,了解设备的操作方法。2)在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始。3)实现驱动程序的初始化:比如向内核注册驱动程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序。4)设计所要实现原创 2011-09-21 14:02:45 · 1939 阅读 · 1 评论 -
高级字符设备驱动-Ioctl设备控制笔记
用户使用方法在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsinged long cmd,...)fd-文件描述符cmd-对设备的发出的控制命令...表示这是一个可选的参数,存在与否依赖于cmd驱动使用方法原创 2011-09-27 11:16:22 · 2640 阅读 · 0 评论 -
高级字符设备驱动-阻塞型字符设备驱动笔记
问题:当一个设备无法立即满足用户的读写请求时应当如何处理?例如:调用read时没有数据可读,但以后会有。调用write时没空间可以写,但设备暂时没有准备好接收数据这时候,驱动程序应当阻塞进程,使它进入睡眠,直到请求可以得到满足。 解决:阻塞方式是文件读写操原创 2011-09-28 09:03:00 · 1476 阅读 · 0 评论 -
高级字符设备驱动-内核等待队列笔记
等待队列在Linux驱动程序设计中,可以使用等待队列来实现进程的阻塞,等待队列可以看作进程的容器,在进程时,将进程放入等待队列,当唤醒进程时,从等待队列中取出进程。第一种方法1)定义等待队列Wait_queue_head_t my_queue2)初始化等待原创 2011-09-28 08:54:29 · 1130 阅读 · 0 评论 -
高级字符设备驱动-Poll设备方法笔记
POLL方法什么是POLL方法,功能是什么?系统调用(用户空间)驱动(内核空间)OpenOpenCloseReleaseReadRead原创 2011-09-29 08:51:03 · 1191 阅读 · 0 评论 -
按键驱动程序设计笔记
/*本来友善的程序是检测上升沿和下降沿的,当按下按键,输出 KEY? down当弹下按键,输出 KEY? up 现在修改成只检测下降沿按下的*/#include /*模块有关的*/#include /*内核有关的*/#inclu原创 2011-10-10 09:41:04 · 1540 阅读 · 0 评论 -
高级字符设备驱动-自动创建设备文件笔记
创建设备文件方法1)手工mknod创建2)自动自动创建(2.6内核)使用udev(mdev),它存在于应用层。在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备用device_create创建对应的设备例子:str原创 2011-09-29 09:01:35 · 1187 阅读 · 0 评论 -
mmap设备方法笔记
mmap系统调用(功能)void * mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset)参数:addr指定映射的起始地址(通常不指定)通常为NULL原创 2011-10-03 22:17:56 · 2127 阅读 · 0 评论 -
Linux驱动程序-硬件访问笔记
寄存器与内存他们的区别在哪里呢?寄存器和RAM的主要不同在于寄存器操作有副作用(LDD3上讲的side effect 或者 边际效果):当你读取某个地址时,可能导致该地址内容发生变化,比如很多设备的中断状态寄存器只要一读取,便自动清零。内存与I/O在x86处理器中原创 2011-09-29 09:05:24 · 956 阅读 · 0 评论 -
普通字符设备LED驱动程序(IO映射内存实现)
驱动程序: #include //内核模块头文件#include //内核模块参数头文件#include //printk头文件#include//ioremap需要//包含有可装载模块需要的大量符合和函数的定义;#include /原创 2011-10-07 13:24:32 · 2025 阅读 · 1 评论 -
混杂设备LED驱动程序(GPIO操作函数实现)
mini2440上LED对应的IO:LED1GPB5LED2GPB6LED3GPB7LED4GPB8低电平有效(点亮)寄存器:原创 2011-10-07 11:34:06 · 1961 阅读 · 3 评论 -
基于ARM-LINUX的温度传感器驱动(一)
基于ARM-LINUX的温度传感器驱动(一)作者:冯建,华清远见嵌入式学院讲师。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变转载 2011-10-18 12:24:33 · 1847 阅读 · 0 评论 -
Linux设备驱动-中断处理笔记
为什么需要中断?1)外设的处理速度一般慢于CPU2)CPU不能一直等外部事件所以设备必须有一种方法来通知CPU它的工作进度,这就是中断。在Linux驱动程序中,为设备实现一个中断步骤:1)向内核注册中断2)实现中断处理函数中断注册int req原创 2011-10-10 09:04:02 · 2028 阅读 · 0 评论 -
Linux驱动的地址空间和硬件地址空间说明——摘自华清远见嵌入式园地 .
作者:李强,华清远见嵌入式学院讲师。有这么几个问题,在上驱动课程的时候,我感觉一直困扰着同学们:● 用户程序编译连接形成的地址空间在什么范围内? ● 内核编译后地址空间在什么范围内? ● 要对外设进行访问,I/O的地址空间又是什么样的?于是就有了这篇文章,从大概上把内存相关知识点介绍一下,减少同学们在驱动课时对内存的困惑先回答第转载 2011-11-17 16:31:27 · 4144 阅读 · 1 评论 -
Linux设备模型(上)之底层模型
以《LDD3》的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的。但是我个人认为:对于一个嵌入式Linux的底层程序员来说,这部分内容是很重要的。以我学习的ARM9为例,有很多总线(如SPI、IIC、IIS等等)在Linux下已经被编写成了子系统,无需自己写驱动;而这些总线又不像PCI、USB等在《LDD3》上有教程,有时还要自己研究它的子系统构架,甚至要自己添原创 2011-11-21 21:22:40 · 6443 阅读 · 3 评论