![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【Linux 驱动】
小田
无人扶我青云志,我自踏雪向山巅。倘若命中无此运,孤身亦可登昆仑。他朝若有翻身时,生吃黄莲也叫甜。
展开
-
【Linux 驱动】驱动开发第一步----开发环境搭配
一,环境搭建步骤 1)下载Linux源码 1> ~#apt-cache search linux-source出现:linux-source - Linux kernel source with Ubuntu patches linux-source-3.0.0 - Linux kernel source for version原创 2012-04-09 23:27:44 · 7257 阅读 · 0 评论 -
【Linux 驱动】第二章 构造和运行模块
设置测试系统开发环境及Hello World入门模块在前面博文中已经讲到,请参考http://blog.csdn.net/tianshuai11/article/details/7442168 一,核心模块与应用程序的对比 应用程序:小规模及中规模程序,从头到尾执行单个任务。 核心模块:预先注册自己,以便服务于将来的某个请求。然后他的初始化函数就立即结原创 2012-04-11 00:56:51 · 1366 阅读 · 2 评论 -
【Linux 驱动】第九章 与硬件通信
在学习有关I/O总线的内容时,最好先看看相关的知识:从PC总线到ARM的内部总线 一,I/O 端口和 I/O 内存 每种外设都是通过读写寄存器来进行控制。 大部分外设都有几个寄存器,不管是在内存地址空间还是在I/O地址空间,这些寄存器的访问地址都是连续的。 在硬件层,内存区和 I/O 区域没有概念上的区别: 它们都是通过向在地址总线和控制总线发出电平信原创 2012-04-19 23:44:04 · 1665 阅读 · 0 评论 -
【Linux 驱动】第十章 中断处理
一,概念 1)什么是中断? 1>引入: 我们知道,处理器的处理速度比硬件来说要快上N个数量级,那么由处理器向硬件发出请求并等待回应的办法显然是不可取的,在这期间处理器浪费了大量的时间。这些时间应该被用来处理其他的事务。轮询可能是解决办法之一,但显然这样的办法也会让处理器做大量的无用功。 2>解决:原创 2012-04-20 12:32:18 · 2046 阅读 · 0 评论 -
【Linux 驱动】第十一章 内核的数据类型
一,内核数据数据类型 主要分为: 标准 C 语言类型、确定大小的类型和特定内核对象的类型。 1)标准 C 语言类型 当需要"一个2字节填充符"或"用一个4字节字串来代表某个东西",就不能使用标准C语言类型,因为在不同的体系结构,C 语言的数据类型所占的空间大小不同。例如:long 在32位系统和64位系统中占用的字节数不同。原创 2012-12-09 22:17:07 · 1472 阅读 · 0 评论 -
【USB】USB 关键概念简介
一,USB接口优点 简单、速度快、支持即插即用和热插拔二,USB通信 USB通信中居于核心地位的是主机(Host),常见的USB主机是PC机。任何一次USB的数据传输都必须由主机发起和控制;所有的USB外设都只能和主机建立连接;任何二个外设之间或是二个主机之间都无法直接通信。所以,USB主机和USB设备的功能是不同的。 USB主机的功能原创 2013-04-04 22:52:26 · 2824 阅读 · 0 评论 -
【Linux 驱动】第八章 分配内存
一,kmalloc 函数内幕 kmalloc 是一个功能强大且高速(除非被阻塞)的工具,所分配到的内存在物理内存中连续且保持原有的数据(不清零)。原型:#include void *kmalloc(size_t size, int flags);//size为要分配块的大小,flags为分配标志二,flags 参数 内存分配最终总是调用 __get原创 2012-04-18 10:22:39 · 1357 阅读 · 2 评论 -
【Linux 驱动】第七章 时间 延迟及延缓操作 (例子详解一)
本文所涉及实验为博文http://blog.csdn.net/tianshuai11/article/details/7465587中示例,请先阅读上述博文,然后消化以下例子一,模块方法 jit.c#include #include #include #include #include #include #include #include #incl原创 2012-04-16 17:42:02 · 2154 阅读 · 0 评论 -
【Linux 驱动】第三章 字符设备驱动程序 (详细,优秀)
一,字符设备驱动(Character devices) 在I/O传输过程中以字符为单位进行传输的设备,例如键盘,打印机等二,scull(Simple Character Utility for Loading Localities)区域装载的简单字符工具 是一个操作内存区域的字符设备驱动程序,这片内存区域就相当于一个字符设备。scull的优点在于他不和任何硬件相关,而原创 2012-04-11 10:32:04 · 1600 阅读 · 0 评论 -
【Linux 驱动】第一章 设备驱动程序简介
一,设备驱动程序的作用 最显著的作用,是可以使计算机和设备通信,充当硬件的接口。操作系统只能通过这个接口来控制设备。 二是书中说的驱动在于提供机制,而不是策略,个人觉得这应该是我们编写驱动程序遵循的一个原则。机制--需要提供什么功能,策略--如何使用这些功能。由于不同的环境需要不同的方式来使用硬件,因此应尽可能做到让驱动程序不带策略 驱动程序原创 2012-04-10 22:46:53 · 1500 阅读 · 0 评论 -
【Linux 驱动】第四章 调试技术
一,内核中的调试支持 在内核配置菜单中有“kernel hacking”菜单选项,这些选项帮助用户检查很多错误,这里我列了一个表方便大家参考: kernel hacking 在哪里? ~# cd /usr/src/linux-source.3.0.0 ~#make menuconfig 则出现原创 2012-04-11 23:16:16 · 1710 阅读 · 0 评论 -
【Linux 驱动】第六章 高级字符驱动程序操作 ----ioctl
一、ioctl 1)概念:#include 2)功 能: 控制I/O设备 ,提供了一种获得设备信息和向设备发送控制参数的手段。用于向设备发控制和配置命令 ,有些命令需要控制参数,这些数据是不能用read / write 读写的,称为Out-of-band数据。也就是说,read / write 读写的数据是in-band数据,是I/O操作的主体,而ioctl 命原创 2012-04-13 11:43:35 · 2065 阅读 · 0 评论 -
【Linux 驱动】第六章 高级字符驱动程序操作----poll,select,epoll
一,poll 允许进程决定是否可以对一个或者多个打开的文件做非阻塞的读取或者写入(但是请注意select自身会阻塞进程知道某个描述符满足条件或者超时),常常用于那些要使用多个输入或者输出流而又不会阻塞于其中任何一个流的应用程序中,比如telnet程序,需要2个输出,2个输入流而又不希望阻塞。 unsigned int (*poll)(struct file原创 2012-04-13 16:20:52 · 2063 阅读 · 2 评论 -
【Linux 驱动】第六章 高级字符驱动程序操作----异步通知
一,概念 异步通知:一旦设备就绪,则主动通知应用程序,应用程序根本就不需要查询设备状态。(类似于中断)信号是异步的,一个进程不必通过任何操作来等待信号的到达 在linux中,异步通知是使用信号来实现的,而在linux,大概有30种信号,比如大家熟悉的ctrl+c的sigint信号,进程能够忽略或者捕获除过SIGSTOP和SIGKILL的全部信号,当信原创 2012-04-13 17:04:15 · 1642 阅读 · 0 评论 -
【Linux 驱动】第五章 并发和竞态
一,概念 并发(concurrency)指的是多个执行单元同时被执行 竞态(race condition)并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问导致竞态 例子:两个进程试图向同一个设备的相同位置写入数据,造成数据混乱 解决:加锁或互斥 从而确保 同一时间 只有一个进程执行操作二,规则原创 2012-04-12 21:17:42 · 1327 阅读 · 0 评论 -
【Linux 驱动】第六章 高级字符驱动程序操作 ----阻塞型I/O
序言:试想如果在驱动方法中的read/write中,当数据不可用时,用户可能调用read,当输出缓冲区满时,设备并未准备好接受数据,这种情况下驱动程序可以阻塞该进程,并且置入休眠状态直到满足条件。一, 休眠 当一个进程休眠时,它会被标记为一种特殊状态并从调度器的运行队列中移走,直到某些情况修改了这个状态,进程才会在任意cpu上调度,即运行该进程。原创 2012-04-13 12:43:10 · 1578 阅读 · 0 评论 -
【Linux 驱动】第七章 时间 延迟及延缓操作
一,度量时间差 时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 HZ 的值,在编程时应当不依赖该HZ值。最好保持 HZ 的默认值。 系统定时器以可编程的频率中断处理器,此频率即为每秒的定时器节拍数,对应着内核变量HZ原创 2012-04-16 16:06:45 · 3674 阅读 · 0 评论 -
【Linux 驱动】第七章 时间 延迟及延缓操作 (例子详解二)
本文所涉及实验为博文http://blog.csdn.net/tianshuai11/article/details/7465587中示例,请先阅读上述博文,然后消化以下例子一,模块方法 jiq.c#include #include #include #include #include #include /* everything... */#i原创 2012-04-16 18:00:50 · 1459 阅读 · 0 评论