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

📄 main.c

📁 linux0.11 version(301k)
💻 C
📖 第 1 页 / 共 2 页
字号:
 <a name=L96 href="source/init/main.c#L96">96</a> } <a name=L97 href="source/init/main.c#L97">97</a>  <a name=L98 href="source/init/main.c#L98">98</a> static long <a href="ident?i=memory_end">memory_end</a> = 0; <a name=L99 href="source/init/main.c#L99">99</a> static long <a href="ident?i=buffer_memory_end">buffer_memory_end</a> = 0;<a name=L100 href="source/init/main.c#L100">100</a> static long <a href="ident?i=main_memory_start">main_memory_start</a> = 0;<a name=L101 href="source/init/main.c#L101">101</a> <a name=L102 href="source/init/main.c#L102">102</a> struct <a href="ident?i=drive_info">drive_info</a> { char dummy[32]; } <a href="ident?i=drive_info">drive_info</a>;<a name=L103 href="source/init/main.c#L103">103</a> <a name=L104 href="source/init/main.c#L104">104</a> void <a href="ident?i=main">main</a>(void)         <b><i>/* This really IS void, no error here. */</i></b><a name=L105 href="source/init/main.c#L105">105</a> {                       <b><i>/* The startup routine assumes (well, ...) this */</i></b><a name=L106 href="source/init/main.c#L106">106</a> <b><i>/*</i></b><a name=L107 href="source/init/main.c#L107">107</a> <b><i> * Interrupts are still disabled. Do necessary setups, then</i></b><a name=L108 href="source/init/main.c#L108">108</a> <b><i> * enable them</i></b><a name=L109 href="source/init/main.c#L109">109</a> <b><i> */</i></b><a name=L110 href="source/init/main.c#L110">110</a>         <a href="ident?i=ROOT_DEV">ROOT_DEV</a> = <a href="ident?i=ORIG_ROOT_DEV">ORIG_ROOT_DEV</a>;<a name=L111 href="source/init/main.c#L111">111</a>         <a href="ident?i=drive_info">drive_info</a> = <a href="ident?i=DRIVE_INFO">DRIVE_INFO</a>;<a name=L112 href="source/init/main.c#L112">112</a>         <a href="ident?i=memory_end">memory_end</a> = (1&lt;&lt;20) + (<a href="ident?i=EXT_MEM_K">EXT_MEM_K</a>&lt;&lt;10);<a name=L113 href="source/init/main.c#L113">113</a>         <a href="ident?i=memory_end">memory_end</a> &amp;= 0xfffff000;<a name=L114 href="source/init/main.c#L114">114</a>         if (<a href="ident?i=memory_end">memory_end</a> &gt; 16*1024*1024)<a name=L115 href="source/init/main.c#L115">115</a>                 <a href="ident?i=memory_end">memory_end</a> = 16*1024*1024;<a name=L116 href="source/init/main.c#L116">116</a>         if (<a href="ident?i=memory_end">memory_end</a> &gt; 12*1024*1024) <a name=L117 href="source/init/main.c#L117">117</a>                 <a href="ident?i=buffer_memory_end">buffer_memory_end</a> = 4*1024*1024;<a name=L118 href="source/init/main.c#L118">118</a>         else if (<a href="ident?i=memory_end">memory_end</a> &gt; 6*1024*1024)<a name=L119 href="source/init/main.c#L119">119</a>                 <a href="ident?i=buffer_memory_end">buffer_memory_end</a> = 2*1024*1024;<a name=L120 href="source/init/main.c#L120">120</a>         else<a name=L121 href="source/init/main.c#L121">121</a>                 <a href="ident?i=buffer_memory_end">buffer_memory_end</a> = 1*1024*1024;<a name=L122 href="source/init/main.c#L122">122</a>         <a href="ident?i=main_memory_start">main_memory_start</a> = <a href="ident?i=buffer_memory_end">buffer_memory_end</a>;<a name=L123 href="source/init/main.c#L123">123</a> #ifdef RAMDISK<a name=L124 href="source/init/main.c#L124">124</a>         <a href="ident?i=main_memory_start">main_memory_start</a> += <a href="ident?i=rd_init">rd_init</a>(<a href="ident?i=main_memory_start">main_memory_start</a>, RAMDISK*1024);<a name=L125 href="source/init/main.c#L125">125</a> #endif<a name=L126 href="source/init/main.c#L126">126</a>         <a href="ident?i=mem_init">mem_init</a>(<a href="ident?i=main_memory_start">main_memory_start</a>,<a href="ident?i=memory_end">memory_end</a>);<a name=L127 href="source/init/main.c#L127">127</a>         <a href="ident?i=trap_init">trap_init</a>();<a name=L128 href="source/init/main.c#L128">128</a>         <a href="ident?i=blk_dev_init">blk_dev_init</a>();<a name=L129 href="source/init/main.c#L129">129</a>         <a href="ident?i=chr_dev_init">chr_dev_init</a>();<a name=L130 href="source/init/main.c#L130">130</a>         <a href="ident?i=tty_init">tty_init</a>();<a name=L131 href="source/init/main.c#L131">131</a>         <a href="ident?i=time_init">time_init</a>();<a name=L132 href="source/init/main.c#L132">132</a>         <a href="ident?i=sched_init">sched_init</a>();<a name=L133 href="source/init/main.c#L133">133</a>         <a href="ident?i=buffer_init">buffer_init</a>(<a href="ident?i=buffer_memory_end">buffer_memory_end</a>);<a name=L134 href="source/init/main.c#L134">134</a>         <a href="ident?i=hd_init">hd_init</a>();<a name=L135 href="source/init/main.c#L135">135</a>         <a href="ident?i=floppy_init">floppy_init</a>();<a name=L136 href="source/init/main.c#L136">136</a>         <a href="ident?i=sti">sti</a>();<a name=L137 href="source/init/main.c#L137">137</a>         <a href="ident?i=move_to_user_mode">move_to_user_mode</a>();<a name=L138 href="source/init/main.c#L138">138</a>         if (!<a href="ident?i=fork">fork</a>()) {          <b><i>/* we count on this going ok */</i></b><a name=L139 href="source/init/main.c#L139">139</a>                 <a href="ident?i=init">init</a>();<a name=L140 href="source/init/main.c#L140">140</a>         }<a name=L141 href="source/init/main.c#L141">141</a> <b><i>/*</i></b><a name=L142 href="source/init/main.c#L142">142</a> <b><i> *   NOTE!!   For any other task 'pause()' would mean we have to get a</i></b><a name=L143 href="source/init/main.c#L143">143</a> <b><i> * signal to awaken, but task0 is the sole exception (see 'schedule()')</i></b><a name=L144 href="source/init/main.c#L144">144</a> <b><i> * as task 0 gets activated at every idle moment (when no other tasks</i></b><a name=L145 href="source/init/main.c#L145">145</a> <b><i> * can run). For task0 'pause()' just means we go check if some other</i></b><a name=L146 href="source/init/main.c#L146">146</a> <b><i> * task can run, and if not we return here.</i></b><a name=L147 href="source/init/main.c#L147">147</a> <b><i> */</i></b><a name=L148 href="source/init/main.c#L148">148</a>         for(;;) <a href="ident?i=pause">pause</a>();<a name=L149 href="source/init/main.c#L149">149</a> }<a name=L150 href="source/init/main.c#L150">150</a> <a name=L151 href="source/init/main.c#L151">151</a> static int <a href="ident?i=printf">printf</a>(const char *fmt, ...)<a name=L152 href="source/init/main.c#L152">152</a> {<a name=L153 href="source/init/main.c#L153">153</a>         <a href="ident?i=va_list">va_list</a> args;<a name=L154 href="source/init/main.c#L154">154</a>         int i;<a name=L155 href="source/init/main.c#L155">155</a> <a name=L156 href="source/init/main.c#L156">156</a>         <a href="ident?i=va_start">va_start</a>(args, fmt);<a name=L157 href="source/init/main.c#L157">157</a>         <a href="ident?i=write">write</a>(1,<a href="ident?i=printbuf">printbuf</a>,i=<a href="ident?i=vsprintf">vsprintf</a>(<a href="ident?i=printbuf">printbuf</a>, fmt, args));<a name=L158 href="source/init/main.c#L158">158</a>         <a href="ident?i=va_end">va_end</a>(args);<a name=L159 href="source/init/main.c#L159">159</a>         return i;<a name=L160 href="source/init/main.c#L160">160</a> }<a name=L161 href="source/init/main.c#L161">161</a> <a name=L162 href="source/init/main.c#L162">162</a> static char * <a href="ident?i=argv_rc">argv_rc</a>[] = { <i>"/bin/sh"</i>, <a href="ident?i=NULL">NULL</a> };<a name=L163 href="source/init/main.c#L163">163</a> static char * <a href="ident?i=envp_rc">envp_rc</a>[] = { <i>"HOME=/"</i>, <a href="ident?i=NULL">NULL</a> };<a name=L164 href="source/init/main.c#L164">164</a> <a name=L165 href="source/init/main.c#L165">165</a> static char * <a href="ident?i=argv">argv</a>[] = { <i>"-/bin/sh"</i>,<a href="ident?i=NULL">NULL</a> };<a name=L166 href="source/init/main.c#L166">166</a> static char * <a href="ident?i=envp">envp</a>[] = { <i>"HOME=/usr/root"</i>, <a href="ident?i=NULL">NULL</a> };<a name=L167 href="source/init/main.c#L167">167</a> <a name=L168 href="source/init/main.c#L168">168</a> void <a href="ident?i=init">init</a>(void)<a name=L169 href="source/init/main.c#L169">169</a> {<a name=L170 href="source/init/main.c#L170">170</a>         int pid,i;<a name=L171 href="source/init/main.c#L171">171</a> <a name=L172 href="source/init/main.c#L172">172</a>         setup((void *) &amp;<a href="ident?i=drive_info">drive_info</a>);<a name=L173 href="source/init/main.c#L173">173</a>         (void) <a href="ident?i=open">open</a>(<i>"/dev/tty0"</i>,<a href="ident?i=O_RDWR">O_RDWR</a>,0);<a name=L174 href="source/init/main.c#L174">174</a>         (void) <a href="ident?i=dup">dup</a>(0);<a name=L175 href="source/init/main.c#L175">175</a>         (void) <a href="ident?i=dup">dup</a>(0);<a name=L176 href="source/init/main.c#L176">176</a>         <a href="ident?i=printf">printf</a>(<i>"%d buffers = %d bytes buffer space\n\r"</i>,<a href="ident?i=NR_BUFFERS">NR_BUFFERS</a>,<a name=L177 href="source/init/main.c#L177">177</a>                 <a href="ident?i=NR_BUFFERS">NR_BUFFERS</a>*<a href="ident?i=BLOCK_SIZE">BLOCK_SIZE</a>);<a name=L178 href="source/init/main.c#L178">178</a>         <a href="ident?i=printf">printf</a>(<i>"Free mem: %d bytes\n\r"</i>,<a href="ident?i=memory_end">memory_end</a>-<a href="ident?i=main_memory_start">main_memory_start</a>);<a name=L179 href="source/init/main.c#L179">179</a>         if (!(pid=<a href="ident?i=fork">fork</a>())) {<a name=L180 href="source/init/main.c#L180">180</a>                 <a href="ident?i=close">close</a>(0);<a name=L181 href="source/init/main.c#L181">181</a>                 if (<a href="ident?i=open">open</a>(<i>"/etc/rc"</i>,<a href="ident?i=O_RDONLY">O_RDONLY</a>,0))<a name=L182 href="source/init/main.c#L182">182</a>                         <a href="ident?i=_exit">_exit</a>(1);<a name=L183 href="source/init/main.c#L183">183</a>                 <a href="ident?i=execve">execve</a>(<i>"/bin/sh"</i>,<a href="ident?i=argv_rc">argv_rc</a>,<a href="ident?i=envp_rc">envp_rc</a>);<a name=L184 href="source/init/main.c#L184">184</a>                 <a href="ident?i=_exit">_exit</a>(2);<a name=L185 href="source/init/main.c#L185">185</a>         }<a name=L186 href="source/init/main.c#L186">186</a>         if (pid&gt;0)<a name=L187 href="source/init/main.c#L187">187</a>                 while (pid != <a href="ident?i=wait">wait</a>(&amp;i))<a name=L188 href="source/init/main.c#L188">188</a>                         <b><i>/* nothing */</i></b>;<a name=L189 href="source/init/main.c#L189">189</a>         while (1) {<a name=L190 href="source/init/main.c#L190">190</a>                 if ((pid=<a href="ident?i=fork">fork</a>())&lt;0) {<a name=L191 href="source/init/main.c#L191">191</a>                         <a href="ident?i=printf">printf</a>(<i>"Fork failed in init\r\n"</i>);<a name=L192 href="source/init/main.c#L192">192</a>                         continue;<a name=L193 href="source/init/main.c#L193">193</a>                 }<a name=L194 href="source/init/main.c#L194">194</a>                 if (!pid) {<a name=L195 href="source/init/main.c#L195">195</a>                         <a href="ident?i=close">close</a>(0);<a href="ident?i=close">close</a>(1);<a href="ident?i=close">close</a>(2);<a name=L196 href="source/init/main.c#L196">196</a>                         <a href="ident?i=setsid">setsid</a>();<a name=L197 href="source/init/main.c#L197">197</a>                         (void) <a href="ident?i=open">open</a>(<i>"/dev/tty0"</i>,<a href="ident?i=O_RDWR">O_RDWR</a>,0);<a name=L198 href="source/init/main.c#L198">198</a>                         (void) <a href="ident?i=dup">dup</a>(0);<a name=L199 href="source/init/main.c#L199">199</a>                         (void) <a href="ident?i=dup">dup</a>(0);<a name=L200 href="source/init/main.c#L200">200</a>                         <a href="ident?i=_exit">_exit</a>(<a href="ident?i=execve">execve</a>(<i>"/bin/sh"</i>,<a href="ident?i=argv">argv</a>,<a href="ident?i=envp">envp</a>));<a name=L201 href="source/init/main.c#L201">201</a>                 }<a name=L202 href="source/init/main.c#L202">202</a>                 while (1)<a name=L203 href="source/init/main.c#L203">203</a>                         if (pid == <a href="ident?i=wait">wait</a>(&amp;i))<a name=L204 href="source/init/main.c#L204">204</a>                                 break;<a name=L205 href="source/init/main.c#L205">205</a>                 <a href="ident?i=printf">printf</a>(<i>"\n\rchild %d died with code %04x\n\r"</i>,pid,i);<a name=L206 href="source/init/main.c#L206">206</a>                 <a href="ident?i=sync">sync</a>();<a name=L207 href="source/init/main.c#L207">207</a>         }<a name=L208 href="source/init/main.c#L208">208</a>         <a href="ident?i=_exit">_exit</a>(0);       <b><i>/* NOTE! _exit, not exit() */</i></b><a name=L209 href="source/init/main.c#L209">209</a> }<a name=L210 href="source/init/main.c#L210">210</a> </pre><hr><div align=center>   [<b><i>源代码浏览</i></b>] [<a href="diff/init/main.c">区别标定</a>] [<a href="ident">标识符搜索</a>] [<a href="search">文本搜索</a>] [<a href="find">文件搜索</a>] </div><hr>本网页由 <a href="http:blurb.html">LXR引擎</a> 自动生成.<br></html>

⌨️ 快捷键说明

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