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

📄 96.html

📁 linux 0.11中文版 有注释
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html>
<head>
<title>tools/build.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/110.html'>tools</a>/build.c</h2>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L63'>[^]</a><a href='#L77'>[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='#L63' title='Defined at 63.'>die</a>
<li><a href='#L71' title='Defined at 71.'>usage</a>
<li><a href='#L77' title='Defined at 77.'>main</a>
</ol>
<hr>
<pre>
<a name='L1'><i><font color='green'>/*</font></i>
<a name='L2'><i><font color='green'>* linux/tools/build.c</font></i>
<a name='L3'><i><font color='green'>*</font></i>
<a name='L4'><i><font color='green'>* (C) 1991 Linus Torvalds</font></i>
<a name='L5'><i><font color='green'>*/</font></i>
<a name='L6'>
<a name='L7'><i><font color='green'>/*</font></i>
<a name='L8'><i><font color='green'>* This file builds a disk-image from three different files:</font></i>
<a name='L9'><i><font color='green'>*</font></i>
<a name='L10'><i><font color='green'>* - bootsect: max 510 bytes of 8086 machine code, loads the rest</font></i>
<a name='L11'><i><font color='green'>* - setup: max 4 sectors of 8086 machine code, sets up system parm</font></i>
<a name='L12'><i><font color='green'>* - system: 80386 code for actual system</font></i>
<a name='L13'><i><font color='green'>*</font></i>
<a name='L14'><i><font color='green'>* It does some checking that all files are of the correct type, and</font></i>
<a name='L15'><i><font color='green'>* just writes the result to stdout, removing headers and padding to</font></i>
<a name='L16'><i><font color='green'>* the right amount. It also writes some system data to stderr.</font></i>
<a name='L17'><i><font color='green'>*/</font></i>
<a name='L18'><i><font color='green'>/*</font></i>
<a name='L19'><i><font color='green'>* 该程序从三个不同的程序中创建磁盘映象文件:</font></i>
<a name='L20'><i><font color='green'>*</font></i>
<a name='L21'><i><font color='green'>* - bootsect:该文件的8086 机器码最长为510 字节,用于加载其它程序。</font></i>
<a name='L22'><i><font color='green'>* - setup:该文件的8086 机器码最长为4 个磁盘扇区,用于设置系统参数。</font></i>
<a name='L23'><i><font color='green'>* - system:实际系统的80386 代码。</font></i>
<a name='L24'><i><font color='green'>*</font></i>
<a name='L25'><i><font color='green'>* 该程序首先检查所有程序模块的类型是否正确,并将检查结果在终端上显示出来,</font></i>
<a name='L26'><i><font color='green'>* 然后删除模块头部并扩充大正确的长度。该程序也会将一些系统数据写到stderr。</font></i>
<a name='L27'><i><font color='green'>*/</font></i>
<a name='L28'>
<a name='L29'><i><font color='green'>/*</font></i>
<a name='L30'><i><font color='green'>* Changes by tytso to allow root device specification</font></i>
<a name='L31'><i><font color='green'>*/</font></i>
<a name='L32'><i><font color='green'>/*</font></i>
<a name='L33'><i><font color='green'>* tytso 对该程序作了修改,以允许指定根文件设备。</font></i>
<a name='L34'><i><font color='green'>*/</font></i>
<a name='L35'>
<a name='L36'><font color='darkred'>#include</font> &lt;stdio.h&gt; <i><font color='green'>/* fprintf */</font></i>        <i><font color='green'>/* 使用其中的fprintf() */</font></i>
<a name='L37'><font color='darkred'>#include</font> &lt;<a href='42.html'>string.h</a>&gt;             <i><font color='green'>/* 字符串操作 */</font></i>
<a name='L38'><font color='darkred'>#include</font> &lt;stdlib.h&gt; <i><font color='green'>/* contains exit */</font></i> <i><font color='green'>/* 含有exit() */</font></i>
<a name='L39'><font color='darkred'>#include</font> &lt;<a href='45.html'>sys/types.h</a>&gt; <i><font color='green'>/* unistd.h needs this */</font></i>        <i><font color='green'>/* 供unistd.h 使用 */</font></i>
<a name='L40'><font color='darkred'>#include</font> &lt;<a href='43.html'>sys/stat.h</a>&gt;           <i><font color='green'>/* 文件状态信息结构 */</font></i>
<a name='L41'><font color='darkred'>#include</font> &lt;<a href='31.html'>linux/fs.h</a>&gt;           <i><font color='green'>/* 文件系统 */</font></i>
<a name='L42'><font color='darkred'>#include</font> &lt;<a href='50.html'>unistd.h</a>&gt; <i><font color='green'>/* contains read/write */</font></i>   <i><font color='green'>/* 含有read()/write() */</font></i>
<a name='L43'><font color='darkred'>#include</font> &lt;<a href='29.html'>fcntl.h</a>&gt;              <i><font color='green'>/* 文件操作模式符号常数 */</font></i>
<a name='L44'>
<a name='L45'><font color='darkred'>#define</font> <a href='../R/130.html' title='Multiple refered from 4 places.'>MINIX_HEADER</a> 32         <i><font color='green'>// minix 二进制模块头部长度为32 字节。</font></i>
<a name='L46'><font color='darkred'>#define</font> <a href='../S/96.html#L225' title='Refered from 225 in tools/build.c.'>GCC_HEADER</a> 1024         <i><font color='green'>// GCC 头部信息长度为1024 字节。</font></i>
<a name='L47'>
<a name='L48'><font color='darkred'>#define</font> <a href='../S/96.html#L238' title='Refered from 238 in tools/build.c.'>SYS_SIZE</a> 0x2000         <i><font color='green'>// system 文件最长节数(字节数为SYS_SIZE*16=128KB)。</font></i>
<a name='L49'>
<a name='L50'>
<a name='L51'><font color='darkred'>#define</font> <a href='../S/96.html#L112' title='Refered from 112 in tools/build.c.'>DEFAULT_MAJOR_ROOT</a> 3    <i><font color='green'>// 默认根设备主设备号 - 3(硬盘)。</font></i>
<a name='L52'><font color='darkred'>#define</font> <a href='../S/96.html#L113' title='Refered from 113 in tools/build.c.'>DEFAULT_MINOR_ROOT</a> 6    <i><font color='green'>// 默认根设备次设备号 - 6(第2 个硬盘的第1 分区)。</font></i>
<a name='L53'>
<a name='L54'><i><font color='green'>/* max nr of sectors of setup: don't change unless you also change</font></i>
<a name='L55'><i><font color='green'>* bootsect etc */</font></i>
<a name='L56'><i><font color='green'>/* 下面指定setup 模块占的最大扇区数:不要改变该值,除非也改变bootsect 等相应文件。</font></i>
<a name='L57'><i><font color='green'>#define SETUP_SECTS 4 // setup 最大长度为4 个扇区(4*512 字节)。</font></i>
<a name='L58'><i><font color='green'>*/</font></i>
<a name='L59'><font color='darkred'>#define</font> <a href='../S/96.html#L202' title='Refered from 202 in tools/build.c.'>STRINGIFY</a>(x) #x         <i><font color='green'>// 用于出错时显示语句中表示扇区数。</font></i>
<a name='L60'>
<a name='L61'><i><font color='green'>//// 显示出错信息,并终止程序。</font></i>
<a name='L62'><b>void</b>
<a name='L63'><a href='../R/433.html' title='Multiple refered from 45 places.'>die</a> (<b>char</b> *str)
<a name='L64'><font color='red'>{</font>
<a name='L65'>  fprintf (stderr, "%s\n", <a href='../S/36.html#L267' title='Defined at 267 in include/linux/sched.h.'>str</a>);
<a name='L66'>  exit (1);
<a name='L67'><font color='red'>}</font>
<a name='L68'>
<a name='L69'><i><font color='green'>// 显示程序使用方法,并退出。</font></i>
<a name='L70'><b>void</b>
<a name='L71'><a href='../S/96.html#L86' title='Refered from 86 in tools/build.c.'>usage</a> (<b>void</b>)
<a name='L72'><font color='red'>{</font>
<a name='L73'>  <a href='../D/757.html' title='Multiple defined in 2 places.'>die</a> ("Usage: build bootsect setup system [rootdev] [&gt; image]");
<a name='L74'><font color='red'>}</font>
<a name='L75'>
<a name='L76'><b>int</b>
<a name='L77'>main (<b>int</b> argc, <b>char</b> **argv)
<a name='L78'><font color='red'>{</font>
<a name='L79'>  <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>, c, id;
<a name='L80'>  <b>char</b> <a href='../D/716.html' title='Multiple defined in 16 places.'>buf</a>[1024];
<a name='L81'>  <b>char</b> major_root, minor_root;
<a name='L82'>  <b>struct</b> stat sb;
<a name='L83'>
<a name='L84'><i><font color='green'>// 如果程序命令行参数不是4 或5 个,则显示程序用法并退出。</font></i>
<a name='L85'>  <b>if</b> ((argc != 4) &amp;&amp; (argc != 5))
<a name='L86'>    <a href='../S/96.html#L71' title='Defined at 71 in tools/build.c.'>usage</a> ();
<a name='L87'><i><font color='green'>// 如果参数是5 个,则说明带有根设备名。</font></i>
<a name='L88'>  <b>if</b> (argc == 5)
<a name='L89'>    <font color='red'>{</font>
<a name='L90'><i><font color='green'>// 如果根设备名是软盘("FLOPPY"),则取该设备文件的状态信息,若出错则显示信息,退出。</font></i>
<a name='L91'>      <b>if</b> (<a href='../S/42.html#L119' title='Defined at 119 in include/string.h.'>strcmp</a> (argv[4], "FLOPPY"))
<a name='L92'>        <font color='red'>{</font>
<a name='L93'>          <b>if</b> (stat (argv[4], &amp;sb))
<a name='L94'>            <font color='red'>{</font>
<a name='L95'>              perror (argv[4]);
<a name='L96'>              <a href='../D/757.html' title='Multiple defined in 2 places.'>die</a> ("Couldn't stat root device.");
<a name='L97'>            <font color='red'>}</font>
<a name='L98'><i><font color='green'>// 若成功则取该设备名状态结构中的主设备号和次设备号。</font></i>
<a name='L99'>          major_root = <a href='../S/31.html#L49' title='Defined at 49 in include/linux/fs.h.'>MAJOR</a> (sb.st_rdev);
<a name='L100'>          minor_root = <a href='../D/238.html' title='Multiple defined in 2 places.'>MINOR</a> (sb.st_rdev);
<a name='L101'>        <font color='red'>}</font>
<a name='L102'>      <b>else</b>
<a name='L103'>        <font color='red'>{</font>
<a name='L104'><i><font color='green'>// 否则让主设备号和次设备号取0。</font></i>
<a name='L105'>          major_root = 0;
<a name='L106'>          minor_root = 0;
<a name='L107'>        <font color='red'>}</font>
<a name='L108'><i><font color='green'>// 若参数只有4 个,则让主设备号和次设备号等于系统默认的根设备。</font></i>
<a name='L109'>    <font color='red'>}</font>
<a name='L110'>  <b>else</b>
<a name='L111'>    <font color='red'>{</font>
<a name='L112'>      major_root = <a href='../S/96.html#L51' title='Defined at 51 in tools/build.c.'>DEFAULT_MAJOR_ROOT</a>;
<a name='L113'>      minor_root = <a href='../S/96.html#L52' title='Defined at 52 in tools/build.c.'>DEFAULT_MINOR_ROOT</a>;
<a name='L114'>
<a name='L115'>    <font color='red'>}</font>

⌨️ 快捷键说明

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