易截截图软件、单文件、免安装、纯绿色、仅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 Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

Linux常用命令简介

1.  lpr: line printer 按行打印, 用来将一个或者多个文件放入打印队列等待打印。
举例:
lpr report #打印文件report
lpr -Pprinter1 report #将文件在名称为 printer1 的打印机上打印;
2. touch
修改文件的访问和修改时间。
3. linux中目录由“冒号”分隔; ......

linux内核中中断不能睡眠的原因[zt]

先把中断处理流程给出来
1.进入中断处理程序--->2.保存关键上下文---->3.开中断(sti指令)--->4.进入中断处理程序的handler--->5.关中断(cli指令)---->6.写EOI寄存器(表示中断处理完成)---->7.开中断。
硬中断:
对应于上图的1、2、3步骤,在这几个步骤中,所有中断是被屏蔽的,如果在这个时候睡 ......

linux修改主机名的方法

linux修改主机名的方法
用hostname命令可以临时修改机器名,但机器重新启动之后就会恢复原来的值。
#hostname   //查看机器名
#hostname -i  //查看本机器名对应的ip地址
另外一种方法就是之久修改配置文件
修改/etc/sysconfig/network   修改这个文件,系统才有效
    /etc ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号