字符驱动
ymj321
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
用户空间访问硬件设备的方式
明确:不管是在用户空间还是在内核空间,软件一律不能去直接访问设备的物理地址; linux的线程只能访问虚拟地址,不管是不是内核,ioremap应用,比如有个寄存器地址是0xe8000000你要用ioremap映射后,才能访问地址0xe8000000。这两个地址是不同的,mmu会帮你搞定,对你是透明的。 对于一个系统来讲,会有很多的外设,那么这些外设的管理都是通过CP...原创 2019-11-10 18:12:32 · 1148 阅读 · 1 评论 -
Linux 设备驱动开发思想 —— 驱动分层与驱动分离
前面我们学习I2C、USB、SD驱动时,有没有发现一个共性,就是在驱动开发时,每个驱动都分层三部分,由上到下分别是:1、XXX 设备驱动2、XXX 核心层3、XXX 主机控制器驱动而需要我们编写的主要是设备驱动部分,主机控制器驱动部分也有少量编写,二者进行交互主要时由核心层提供的接口来实现;这样结构清晰,大大地有利于我们的驱动开发,这其中就是利用了Linux设备驱动开发...转载 2019-11-02 14:11:49 · 216 阅读 · 0 评论 -
UART驱动程序设计
UART,全称Universal Asynchronous Receiver/Transmitter,通用异步收发传输器,也称串口。本文出于在bootloader中要使用串口作为控制台的需求,特意编写串口驱动代码,和读者一起学习!相信触过嵌入式行业的程序猿们都使用过串口作为系统的调试工具。在之前学习stm32的过程中,同学们都习惯使用库函数的方式直接调用或移植串口代码,很少有人真正的去分析串口...转载 2019-11-02 14:11:43 · 1717 阅读 · 0 评论 -
Linux设备驱动第七篇:高级字符驱动操作之阻塞IO
我们之前介绍过简单的read,write操作,那么会有一个问题:当驱动无法立即响应请求该怎么办?比如一个进程调用read读取数据,当没有数据可读时该怎么办,是立即返回还是等到有数据的时候;另一种情况是进程调用write向设备写数据,如果缓冲区满了或者设备正忙的时候怎么办,是立即返回还是继续等待直到设备可写?这种情况下,一般的缺省做法是使进程睡眠直到请求可以满足为止。本篇就介绍遇到这类问题驱动的处理...转载 2019-11-02 14:11:36 · 139 阅读 · 0 评论 -
Linux设备驱动第六篇:高级字符驱动操作之iotcl
在之前我们介绍了如何实现一个简单的字符设备驱动,并介绍了简单的open,close,read,write等驱动提供的基本功能。但是一个真正的设备驱动往往提供了比简单读写更高级的功能。这一篇我们就来介绍一些驱动动中使用的一些高级的操作的实现。大部分驱动除了提供对设备的读写操作外,还需要提供对硬件控制的接口,比如查询一个framebuffer设备能提供多大的分辨率,读取一个RTC设备的时间,设置一...转载 2019-11-02 14:11:26 · 173 阅读 · 0 评论 -
linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法
上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试。在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?我们知道在调试程序时经常遇到的问题就是野指针或者数组越界带来的问题,在应用程序中运行这种程序就会报segmentation fault的错误,而由于驱动程序的特殊性,出现此类...转载 2019-11-01 17:23:40 · 332 阅读 · 0 评论 -
Linux字符设备驱动模型之操作函数集
在上一篇文章中(Linux字符设备驱动模型之设备号)提到,在Linux用户空间中,操作硬件设备是通过操作文件的方式进行。那么其所包含的操作方式无法就是打开文件(open)、写数据到文件(write)、从文件读数据(read)等等。如下图:一、struct file_operations操作函数集struct file_operations结构对于Linux设备驱动的开发尤其重...转载 2019-11-01 17:06:24 · 717 阅读 · 0 评论 -
Linux字符设备驱动模型之设备号
从上文(Linux 字符设备驱动模型之框架解说)可知,在Linux用户空间中,如若需要操作硬件设备,均通过/dev目录下的设备文件节点进行操作,基本上每一种设备都会存在一个或者多个的设备节点。并且在Linux内核中,其表示字符设备的结构成员也提供了相应的设备号。设备号成员为dev_t dev;那么其与设备之间的关系是什么呢?它又与用户空间的操作是和关系??一、设备号那么设备文件节点...转载 2019-11-01 17:05:45 · 469 阅读 · 0 评论 -
Linux 字符设备驱动模型之框架解说
一、软件操作硬件设备模型在进行嵌入式开发的过程中,在常做的事情就是驱动配置硬件设 备,然后根据功能需求使用硬件设备,实现功能的逻辑。如下图为其 相互之间的关系。如上图所示: 驱动程序:主要作为操作和配置硬件设备,使得硬件设备能够正常进行工作。例如,在写点灯程序时,前提条件是从原理图了解到 LED 等与 CPU/MCU 之间的硬件连接(使用了哪一个 GPIO 口),驱动 程序的作用就是...转载 2019-11-01 17:03:50 · 242 阅读 · 0 评论 -
linux设备驱动第三篇:写一个简单的字符设备驱动
在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。下面就开始学习如何写一个简单的字符设备驱动。首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作。1、主设备号和次设备号对于字...转载 2019-11-01 17:00:08 · 164 阅读 · 0 评论 -
linux设备驱动 二:构造和运行模块
上一篇介绍了linux驱动的概念,以及linux下设备驱动的基本分类情况及其各个分类的依据和差异,这一篇我们来描述如何写一个类似hello world的简单测试驱动程序。而这个驱动的唯一功能就是输出hello world。在编写具体的实例之前,我们先来了解下linux内核下调试程序的一个重要函数printk以及几个重要概念。printk类似c语言的printf,是内核中输出打印信息的函数。...转载 2019-11-01 16:45:09 · 158 阅读 · 0 评论 -
设备驱动实例--字符设备驱动
在整个Linux设备驱动学习中,字符设备驱动较为基础。通过对它的学习,对设备驱动进一步加深了解Linux 字符设备驱动结构cdev 结构体struct cdev{ struct kobject kobj; //内嵌的kobject对象 struct module *owner; //所属模块 struct file_operations *ops; /...转载 2019-11-01 11:45:44 · 286 阅读 · 0 评论
分享