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

📄 59.html

📁 linux 0.11中文版 有注释
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name='L79'><font color='red'>{</font>
<a name='L80'>  <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>;
<a name='L81'>  <b>char</b> *cp;
<a name='L82'>
<a name='L83'>  blk_dev[<a href='../D/225.html' title='Multiple defined in 3 places.'>MAJOR_NR</a>].request_fn = <a href='../D/66.html' title='Multiple defined in 3 places.'>DEVICE_REQUEST</a>;        <i><font color='green'>// do_rd_request()。</font></i>
<a name='L84'>  rd_start = (<b>char</b> *) mem_start;
<a name='L85'>  rd_length = length;
<a name='L86'>  cp = rd_start;
<a name='L87'>  <b>for</b> (<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = 0; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> &lt; length; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++)
<a name='L88'>    *cp++ = '\0';
<a name='L89'>  <b>return</b> (length);
<a name='L90'><font color='red'>}</font>
<a name='L91'>
<a name='L92'><i><font color='green'>/*</font></i>
<a name='L93'><i><font color='green'>* If the root device is the ram disk, try to load it.</font></i>
<a name='L94'><i><font color='green'>* In order to do this, the root device is originally set to the</font></i>
<a name='L95'><i><font color='green'>* floppy, and we later change it to be ram disk.</font></i>
<a name='L96'><i><font color='green'>*/</font></i>
<a name='L97'><i><font color='green'>/*</font></i>
<a name='L98'><i><font color='green'>* 如果根文件系统设备(root device)是ramdisk 的话,则尝试加载它。root device 原先是指向</font></i>
<a name='L99'><i><font color='green'>* 软盘的,我们将它改成指向ramdisk。</font></i>
<a name='L100'><i><font color='green'>*/</font></i>
<a name='L101'><i><font color='green'>//// 加载根文件系统到ramdisk。</font></i>
<a name='L102'><b>void</b>
<a name='L103'><a href='../R/561.html' title='Multiple refered from 2 places.'>rd_load</a> (<b>void</b>)
<a name='L104'><font color='red'>{</font>
<a name='L105'>  <b>struct</b> buffer_head *bh;
<a name='L106'>  <b>struct</b> super_block s;
<a name='L107'>  <b>int</b> block = 256;              <i><font color='green'>/* Start at block 256 */</font></i>
<a name='L108'>  <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = 1;
<a name='L109'>  <b>int</b> nblocks;
<a name='L110'>  <b>char</b> *cp;                     <i><font color='green'>/* Move pointer */</font></i>
<a name='L111'>
<a name='L112'>  <b>if</b> (!rd_length)               <i><font color='green'>// 如果ramdisk 的长度为零,则退出。</font></i>
<a name='L113'>    <b>return</b>;
<a name='L114'>  <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("Ram disk: %d bytes, starting at 0x%x\n", rd_length, (<b>int</b>) rd_start); <i><font color='green'>// 显示ramdisk 的大小以及内存起始位置。</font></i>
<a name='L115'>  <b>if</b> (<a href='../S/31.html#L49' title='Defined at 49 in include/linux/fs.h.'>MAJOR</a> (ROOT_DEV) != 2)    <i><font color='green'>// 如果此时根文件设备不是软盘,则退出。</font></i>
<a name='L116'>    <b>return</b>;
<a name='L117'><i><font color='green'>// 读软盘块256+1,256,256+2。breada()用于读取指定的数据块,并标出还需要读的块,然后返回</font></i>
<a name='L118'><i><font color='green'>// 含有数据块的缓冲区指针。如果返回NULL,则表示数据块不可读(fs/buffer.c,322)。</font></i>
<a name='L119'><i><font color='green'>// 这里block+1 是指磁盘上的超级块。</font></i>
<a name='L120'>  bh = <a href='../S/6.html#L478' title='Defined at 478 in fs/buffer.c.'>breada</a> (ROOT_DEV, block + 1, block, block + 2, -1);
<a name='L121'>  <b>if</b> (!bh)
<a name='L122'>    <font color='red'>{</font>
<a name='L123'>      <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("Disk error while looking for ramdisk!\n");
<a name='L124'>      <b>return</b>;
<a name='L125'>    <font color='red'>}</font>
<a name='L126'><i><font color='green'>// 将s 指向缓冲区中的磁盘超级块。(d_super_block 磁盘中超级块结构)。</font></i>
<a name='L127'>  *((<b>struct</b> d_super_block *) &amp;s) = *((<b>struct</b> d_super_block *) bh-&gt;b_data);
<a name='L128'>  <a href='../S/6.html#L377' title='Defined at 377 in fs/buffer.c.'>brelse</a> (bh);                  <i><font color='green'>// [?? 为什么数据没有复制就立刻释放呢?]</font></i>
<a name='L129'>  <b>if</b> (s.s_magic != <a href='../S/31.html#L57' title='Defined at 57 in include/linux/fs.h.'>SUPER_MAGIC</a>) <i><font color='green'>// 如果超级块中魔数不对,则说明不是minix 文件系统。</font></i>
<a name='L130'><i><font color='green'>/* No ram disk image present, assume normal floppy boot */</font></i>
<a name='L131'><i><font color='green'>/* 磁盘中没有ramdisk 映像文件,退出执行通常的软盘引导 */</font></i>
<a name='L132'>    <b>return</b>;
<a name='L133'><i><font color='green'>// 块数 = 逻辑块数(区段数) * 2^(每区段块数的次方)。</font></i>
<a name='L134'><i><font color='green'>// 如果数据块数大于内存中虚拟盘所能容纳的块数,则不能加载,显示出错信息并返回。否则显示</font></i>
<a name='L135'><i><font color='green'>// 加载数据块信息。</font></i>
<a name='L136'>  nblocks = s.s_nzones &lt;&lt; s.s_log_zone_size;
<a name='L137'>  <b>if</b> (nblocks &gt; (rd_length &gt;&gt; <a href='../S/31.html#L66' title='Defined at 66 in include/linux/fs.h.'>BLOCK_SIZE_BITS</a>))
<a name='L138'>    <font color='red'>{</font>
<a name='L139'>      <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("Ram disk image too big! (%d blocks, %d avail)\n",
<a name='L140'>              nblocks, rd_length &gt;&gt; <a href='../S/31.html#L66' title='Defined at 66 in include/linux/fs.h.'>BLOCK_SIZE_BITS</a>);
<a name='L141'>      <b>return</b>;
<a name='L142'>    <font color='red'>}</font>
<a name='L143'>  <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("Loading %d bytes into ram disk... 0000k",
<a name='L144'>          nblocks &lt;&lt; <a href='../S/31.html#L66' title='Defined at 66 in include/linux/fs.h.'>BLOCK_SIZE_BITS</a>);
<a name='L145'><i><font color='green'>// cp 指向虚拟盘起始处,然后将磁盘上的根文件系统映象文件复制到虚拟盘上。</font></i>
<a name='L146'>  cp = rd_start;
<a name='L147'>  <b>while</b> (nblocks)
<a name='L148'>    <font color='red'>{</font>
<a name='L149'>      <b>if</b> (nblocks &gt; 2)          <i><font color='green'>// 如果需读取的块数多于3 快则采用超前预读方式读数据块。</font></i>
<a name='L150'>        bh = <a href='../S/6.html#L478' title='Defined at 478 in fs/buffer.c.'>breada</a> (ROOT_DEV, block, block + 1, block + 2, -1);
<a name='L151'>      <b>else</b>                      <i><font color='green'>// 否则就单块读取。</font></i>
<a name='L152'>        bh = <a href='../S/6.html#L397' title='Defined at 397 in fs/buffer.c.'>bread</a> (ROOT_DEV, block);
<a name='L153'>      <b>if</b> (!bh)
<a name='L154'>        <font color='red'>{</font>
<a name='L155'>          <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("I/O error on block %d, aborting load\n", block);
<a name='L156'>          <b>return</b>;
<a name='L157'>        <font color='red'>}</font>
<a name='L158'>      (<b>void</b>) <a href='../D/889.html' title='Multiple defined in 2 places.'>memcpy</a> (cp, bh-&gt;b_data, <a href='../D/23.html' title='Multiple defined in 2 places.'>BLOCK_SIZE</a>);       <i><font color='green'>// 将缓冲区中的数据复制到cp 处。</font></i>
<a name='L159'>      <a href='../S/6.html#L377' title='Defined at 377 in fs/buffer.c.'>brelse</a> (bh);              <i><font color='green'>// 释放缓冲区。</font></i>
<a name='L160'>      <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("\010\010\010\010\010%4dk", <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>);   <i><font color='green'>// 打印加载块计数值。</font></i>
<a name='L161'>      cp += <a href='../D/23.html' title='Multiple defined in 2 places.'>BLOCK_SIZE</a>;         <i><font color='green'>// 虚拟盘指针前移。</font></i>
<a name='L162'>      block++;
<a name='L163'>      nblocks--;
<a name='L164'>      <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++;
<a name='L165'>    <font color='red'>}</font>
<a name='L166'>  <a href='../S/73.html#L30' title='Defined at 30 in kernel/printk.c.'>printk</a> ("\010\010\010\010\010done \n");
<a name='L167'>  ROOT_DEV = 0x0101;            <i><font color='green'>// 修改ROOT_DEV 使其指向虚拟盘ramdisk。</font></i>
<a name='L168'><font color='red'>}</font>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L37'>[^]</a><a href='#L103'>[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 + -