Linux设备驱动第八篇:高级字符驱动操作之设备存取控制

Linux设备驱动第八篇:高级字符驱动操作之设备存取控制

2年前 (2015-08-14) 浏览: 286 评论: 0

上一篇中介绍了阻塞IO等的一些用法,本来这一篇准备介绍一下poll/select等的一些高级IO操作,后来想想,在实际工作中开发驱动的时候很少会使用到poll/select这些操作,就不再介绍,有兴趣的可以自己查找资料学习一下。这一篇会介绍下相对比较实用的设备文件的存取控制的一些内容。 存取控制主要用于设备的使用控制,只有授权的用户才能访问设备或者同时只有一个进程访问设备。这也是存取控制使用最广的

Linux设备驱动第七篇:高级字符驱动操作之阻塞IO

Linux设备驱动第七篇:高级字符驱动操作之阻塞IO

2年前 (2015-07-31) 浏览: 121 评论: 5

我们之前介绍过简单的read,write操作,那么会有一个问题:当驱动无法立即响应请求该怎么办?比如一个进程调用read读取数据,当没有数据可读时该怎么办,是立即返回还是等到有数据的时候;另一种情况是进程调用write向设备写数据,如果缓冲区满了或者设备正忙的时候怎么办,是立即返回还是继续等待直到设备可写?这种情况下,一般的缺省做法是使进程睡眠直到请求可以满足为止。本篇就介绍遇到这类问题驱动的处理

Linux设备驱动第六篇:高级字符驱动操作之iotcl

Linux设备驱动第六篇:高级字符驱动操作之iotcl

2年前 (2015-07-24) 浏览: 126 评论: 6

在之前我们介绍了如何实现一个简单的字符设备驱动,并介绍了简单的open,close,read,write等驱动提供的基本功能。但是一个真正的设备驱动往往提供了比简单读写更高级的功能。这一篇我们就来介绍一些驱动动中使用的一些高级的操作的实现。 大部分驱动除了提供对设备的读写操作外,还需要提供对硬件控制的接口,比如查询一个framebuffer设备能提供多大的分辨率,读取一个RTC设备的时间,设置一个

Linux read系统调用

Linux read系统调用

3年前 (2015-06-19) 浏览: 208 评论: 0

最近一个项目做了一个模拟u盘的设备,但是在read虚拟u盘的内容时必须每次都从磁盘内读取,而不是从系统的cache中读取,由于这个问题,就查资料看了下read的系统调用,以及文件系统的一些内容。由于文件系统涉及面较广,例如虚拟文件系统(VFS),页缓存,块缓存,数据同步等内容,不可能全部分析到位,这里只记录和read有关的两种使用方式。cached IO和direct IO。 1. 什么是系统调用

Android上学习ARM指令集之开篇

Android上学习ARM指令集之开篇

3年前 (2015-06-13) 浏览: 113 评论: 0

工作中经常碰到crash的问题,如果是Debug版本,有源代码,那还好,调试信息多。万一Release给QA甚至客户之后,再发现crash之类的问题,如果不熟悉ARM指令、看不懂现场,那调试起来可就费劲了。往往只能到处去猜,相信大家都有过这种难过的经历。 这段时间比较闲,正好利用起来为入门ARM指令集写点初级文章,没什么远大理想,写到哪里算哪里,权当娱乐罢了。 环境准备:现在的学习环境可真是方便啊

linux设备驱动第五篇:驱动中的并发与竟态

linux设备驱动第五篇:驱动中的并发与竟态

3年前 (2015-04-11) 浏览: 83 评论: 1

综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争。 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时、并行被执行。而并发的执行单元对共享资源(硬件资源和软件上的全局、静态变量)的访问则容易导致竞态(race conditions)。可能导致并发和竟态的情况有: SMP(Symmetric Multi-Pro

linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法

linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法

3年前 (2015-04-02) 浏览: 75 评论: 0

上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试。在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?我们知道在调试程序时经常遇到的问题就是野指针或者数组越界带来的问题,在应用程序中运行这种程序就会报segmentation fault的错误,而由于驱动程序的特殊性,出现此类

linux设备驱动第三篇:写一个简单的字符设备驱动

linux设备驱动第三篇:写一个简单的字符设备驱动

3年前 (2015-03-28) 浏览: 121 评论: 0

在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。 下面就开始学习如何写一个简单的字符设备驱动。首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作。 1、主设备号和次设备号 对于字符设

linux设备驱动第二篇:构造和运行模块

linux设备驱动第二篇:构造和运行模块

3年前 (2015-03-28) 浏览: 134 评论: 0

上一篇介绍了linux驱动的概念,以及linux下设备驱动的基本分类情况及其各个分类的依据和差异,这一篇我们来描述如何写一个类似hello world的简单测试驱动程序。而这个驱动的唯一功能就是输出hello world。 在编写具体的实例之前,我们先来了解下linux内核下调试程序的一个重要函数printk以及几个重要概念。 printk类似c语言的printf,是内核中输出打印信息的函数。以后

linux设备驱动第一篇:设备驱动程序简介

linux设备驱动第一篇:设备驱动程序简介

3年前 (2015-03-28) 浏览: 308 评论: 3

首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢? 设备驱动程序在内核中的角色:他们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。(说白了,驱动程序除了对外提供特定的接口外,任何实现细节对应用程序都是不可见的。)用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。驱动程序的任务是把这些标准化调用映射

切换注册

登录

忘记密码 ?

切换登录

注册