为了避免落入俗套,我们先把这个系列分为两个部分,根据情况平行展开,类似于信号与系统教学里边同时开讲数字信号和模拟信号一样,而不是一开始讲硬件,bootloader,内核,驱动,文件系统,图形引擎之类的。最简单的就是以内核启动完成作为分界,启动之前是一个部分,启动之后是一个部分,我们先讲启动之后。
内核自行启动之后,包括被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程,其进程编号始终为1。说白了init是所有linux用户进程的祖宗,因为linux进程的产生必须是父生子,所以init会产生第一级子进程,然后再由这些子进程产生很多各自的子进程...具体说明可以参考:
http://linux.about.com/od/commands/l/blcmdl8_init.htm
内核会在过去曾使用过init的几个地方查找,它的正确位置是/sbin/init,很多嵌入式linux会用busybox集成好的init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
init进程有个重要的配置文件,一般都是/etc/inittab,这个文件会指定init启动哪些服务, inittab文件格式如下:
id:runlevels:action:process
这里说几个嵌入式系统里边用到的几个action
sysinit: 系统初始化,一般选/etc/rc.sysinit脚本,老的redhat系统会用,现在新的fedora都不用了
respawn: 无论何时程序退出后