BabyLinux操作系统的制作过程讲解(2)

Linux系统内核被引导程序装入内核并运行后,linux内核会检测系统中的各种硬件。并做好各种硬件的初始化工作,使他们在系统正式运行后能正常工作。之后内核做的最后一个工作是运行

/sbin下的init程序,init是英文单词initialization(初始化)的简称,init程序的工作是读取/etc/inittab文件中描述的指令,对系统的各种软硬件环境做最初化设定。最后运行mingetty等待用户输入用户名登录系统。所有的工作就这么简单,虽然linux启动的时候有很多内容,看上去十分高深,但是都不过是对这个过程的扩充。明白了这个道理,你可以写一些脚本程序让他在系统启动的特定时间运行完成任务。事实上系统内核并不关心/sbin下的init是不是真的init,只要是放在/sbin下名叫init的可执行程序他都可以执行。可以做以下实验:

编写一个非常简单的C程序:

main() { printf(“hello,world!\n”); }  

保存后以init.c保存他,并用gcc编译。

#gcc –-static -o init init.c  

这里的--static 参数告诉gcc把这个程序静态联接,这样这个程序不倚赖任何库就能运行。把编译好的init程序拷贝到/sbin下,备份好原来的那个。重新启动系统最后系统的输出结果是: hello,world!

然后停在那里。做这个实验以前先确定你知道如何把系统恢复到原来的状态,有一个简单的方法,在内核启动前给他加上init=参数,比如你原先的init被你改成了init。bak 只要在启动的时候给内核加上init=/sbin/init。bak就可以用原来的init程序启动系统。

做完以上实验,就明白了内核和init程序之间的关系。此外,init程序不一定是一个二进制可执行程序,他可以是一个bash脚本,一个指向另一个程序的联接,他的位置也并不一定要在/sbin下,只要在启动内核时,给内核加上init参数就能被运行,比如,开始时给内核加上init=/bin/bash参数,内核在最后一步就直接运行bash给出提示符,不用登录系统就可以输入命令了。其功能类似单用户模式启动系统。 /sbin/init 程序只是内核默认运行的第一个程序。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6aea3bbd69007b7e1283dfcc33c95c35.html