📄 54.html
字号:
<a name='L81'><i><font color='green'>* 需要时加入条目。目前块设备仅支持硬盘和软盘(还有虚拟盘)。</font></i>
<a name='L82'><i><font color='green'>*/</font></i>
<a name='L83'>
<a name='L84'><font color='darkred'>#if</font> (<a href='../D/225.html' title='Multiple defined in 3 places.'>MAJOR_NR</a> == 1) <i><font color='green'>// RAM 盘的主设备号是1。根据这里的定义可以推理内存块主设备号也为1。</font></i>
<a name='L85'><i><font color='green'>/* ram disk */</font></i><i><font color='green'>/* RAM 盘(内存虚拟盘) */</font></i>
<a name='L86'><font color='darkred'>#define</font> <a href='../R/27.html' title='Multiple refered from 4 places.'>DEVICE_NAME</a> "ramdisk" <i><font color='green'>// 设备名称ramdisk。</font></i>
<a name='L87'><font color='darkred'>#define</font> <a href='../R/30.html' title='Multiple refered from 4 places.'>DEVICE_REQUEST</a> <a href='../S/59.html#L37' title='Defined at 37 in kernel/blk_drv/ramdisk.c.'>do_rd_request</a> <i><font color='green'>// 设备请求函数do_rd_request()。</font></i>
<a name='L88'><font color='darkred'>#define</font> <a href='../R/28.html' title='Multiple refered from 3 places.'>DEVICE_NR</a>(device) ((device) & 7) <i><font color='green'>// 设备号(0--7)。</font></i>
<a name='L89'><font color='darkred'>#define</font> DEVICE_ON(device) <i><font color='green'>// 开启设备。虚拟盘无须开启和关闭。</font></i>
<a name='L90'><font color='darkred'>#define</font> <a href='../S/54.html#L138' title='Refered from 138 in kernel/blk_drv/blk.h.'>DEVICE_OFF</a>(device) <i><font color='green'>// 关闭设备。</font></i>
<a name='L91'>
<a name='L92'><font color='darkred'>#elif</font> (<a href='../D/225.html' title='Multiple defined in 3 places.'>MAJOR_NR</a> == 2) <i><font color='green'>// 软驱的主设备号是2。</font></i>
<a name='L93'><i><font color='green'>/* floppy */</font></i>
<a name='L94'><font color='darkred'>#define</font> <a href='../R/27.html' title='Multiple refered from 4 places.'>DEVICE_NAME</a> "floppy" <i><font color='green'>// 设备名称floppy。</font></i>
<a name='L95'><font color='darkred'>#define</font> <a href='../R/26.html' title='Multiple refered from 2 places.'>DEVICE_INTR</a> do_floppy <i><font color='green'>// 设备中断处理程序do_floppy()。</font></i>
<a name='L96'><font color='darkred'>#define</font> <a href='../R/30.html' title='Multiple refered from 4 places.'>DEVICE_REQUEST</a> <a href='../S/55.html#L630' title='Defined at 630 in kernel/blk_drv/floppy.c.'>do_fd_request</a> <i><font color='green'>// 设备请求函数do_fd_request()。</font></i>
<a name='L97'><font color='darkred'>#define</font> <a href='../R/28.html' title='Multiple refered from 3 places.'>DEVICE_NR</a>(device) ((device) & 3) <i><font color='green'>// 设备号(0--3)。</font></i>
<a name='L98'><font color='darkred'>#define</font> DEVICE_ON(device) <a href='../S/74.html#L332' title='Defined at 332 in kernel/sched.c.'>floppy_on</a>(<a href='../D/63.html' title='Multiple defined in 3 places.'>DEVICE_NR</a>(device)) <i><font color='green'>// 开启设备函数floppyon()。</font></i>
<a name='L99'><font color='darkred'>#define</font> <a href='../S/54.html#L138' title='Refered from 138 in kernel/blk_drv/blk.h.'>DEVICE_OFF</a>(device) <a href='../S/74.html#L342' title='Defined at 342 in kernel/sched.c.'>floppy_off</a>(<a href='../D/63.html' title='Multiple defined in 3 places.'>DEVICE_NR</a>(device)) <i><font color='green'>// 关闭设备函数floppyoff()。</font></i>
<a name='L100'>
<a name='L101'><font color='darkred'>#elif</font> (<a href='../D/225.html' title='Multiple defined in 3 places.'>MAJOR_NR</a> == 3) <i><font color='green'>// 硬盘主设备号是3。</font></i>
<a name='L102'><i><font color='green'>/* harddisk */</font></i>
<a name='L103'><font color='darkred'>#define</font> <a href='../R/27.html' title='Multiple refered from 4 places.'>DEVICE_NAME</a> "harddisk" <i><font color='green'>// 硬盘名称harddisk。</font></i>
<a name='L104'><font color='darkred'>#define</font> <a href='../R/26.html' title='Multiple refered from 2 places.'>DEVICE_INTR</a> do_hd <i><font color='green'>// 设备中断处理程序do_hd()。</font></i>
<a name='L105'><font color='darkred'>#define</font> <a href='../R/30.html' title='Multiple refered from 4 places.'>DEVICE_REQUEST</a> <a href='../S/56.html#L390' title='Defined at 390 in kernel/blk_drv/hd.c.'>do_hd_request</a> <i><font color='green'>// 设备请求函数do_hd_request()。</font></i>
<a name='L106'><font color='darkred'>#define</font> <a href='../R/28.html' title='Multiple refered from 3 places.'>DEVICE_NR</a>(device) (<a href='../D/238.html' title='Multiple defined in 2 places.'>MINOR</a>(device)/5) <i><font color='green'>// 设备号(0--1)。每个硬盘可以有4 个分区。</font></i>
<a name='L107'><font color='darkred'>#define</font> DEVICE_ON(device) <i><font color='green'>// 硬盘一直在工作,无须开启和关闭。</font></i>
<a name='L108'><font color='darkred'>#define</font> <a href='../S/54.html#L138' title='Refered from 138 in kernel/blk_drv/blk.h.'>DEVICE_OFF</a>(device)
<a name='L109'>
<a name='L110'><font color='darkred'>#elif</font>
<a name='L111'><i><font color='green'>/* unknown blk device */</font></i><i><font color='green'>/* 未知块设备 */</font></i>
<a name='L112'><font color='darkred'>#error</font> "unknown blk device"
<a name='L113'>
<a name='L114'><font color='darkred'>#endif</font>
<a name='L115'>
<a name='L116'><font color='darkred'>#define</font> <a href='../R/19.html' title='Multiple refered from 48 places.'>CURRENT</a> (blk_dev[<a href='../D/225.html' title='Multiple defined in 3 places.'>MAJOR_NR</a>].current_request) <i><font color='green'>// CURRENT 为指定主设备号的当前请求结构。</font></i>
<a name='L117'><font color='darkred'>#define</font> <a href='../R/20.html' title='Multiple refered from 4 places.'>CURRENT_DEV</a> <a href='../D/63.html' title='Multiple defined in 3 places.'>DEVICE_NR</a>(<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-><a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>) <i><font color='green'>// CURRENT_DEV 为CURRENT 的设备号。</font></i>
<a name='L118'>
<a name='L119'><font color='darkred'>#ifdef</font> <a href='../D/61.html' title='Multiple defined in 2 places.'>DEVICE_INTR</a>
<a name='L120'><b>void</b> (*<a href='../D/61.html' title='Multiple defined in 2 places.'>DEVICE_INTR</a>) (<b>void</b>) = <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>;
<a name='L121'><font color='darkred'>#endif</font>
<a name='L122'><b>static</b> <b>void</b> (<a href='../D/66.html' title='Multiple defined in 3 places.'>DEVICE_REQUEST</a>) (<b>void</b>);
<a name='L123'>
<a name='L124'><i><font color='green'>// 释放锁定的缓冲区。</font></i>
<a name='L125'><b>extern</b> <b>inline</b> <b>void</b>
<a name='L126'><a href='../R/719.html' title='Multiple refered from 3 places.'>unlock_buffer</a> (<b>struct</b> buffer_head *bh)
<a name='L127'><font color='red'>{</font>
<a name='L128'> <b>if</b> (!bh->b_lock) <i><font color='green'>// 如果指定的缓冲区bh 并没有被上锁,则显示警告信息。</font></i>
<a name='L129'> <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> (<a href='../D/62.html' title='Multiple defined in 3 places.'>DEVICE_NAME</a> ": free buffer being unlocked\n");
<a name='L130'> bh->b_lock = 0; <i><font color='green'>// 否则将该缓冲区解锁。</font></i>
<a name='L131'> <a href='../S/74.html#L272' title='Defined at 272 in kernel/sched.c.'>wake_up</a> (&bh->b_wait); <i><font color='green'>// 唤醒等待该缓冲区的进程。</font></i>
<a name='L132'><font color='red'>}</font>
<a name='L133'>
<a name='L134'><i><font color='green'>// 结束请求。</font></i>
<a name='L135'><b>extern</b> <b>inline</b> <b>void</b>
<a name='L136'><a href='../R/449.html' title='Multiple refered from 10 places.'>end_request</a> (<b>int</b> uptodate)
<a name='L137'><font color='red'>{</font>
<a name='L138'> <a href='../D/64.html' title='Multiple defined in 3 places.'>DEVICE_OFF</a> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-><a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>); <i><font color='green'>// 关闭设备。</font></i>
<a name='L139'> <b>if</b> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->bh)
<a name='L140'> <font color='red'>{</font> <i><font color='green'>// CURRENT 为指定主设备号的当前请求结构。</font></i>
<a name='L141'> <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->bh->b_uptodate = uptodate; <i><font color='green'>// 置更新标志。</font></i>
<a name='L142'> <a href='../D/1100.html' title='Multiple defined in 2 places.'>unlock_buffer</a> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->bh); <i><font color='green'>// 解锁缓冲区。</font></i>
<a name='L143'> <font color='red'>}</font>
<a name='L144'> <b>if</b> (!uptodate)
<a name='L145'> <font color='red'>{</font> <i><font color='green'>// 如果更新标志为0 则显示设备错误信息。</font></i>
<a name='L146'> <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> (<a href='../D/62.html' title='Multiple defined in 3 places.'>DEVICE_NAME</a> " I/O error\n\r");
<a name='L147'> <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("dev %04x, block %d\n\r", <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-><a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->bh->b_blocknr);
<a name='L148'> <font color='red'>}</font>
<a name='L149'> <a href='../S/74.html#L272' title='Defined at 272 in kernel/sched.c.'>wake_up</a> (&<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->waiting); <i><font color='green'>// 唤醒等待该请求项的进程。</font></i>
<a name='L150'> <a href='../S/74.html#L272' title='Defined at 272 in kernel/sched.c.'>wake_up</a> (&wait_for_request); <i><font color='green'>// 唤醒等待请求的进程。</font></i>
<a name='L151'> <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-><a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a> = -1; <i><font color='green'>// 释放该请求项。</font></i>
<a name='L152'> <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a> = <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->next; <i><font color='green'>// 从请求链表中删除该请求项。</font></i>
<a name='L153'><font color='red'>}</font>
<a name='L154'>
<a name='L155'><i><font color='green'>// 定义初始化请求宏。</font></i>
<a name='L156'><font color='darkred'>#define</font> <a href='../R/93.html' title='Multiple refered from 3 places.'>INIT_REQUEST</a> \
<a name='L157'>repeat: \
<a name='L158'><b>if</b> (!<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>) \ <i><font color='green'>// 如果当前请求结构指针为null 则返回。</font></i>
<a name='L159'><b>return</b>;
<a name='L160'><b>if</b> (<a href='../S/31.html#L49' title='Defined at 49 in include/linux/fs.h.'>MAJOR</a> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->dev) != <a href='../D/225.html' title='Multiple defined in 3 places.'>MAJOR_NR</a>)
<a name='L161'> \ <i><font color='green'>// 如果当前设备的主设备号不对则死机。</font></i>
<a name='L162'> <a href='../S/72.html#L24' title='Defined at 24 in kernel/panic.c.'>panic</a> (<a href='../D/62.html' title='Multiple defined in 3 places.'>DEVICE_NAME</a> ": request list destroyed");
<a name='L163'><b>if</b> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->bh)
<a name='L164'> <font color='red'>{</font>
<a name='L165'> <b>if</b> (!<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>->bh->b_lock)
<a name='L166'> \ <i><font color='green'>// 如果在进行请求操作时缓冲区没锁定则死机。</font></i>
<a name='L167'> <a href='../S/72.html#L24' title='Defined at 24 in kernel/panic.c.'>panic</a> (<a href='../D/62.html' title='Multiple defined in 3 places.'>DEVICE_NAME</a> ": block not locked");
<a name='L168'> <font color='red'>}</font>
<a name='L169'>
<a name='L170'><font color='darkred'>#endif</font>
<a name='L171'>
<a name='L172'><font color='darkred'>#endif</font>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [<][>]<a href='#L126'>[^]</a><a href='#L136'>[v]</a><a href='#TOP'>[top]</a>[bottom]<a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -