linux内核完全注释百度网盘,LINUX内核完全注释中.pdf

LINUX内核完全注释中

6.8 floppy.c 程序

122 }

123 printk ("\010\010\010\010\010done \n");

124 ROOT_DEV=0x0101; // 修改 ROOT_DEV使其指向虚拟盘 ramdisk。

125 }

126

6.8 floppy.c 程序

6.8.1 功能描述

本程序是软盘控制器驱动程序。与其它块设备驱动程序一样,该程序也以请求项操作函数

do_fd_request()为主,执行对软盘上数据的读写操作。

考虑到软盘驱动器在不工作时马达通常不转,所以在实际能对驱动器中的软盘进行读写操作之前,

我们需要等待马达启动并达到正常的运行速度。与计算机的运行速度相比,这段时间较长,通常需要 0.5

秒左右的时间。

另外,当对一个磁盘的读写操作完毕,我们也需要让驱动器停止转动,以减少对磁盘表面的摩搽。

但我们也不能在对磁盘操作完后就立刻让它停止转动。因为,可能马上又需要对其进行读写操作。因此,

在一个驱动器没有操作后还是需要让驱动器空转一段时间,以等待可能到来的读写操作,若驱动器在一

个较长时间内都没有操作,则程序让它停止转动。这段维持旋转的时间可设定在大约 3 秒左右。

当一个磁盘的读写操作发生错误,或某些其它情况导致一个驱动器的马达没有被关闭。此时我们也

需要让系统在一定时间之后自动将其关闭。Linus 在程序中把这个延时值设定在 100 秒。

由此可见,在对软盘驱动器进行操作时会用到很多延时(定时)操作。因此在该驱动程序中涉及较

多的定时处理函数。还有几个与定时处理关系比较密切的函数被放在了kernel/sched.c 中(行201-262 )。

这是软盘驱动程序与硬盘驱动程序之间的最大区别,也是软盘驱动程序比硬盘驱动程序复杂的原因。

虽然本程序比较复杂,但对软盘读写操作的工作原理却与其它块设备是一样的。本程序也是使用请

求项和请求项链表结构来处理所有对软盘的读写操作。因此请求项操作函数 do_fd_request()仍然是本程

序中的重要函数之一。在阅读时应该以该函数为主线展开。另外,软盘控制器的使用比较复杂,其中涉

及到很多控制器的执行状态和标志。因此在阅读时,还需要频繁地参考程序后的有关说明以及本程序的

头文件 include/linux/fdreg.h 。该文件定义了所有软盘控制器参数常量,并说明了这些常量的含义。

6.8.2 代码注释

程序 6-6 linux/kernel/blk_drv/floppy.c

1 /*

2 * linux/kernel/floppy.c

3 *

4 * (C) 1991 Linus Torvalds

5 */

6

7 /*

8 * 02.12.91 - Changed to static variables to indicate need for reset

9 * and recalibrate. This makes some things easier (output_byte reset

10 * checking etc), and means less interrupt jumping in case of errors,

11 * so the code is hopefully easier to understand.

12 */

/*

- 212 -

6.8 floppy.c 程序

* 02.12.91 - 修改成静态变量,以适应复位和重新校正操作。这使得某些事情

* 做起来较为方便(output_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值