linux驱动开发
p.c.wang
这个作者很懒,什么都没留下…
展开
-
驱动之路——1.0
一、linux设备驱动的分类及特点 计算机系统的硬件由CPU、存储器和外设组成。驱动针对的对象都是存储器和外设。linux将存储器和外设分为3个基础大类:字符设备、块设备和网络设备。 字符设备指那些必须以串行顺序依次进行访问的设备,块设备可以用任意顺序进行访问,以块为单位进行操作。字符设备不经过系统的快速缓冲,块设备经过系统的快速缓冲。网络设备面向数据包原创 2014-07-23 20:05:53 · 1099 阅读 · 0 评论 -
驱动开发之路——1.1
一、什么是模块: 模块(module)是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是可以装载到系统中作为内核的一部分运行,从而可以动态扩充内核的功能。模块最主要的用处就是用来实现设备驱动程序。使用模块的优点: 1,将来修改内核时,不必全部重新编译整个内核,可节省不少时间 2,系统中如果需要使用新模块,不必重新编译内核,只要插入相应的模块即原创 2014-07-23 20:41:06 · 1094 阅读 · 0 评论 -
内核中_init,_exit中的作用
__init, __initdata等属性标志,是要把这种属性的代码放入目标文件的.init.text节,数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完成的。 对编译成module的代码和数据来说,当模块加载时,__init属性的函数就被执行; 对静态编入内核的代码和数据来说,当内核引导时,do_basic_set转载 2014-07-31 20:16:27 · 1433 阅读 · 0 评论 -
字符设备驱动中cdev与inode、file_operations的关系
一:转载 2014-08-15 17:08:16 · 1325 阅读 · 0 评论 -
字符设备驱动程序——1.2
linux驱动程序开发步骤1)查看原理图、数据手册,了解设备的操作方法。2)在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始。3)实现驱动程序的初始化:比如向内核注册驱动程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序。4)设计所要实现的操作,比如open,read,write,close。5)实现中断服务(不是必需的)6转载 2014-08-15 14:35:39 · 859 阅读 · 0 评论 -
模块参数和模块之间的通讯
一.模块参数 模块参数需要在加载模块时指定,e.g. insmod xxxx.ko param=1 定义:module_param(参数名,参数数据类型,参数读写权限); e.g. static long a =1; static int b =1; module_param(a,long,S_IRUGO);转载 2014-08-15 17:01:39 · 1224 阅读 · 0 评论 -
按键驱动程序(异步通知)
此驱动程序之前的按键驱动程序(中断方式)上加以优化。用到异步通知。对于内核来讲,既然用户想得到的是按键后的状态,那么自然不必时时都要read状态。当它检测到中断发生变主动通知用户,用户再来读。这样,用户空间、内核就可以着手干点其它的事情,而不必忙等按键按下或释放。那么就先从应用程序上面看。怎么设置相关联到“异步通知”呢?flag = fcntl(fd, F_GETFL);fcntl转载 2014-09-04 13:47:03 · 1121 阅读 · 0 评论 -
UART接口
本文转自:http://blog.chinaunix.net/uid-24148050-id-170849.html1.UART UART(Universal Asynchronous Receiver and Transmitter)通用异步收发器(异步串行通信口),是一种通用的数据通信协议,它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和转载 2015-04-14 19:32:10 · 1216 阅读 · 0 评论 -
linux中内核延时函数
第一类延时函数原型是:(忙等)void ndelay(unsigned long nsecs);void udelay(unsigned long usecs);void mdelay(unsigned long msecs); 说明:内核函数 ndelay, udelay, 以及 mdelay 对于短延时好用, 分别延后执行指定的纳秒数, 微秒数或者毫秒数. 它们涉及到的延时常常原创 2015-08-07 08:46:49 · 25500 阅读 · 0 评论