易截截图软件、单文件、免安装、纯绿色、仅160KB

linux块设备分析与使用(转的)


linux块设备分析与使用
 
 
linux块设备分析与使用
creator
sz111@126.com
 
   本篇文章力求简单明了的解释Linux的块设备驱动,让大家对它少些畏惧,快速的开发一个块设备。分析完这篇之后,下一步就是分析MMC卡的驱动,争取分析之后可以达到优化读卡速度的目的。Linux的块设备看似比较复杂,其实梳理一下并不难,有如下两点:
   1.对请求的响应。request。(如果使用请求队列)
   2.制造请求。make_request.(不使用请求队列)
  
   request是采用一定的算法组合了请求以提高性能,这个时候算法组合就是系统默认的make_request函数,函数名为__mak_request,而如果不采用请求组合的时候,就可以自定义make_request函数。因为内核中这个函数是个函数指针,可以改变的。有些时候不需要组合的方式,如SD卡和RAMDISK。
  
    以上两个方式都不能由驱动自己调用,只有当内核认为是时候让驱动处理对设备的读写等操作,它才会调用这个函数。
    基本上块设备就是对以上两种方式选择一个,然后对其进行处理。所有的块设备驱动都是围绕这个部分展开。期间有很多数据结构需要我们特别注意。
    
    我们先使用请求队列对请求进行响应,等于是采用默认的make_request函数,采用Linux默认的队列优先级算法。对这个方法进行分析展开。
原型为void request(request_queue_t *queue)
主要依靠这个函数对请求进行响应,并且所有的请求最终都被驱动处理。这个函数是被内核来调用。每个设备都有一个请求队列。Request函数会在设备的请求队列生成的时候和队列绑定在一起。通过函数
request_queue_t *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock)
生成一个请求队列。其中rfn函数就是我们用户自己的request函数。生成的这个队列会放到gendisk结构里面,gendisk是来表示一个独立的磁盘设备或分区。下面我们对request函数实例进行分析。
static void sbull_request(request_queue_t *q)
{
    struct request *req;
    while((req = elv_next_request(q)) != NULL){
         sbull_transfer(dev,req->sector,req->current_nr_sectors,
re


相关文档:

Linux设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

Linux下安装与删除软件

  像使用Windows时那么直观。其实在Linux下安装和卸载软件也非常简单,同样也有安装向
导或解压安装的方式,不相同的只不过是除了二进制形式的软件分发外,还有许许多多以
源代码形式分发的软件包,下面就来详细地讲一讲这些软件的安装与卸载: 一、二进制分发软件包的安装与卸载
Linux软件的二进制 ......

【入门】用Linux中man命令查询C函数

      大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数。可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题,比如:
      man read,我想看的是ANSI C中stdio的read函数原型和说明,没想到出来的确是BASH命令的说明,这是怎么回事 ......

linux命令详解

Linux系统命令分类详解
一.备份压缩
二.文件管理
三.网络通信
四.特殊命令
1.RPM 命令手册
2.Linux 中文件查找技术大全
3.FTP 命令大全及其应用
五.系统管理
六.其他
一.备份压缩
zipinfo
功能说明:列出压缩文件信息。
语 法:zipinfo [-12hlmMstTvz][压缩文件][文件...][-x ]
补充说明:执行zi ......

linux 分离线程

线程处于分离状态后,当线程退出后,则有操作系统来负责系统的回收。
创建分离状态线程的方法有:
1、在线程函数中调用, pthread_detach(pthread_self());
2、线程属性的设置函数
摘自:Unix 环境高级编程
int makethread(void *(*fn),void *arg)
{
       int err;
  &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号