⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 59.html

📁 linux 0.11中文版 有注释
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html>
<head>
<title>kernel/blk_drv/ramdisk.c</title>
<meta name='robots' content='noindex,nofollow'>
<meta name='generator' content='GLOBAL-5.4.1'>
</head>
<body text='#191970' bgcolor='#f5f5dc' vlink='gray'>
<a name='TOP'><h2><a href='../mains.html'>root</a>/<a href='../files/104.html'>kernel</a>/<a href='../files/105.html'>blk_drv</a>/ramdisk.c</h2>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L37'>[^]</a><a href='#L103'>[v]</a>[top]<a href='#BOTTOM'>[bottom]</a><a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
<hr>
<h2>DEFINITIONS</h2>
This source file includes following definitions.
<ol>
<li><a href='#L37' title='Defined at 37.'>do_rd_request</a>
<li><a href='#L78' title='Defined at 78.'>rd_init</a>
<li><a href='#L103' title='Defined at 103.'>rd_load</a>
</ol>
<hr>
<pre>
<a name='L1'><i><font color='green'>/*</font></i>
<a name='L2'><i><font color='green'>* linux/kernel/blk_drv/ramdisk.c</font></i>
<a name='L3'><i><font color='green'>*</font></i>
<a name='L4'><i><font color='green'>* Written by Theodore Ts'o, 12/2/91</font></i>
<a name='L5'><i><font color='green'>*/</font></i>
<a name='L6'><i><font color='green'>/* 由Theodore Ts'o 编制,12/2/91</font></i>
<a name='L7'><i><font color='green'>*/</font></i>
<a name='L8'><i><font color='green'>// Theodore Ts'o (Ted Ts'o)是linux 社区中的著名人物。Linux 在世界范围内的流行也有他很大的</font></i>
<a name='L9'><i><font color='green'>// 功劳,早在Linux 操作系统刚问世时,他就怀着极大的热情为linux 的发展提供了maillist,并</font></i>
<a name='L10'><i><font color='green'>// 在北美洲地区最早设立了linux 的ftp 站点(tsx-11.mit.edu),而且至今仍然为广大linux 用户</font></i>
<a name='L11'><i><font color='green'>// 提供服务。他对linux 作出的最大贡献之一是提出并实现了ext2 文件系统。该文件系统已成为</font></i>
<a name='L12'><i><font color='green'>// linux 世界中事实上的文件系统标准。最近他又推出了ext3 文件系统,大大提高了文件系统的</font></i>
<a name='L13'><i><font color='green'>// 稳定性和访问效率。作为对他的推崇,第97 期(2002 年5 月)的linuxjournal 期刊将他作为</font></i>
<a name='L14'><i><font color='green'>// 了封面人物,并对他进行了采访。目前,他为IBM linux 技术中心工作,并从事着有关LSB</font></i>
<a name='L15'><i><font color='green'>// (Linux Standard Base)等方面的工作。(他的主页:http://thunk.org/tytso/)</font></i>
<a name='L16'>
<a name='L17'><font color='darkred'>#include</font> &lt;<a href='42.html'>string.h</a>&gt;             <i><font color='green'>// 字符串头文件。主要定义了一些有关字符串操作的嵌入函数。</font></i>
<a name='L18'>
<a name='L19'><font color='darkred'>#include</font> &lt;<a href='30.html'>linux/config.h</a>&gt;       <i><font color='green'>// 内核配置头文件。定义键盘语言和硬盘类型(HD_TYPE)可选项。</font></i>
<a name='L20'><font color='darkred'>#include</font> &lt;<a href='36.html'>linux/sched.h</a>&gt;        <i><font color='green'>// 调度程序头文件,定义了任务结构task_struct、初始任务0 的数据,</font></i>
<a name='L21'><i><font color='green'>// 还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。</font></i>
<a name='L22'><font color='darkred'>#include</font> &lt;<a href='31.html'>linux/fs.h</a>&gt;           <i><font color='green'>// 文件系统头文件。定义文件表结构(file,buffer_head,m_inode 等)。</font></i>
<a name='L23'><font color='darkred'>#include</font> &lt;<a href='34.html'>linux/kernel.h</a>&gt;       <i><font color='green'>// 内核头文件。含有一些内核常用函数的原形定义。</font></i>
<a name='L24'><font color='darkred'>#include</font> &lt;<a href='25.html'>asm/system.h</a>&gt;         <i><font color='green'>// 系统头文件。定义了设置或修改描述符/中断门等的嵌入式汇编宏。</font></i>
<a name='L25'><font color='darkred'>#include</font> &lt;<a href='24.html'>asm/segment.h</a>&gt;        <i><font color='green'>// 段操作头文件。定义了有关段寄存器操作的嵌入式汇编函数。</font></i>
<a name='L26'><font color='darkred'>#include</font> &lt;<a href='23.html'>asm/memory.h</a>&gt;         <i><font color='green'>// 内存拷贝头文件。含有memcpy()嵌入式汇编宏函数。</font></i>
<a name='L27'>
<a name='L28'><font color='darkred'>#define</font> <a href='../R/121.html' title='Multiple refered from 9 places.'>MAJOR_NR</a> 1              <i><font color='green'>// 内存主设备号是1。</font></i>
<a name='L29'><font color='darkred'>#include</font> "<a href='54.html'>blk.h</a>"
<a name='L30'>
<a name='L31'><b>char</b> *rd_start;                 <i><font color='green'>// 虚拟盘在内存中的起始位置。在52 行初始化函数rd_init()中</font></i>
<a name='L32'><i><font color='green'>// 确定。参见(init/main.c,124)(缩写rd_代表ramdisk_)。</font></i>
<a name='L33'><b>int</b> rd_length = 0;              <i><font color='green'>// 虚拟盘所占内存大小(字节)。</font></i>
<a name='L34'>
<a name='L35'><i><font color='green'>// 执行虚拟盘(ramdisk)读写操作。程序结构与do_hd_request()类似(kernel/blk_drv/hd.c,294)。</font></i>
<a name='L36'><b>void</b>
<a name='L37'><a href='../S/54.html#L87' title='Refered from 87 in kernel/blk_drv/blk.h.'>do_rd_request</a> (<b>void</b>)
<a name='L38'><font color='red'>{</font>
<a name='L39'>  <b>int</b> len;
<a name='L40'>  <b>char</b> *addr;
<a name='L41'>
<a name='L42'>  <a href='../S/54.html#L156' title='Defined at 156 in kernel/blk_drv/blk.h.'>INIT_REQUEST</a>;                 <i><font color='green'>// 检测请求的合法性(参见kernel/blk_drv/blk.h,127)。</font></i>
<a name='L43'><i><font color='green'>// 下面语句取得ramdisk 的起始扇区对应的内存起始位置和内存长度。</font></i>
<a name='L44'><i><font color='green'>// 其中sector &lt;&lt; 9 表示sector * 512,CURRENT 定义为(blk_dev[MAJOR_NR].current_request)。</font></i>
<a name='L45'>  addr = rd_start + (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-&gt;sector &lt;&lt; 9);
<a name='L46'>  len = <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-&gt;nr_sectors &lt;&lt; 9;
<a name='L47'><i><font color='green'>// 如果子设备号不为1 或者对应内存起始位置&gt;虚拟盘末尾,则结束该请求,并跳转到repeat 处</font></i>
<a name='L48'><i><font color='green'>// (定义在28 行的INIT_REQUEST 内开始处)。</font></i>
<a name='L49'>  <b>if</b> ((<a href='../D/238.html' title='Multiple defined in 2 places.'>MINOR</a> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-&gt;<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>) != 1) || (addr + len &gt; rd_start + rd_length))
<a name='L50'>    <font color='red'>{</font>
<a name='L51'>      <a href='../S/54.html#L136' title='Defined at 136 in kernel/blk_drv/blk.h.'>end_request</a> (0);
<a name='L52'>      <b>goto</b> repeat;
<a name='L53'>    <font color='red'>}</font>
<a name='L54'><i><font color='green'>// 如果是写命令(WRITE),则将请求项中缓冲区的内容复制到addr 处,长度为len 字节。</font></i>
<a name='L55'>  <b>if</b> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-&gt;cmd == <a href='../S/31.html#L43' title='Defined at 43 in include/linux/fs.h.'>WRITE</a>)
<a name='L56'>    <font color='red'>{</font>
<a name='L57'>      (<b>void</b>) <a href='../D/889.html' title='Multiple defined in 2 places.'>memcpy</a> (addr, <a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-&gt;buffer, len);
<a name='L58'><i><font color='green'>// 如果是读命令(READ),则将addr 开始的内容复制到请求项中缓冲区中,长度为len 字节。</font></i>
<a name='L59'>    <font color='red'>}</font>
<a name='L60'>  <b>else</b> <b>if</b> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-&gt;cmd == <a href='../S/31.html#L42' title='Defined at 42 in include/linux/fs.h.'>READ</a>)
<a name='L61'>    <font color='red'>{</font>
<a name='L62'>      (<b>void</b>) <a href='../D/889.html' title='Multiple defined in 2 places.'>memcpy</a> (<a href='../S/54.html#L116' title='Defined at 116 in kernel/blk_drv/blk.h.'>CURRENT</a>-&gt;buffer, addr, len);
<a name='L63'><i><font color='green'>// 否则显示命令不存在,死机。</font></i>
<a name='L64'>    <font color='red'>}</font>
<a name='L65'>  <b>else</b>
<a name='L66'>    <a href='../S/72.html#L24' title='Defined at 24 in kernel/panic.c.'>panic</a> ("unknown ramdisk-command");
<a name='L67'><i><font color='green'>// 请求项成功后处理,置更新标志。并继续处理本设备的下一请求项。</font></i>
<a name='L68'>  <a href='../S/54.html#L136' title='Defined at 136 in kernel/blk_drv/blk.h.'>end_request</a> (1);
<a name='L69'>  <b>goto</b> repeat;
<a name='L70'><font color='red'>}</font>
<a name='L71'>
<a name='L72'><i><font color='green'>/*</font></i>
<a name='L73'><i><font color='green'>* Returns amount of memory which needs to be reserved.</font></i>
<a name='L74'><i><font color='green'>*/</font></i>
<a name='L75'><i><font color='green'>/* 返回内存虚拟盘ramdisk 所需的内存量 */</font></i>
<a name='L76'><i><font color='green'>// 虚拟盘初始化函数。确定虚拟盘在内存中的起始地址,长度。并对整个虚拟盘区清零。</font></i>
<a name='L77'><b>long</b>
<a name='L78'><a href='../S/52.html#L166' title='Refered from 166 in init/main.c.'>rd_init</a> (<b>long</b> mem_start, <b>int</b> length)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -