📄 00000022.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: chenl (bigmouth), 信区: Linux <BR>标 题: Re: Linux 核心启动过程一览 <BR>发信站: BBS 水木清华站 (Thu May 6 08:20:53 1999) <BR> <BR>【 在 vertex (lancelord) 的大作中提到: 】 <BR>∶<I> 发信人: vertex (lacelord), 信区: Linux </I><BR>∶<I> 标 题: Linux 启动信息 </I><BR>∶<I> 发信站: 9781 BBS (Tue May 4 10:26:21 1999), 转信 </I><BR>∶<I> /* </I><BR>∶<I> 本文参考了 </I><BR>∶<I> <A HREF="http://gem.ncic.ac.cn/~xhg/khg/HyperNews/get/tour/tour.html">http://gem.ncic.ac.cn/~xhg/khg/HyperNews/get/tour/tour.html</A> </I><BR>∶<I> 欢迎指正. </I><BR>∶<I> ------------------------------------------------------------------- </I><BR>∶<I> 用dmesg命令可以看到linux启动打出的消息. </I><BR>∶<I> 从这可以看到linux启动的过程. </I><BR>∶<I> 主要的源文件 </I><BR>∶<I> 可以到 <A HREF="http://gem.ncic.ac.cn/lance/lxr/source/init/main.c">http://gem.ncic.ac.cn/lance/lxr/source/init/main.c</A> </I><BR>∶<I> */ </I><BR>∶<I> -------------------------------------------------------------------- </I><BR>∶<I> /** </I><BR>∶<I> 内核的启动最后是到 start_kernel ( in /init/main.c ) </I><BR>∶<I> head.S --> main.c(start_kernel) .. </I><BR>∶<I> 建议每个人都读一下 main.c ( init/ ) </I><BR>∶<I> 有空可以读 head.S ( arch/i386/boot/ ) </I><BR>∶<I> **/ </I><BR>∶<I> /** </I><BR>∶<I> 第一部分 : 内核初始化以及启动. </I><BR>∶<I> **/ </I><BR>∶<I> Loading ....[ bootsect.S ] </I><BR>∶<I> uncompress .....[ decompress_kernel() ] </I><BR>∶<I> /* </I><BR>∶<I> * main.c ---> start_kernel() 开始. </I><BR>∶<I> * </I><BR>∶<I> * 开始 printk(banner); </I><BR>∶<I> */ </I><BR>∶<I> Linux version 2.2.6 (root@lance) (gcc version 2.7.2.3) </I><BR>∶<I> #40 Sun Apr 18 17:44:20 CST 1999 </I><BR>∶<I> /* 以下是 /arch/i386/time.c 中 init_time() 打出的信息 */齱 </I><BR>∶<I> Detected 199908264 Hz processor. </I><BR>∶<I> /* console_init() --> drivers/char/tty_io.c */ </I><BR>∶<I> Console: colour VGA+ 80x25 </I><BR>∶<I> /*运行一个循环,测量一下 MIPS -- 为什么要干这件傻事??*/齱 </I><BR>∶<I> /* 我知道了 ... 这是因为内核需要知道一个确定的机器指令周期来实现实时的延迟. </I><BR>∶<I> 为什么要打印出来 ?? 这有两个原因 : </I><BR>∶<I> 1 . 用于 DEBUG . </I><BR>∶<I> 2 . 搞笑用途 , Linus Torvalds 每每看见用户对此疑惑不解时,总是 </I><BR>∶<I> 大笑....:-(( </I><BR>∶<I> */ </I><BR>∶<I> Calibrating delay loop... 199.48 BogoMIPS </I><BR>∶<I> /* init_mem */ </I><BR>∶<I> Memory: 63396k/65536k available (848k kernel code, 408k reserved, 856k data, 28k </I><BR>∶<I> /** dquote_init() **/ </I><BR>∶<I> VFS: Diskquotas version dquot_6.4.0 initialized </I><BR>∶<I> /* ?????????? **/ </I><BR>∶<I> CPU: Intel Pentium Pro stepping 09 </I><BR>∶<I> Checking 386/387 coupling... OK, FPU using exception 16 error reporting. </I><BR>∶<I> Checking 'hlt' instruction... OK. </I><BR>∶<I> POSIX conformance testing by UNIFIX </I><BR>∶<I> /** </I><BR>∶<I> 此后调用 linux_thread(init ,..,..,)(arch/i386/kernel/process.c) </I><BR>∶<I> 创建一个运行 init 的进程. </I><BR>∶<I> 从此...开始了一个新的阶段 : </I><BR>∶<I> 进入了用户模式 ( user_mode) ,跳到以下第二部分.----+ </I><BR> <BR> ^^^^^^^^^^^^^^^ <BR> 这个地方值得讨论,我从程序上及从实际跟踪的情况看, kernel_thread <BR> 都不是用户模式,而是地道理的核心态!真正系统的第一个用户态进程是 <BR> 执行了fork之后的/sbin/init. <BR> <BR>∶<I> | </I><BR>∶<I> | </I><BR>∶<I> End of start_kernel | </I><BR>∶<I> | </I><BR>∶<I> 最后进入cpu_idle ( arch/i386/kernel/process.c ) | </I><BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -