![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 字符设备驱动开发
文章平均质量分 90
zqixiao_09
这个作者很懒,什么都没留下…
展开
-
Linux 设备驱动中的 I/O模型(一)—— 阻塞和非阻塞I/O
在前面学习网络编程时,曾经学过I/O模型原创 2016-03-15 21:04:05 · 5303 阅读 · 1 评论 -
Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
解析完 open、close、read、write 四个函数后,终于到我们的 ioctl() 函数了一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。下面是其源代码定义:函数名: ioctl功 能: 控制I/O设备用 法: int原创 2016-03-11 22:55:02 · 15452 阅读 · 5 评论 -
Linux 字符设备驱动结构(二)—— 自动创建设备节点
上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号。第一种是使用mknod手工创建:mknod filename type major minor第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。在驱动初始化代码里调用class_create为该设备创建一个原创 2016-03-10 20:46:35 · 19460 阅读 · 3 评论 -
Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型
提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么事Linux设备模型呢?一、Linux 设备模型1、设备模型概述 从2.6版本开始,Linux开发团队便为内核建立起一个统一的设备模型。在以前的内核中没有独立的数据结构用来让内核获得系统整体配合的信息。尽管缺乏这些信息,在多数情况下内核还是能正常工作的。然而,随着拓扑结构越来越复杂,以及要支持诸如电源管理等原创 2016-03-12 12:19:28 · 12046 阅读 · 2 评论 -
Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
前面我们学习了字符设备结构体cdev Linux 字符设备驱动开发 (一)—— 字符设备驱动结构(上) 下面继续学习字符设备另外几个重要的数据结构。 先看下面这张图:原创 2016-03-10 20:58:48 · 13089 阅读 · 2 评论 -
Linux 设备驱动开发 —— platform 设备驱动
一、platform总线、设备与驱动 一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_d原创 2016-03-12 14:45:56 · 14154 阅读 · 5 评论 -
Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析
一、VFS 虚拟文件系统基础概念 Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。 Linux 有两个特性:a -- 跨原创 2016-03-11 23:39:49 · 6666 阅读 · 2 评论 -
Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统
一、什么是Linux设备文件系统 首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些原创 2016-03-12 10:55:35 · 15323 阅读 · 3 评论 -
Linux 设备驱动开发 —— platform设备驱动应用实例解析
前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习。 一、platform 驱动的工作过程 platform模型驱动编程,需要实现platform_device(设备)与platform_driver(驱动)在platform(虚拟总线)上的注册、匹配,相互绑定,然后原创 2016-03-14 19:27:40 · 45291 阅读 · 25 评论 -
Linux 字符设备驱动开发基础(五)—— ioremap() 函数解析
一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:a -- I/O 映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或原创 2016-03-11 23:26:18 · 34650 阅读 · 2 评论 -
Linux 字符设备驱动开发基础(三)—— read()、write() 相关函数解析
我们在前面讲到了file_operations,其是一个函数指针的集合,用于存放我们定义的用于操作设备的函数的指针,如果我们不定义,它默认保留为NULL。其中有最重要的几个函数,分别是open()、read()、write()、ioctl(),下面分别对其进行解析 下面先写一下打开和关闭设备的函数 int (*open) (struct inode *, struc原创 2016-03-11 22:16:23 · 20608 阅读 · 6 评论 -
Linux 设备驱动的并发控制
Linux 设备驱动中必须要解决的一个问题是多个进程对共享的资源的并发访问,并发的访问会导致竞态,即使是经验丰富的驱动工程师也常常设计出包含并发问题bug 的驱动程序。一、基础概念1、Linux 并发相关基础概念a -- 并发(concurrency) 并发指的是多个执行单元同时、并发被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访原创 2016-03-15 19:26:31 · 5905 阅读 · 2 评论 -
Linux 设备驱动中的 I/O模型(二)—— 异步通知和异步I/O
阻塞和非阻塞访问、poll() 函数提供了较多地解决设备访问的机制,但是如果有了异步通知整套机制就更加完善了。 异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”。信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一原创 2016-03-16 19:54:06 · 2414 阅读 · 0 评论 -
Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用
关与设备树的概念,我们在Exynos4412 内核移植(六)—— 设备树解析 里面已经学习过,下面看一下设备树在设备驱动开发中起到的作用 Device Tree是一种描述硬件的数据结构,设备树源(Device Tree Source)文件(以.dts结尾)就是用来描述目标板硬件信息的。Device Tree由一系列被命名的结点(node)和属性(property)组成,而结点本原创 2016-03-14 20:47:15 · 29153 阅读 · 9 评论 -
Exynos4412 ADC 设备驱动开发
具体ADC硬件知识及裸机驱动请看: Exynos4412裸机开发 —— A/D转换器1、原理图如下:2、相关寄存器信息ADC_BASE 0x126C0000ADCCON 0x0000 1ADCDLY 0x0008 ADCDAT 0x000C原创 2016-03-17 20:35:56 · 7441 阅读 · 4 评论 -
Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
一、字符设备基础知识1、设备驱动分类 linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序:字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。块设备:是指可以从设备的任意位置读取一定长度数据的设备。块原创 2016-03-09 23:12:34 · 59053 阅读 · 31 评论 -
Linux 字符设备驱动结构(四)—— file_operations 结构体知识解析
前面在 Linux 字符设备驱动开发基础 (三)—— 字符设备驱动结构(中) ,我们已经介绍了两种重要的数据结构 struct inode{...}与 struct file{...} ,下面来介绍另一个比较重要数据结构struct _file_operationsstruct _file_operations在Fs.h这个文件里面被定义的,如下所示:struct file_ope原创 2016-03-10 22:20:30 · 22956 阅读 · 0 评论 -
Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
现在,我们来编写自己第一个字符设备驱动 —— 点亮LED。硬件平台:Exynos4412(FS4412)编写驱动分下面几步:a -- 查看原理图、数据手册,了解设备的操作方法;b -- 在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始;c -- 实现驱动程序的初始化:比如向内核注册这个驱动程序,这样应用程序传入文件名,内核才能找到相应的驱动程序;d原创 2016-03-10 22:48:11 · 12346 阅读 · 10 评论 -
Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
编写驱动的第一步仍是看原理图: 可以看到,该蜂鸣器由 GPD0_0 来控制 ,查手册可知该I/O口由Time0 来控制,找到相应的寄存器:a -- I/O口寄存器及地址 GPD0CON 0x114000a0b -- Time0 寄存器及地址 基地址为:TIMER_BASE 0x139D0000 这些物理寄存器地址都是相邻原创 2016-03-11 21:25:37 · 12701 阅读 · 4 评论 -
DS18B20 驱动编写
嵌入式开发平台:mini2440DS18B20 所用GPIO:S3C2410_GPF(3)一、DS18B20 时序分析 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输,其工作时序包括:初始化时序、写时序、读时序。1、初始化时序 主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在原创 2016-03-24 18:38:47 · 18822 阅读 · 2 评论