一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务.UIO 核心实现了mmap()能够处理物理内存(physical memory),逻辑内存(logical memory), 虚拟内存(virtual memory).UIO驱动的编写是就不须要再考虑这些繁琐的细节. 第二个任务,对于设备中断的应答必须在内核空间进行.所以在内核空间有一小部分代码 用来应答中断和禁止中断,可是其余的工作所有留给用户空间处理. 假设用户空间要等待一个设备中断,它仅仅须要简…
一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务.UIO 核心实现了mmap()能够处理物理内存(physical memory),逻辑内存(logical memory), 虚拟内存(virtual memory).UIO驱动的编写是就不须要再考虑这些繁琐的细节. 第二个任务,对于设备中断的应答必须在内核空间进行.所以在内核空间有一小部分代码 用来应答中断和禁止中断,可是其余的工作所有留给用户空间处理. 假设用户空间要等待一个设备中断,它仅仅须要简…
转自:http://blog.csdn.net/xiao229404041/article/details/7031776 Linux设备驱动之semaphore机制在Linux系统中,信号号是一种重要的加锁机制,特别在互斥型资源中,semaphore更能很好的工作.1: semaphore结构体定义在Linux2.6.35内核中,semaphore的实现机制与以前的版本一点不同,在其中去除了DECLARE_MUTEX_LOCKED这个初始化互斥宏定义,但是,又添加了一个特别重要的函数,down…
在编写设备驱动时, tasklet 机制是一种比较常见的机制,通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成. 为了最大程度的避免中断处理时间过长而导致中断丢失,有时候我们需要把一些在中断处理中不是非常紧急的任务放在后面执行,而让中断处理程序尽快返回.在老版本的 linux 中通常将中断处理分为 top half handler . bottom half handler .利用 top half handler 处理中断必须处理的任务,而 bottom hal…
在编写设备驱动时, tasklet 机制是一种比较常见的机制,通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成. 为了最大程度的避免中断处理时间过长而导致中断丢失,有时候我们需要把一些在中断处理中不是非常紧急的任务放在后面执行,而让中断处理程序尽快返回.在老版本的 linux 中通常将中断处理分为 top half handler . bottom half handler .利用 top half handler 处理中断必须处理的任务,而 bottom hal…
原文地址:Linux设备驱动--块设备(一)之概念和框架 基本概念   块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区. 字符设备(Character device) ---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流.他不具备缓冲区,所以对这种设备的读写是实时的. 扇区(Sectors):任何块设备硬…
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 一.初探linux内核模块 内核模块:内核本身是很庞大的一个结构,需要的组件很多.编译…
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 一.linux设备驱动的作用 内核:用于管理软硬件资源,并提供运行环境.如分配4G虚拟空间等. linux设备驱动:是连接硬件和内核之间的桥梁. linu…
[1:引言: linux字符设备驱动的基本编程流程] 1.实现模块加载函数  a.申请主设备号    register_chrdev(major,name,file_operations);  b.创建字符设备cdev,注册字符设备    cdev_alloc cdev_init cdev_add   c.创建设备文件    class_create device_create  d.注册中断    ret =request_irq(中断号,...,...,...,...);  e.映射   …
1. 学习总结 小白的博客讲的linux内核驱动这一块的东西比较基础,因此想通过学习他的博客,搭配着看书的方式来学习linux内核和驱动.我会依次更新在学习小白的博客的过程的感悟和体会. 2.1 内核2.6.29开发环境的建立: 在看到作者小白说他用的内核是2.6.29,我就想采用跟他一样的环境来还原他的所有实验过程.因此后面就有了找内核源码.Ubuntu系统.虚拟机安装Ubuntu系统.内核版本更换(更低版本)的方法. 现在一一讲解: 搭建基于ubuntu的内核开发环境 因为看这一篇文章以为内…