Chinaunix首页 | 论坛 | 博客

OS

  • 博客访问: 2280772
  • 博文数量: 691
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2660
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-05 12:49
个人简介

不浮躁

文章分类

全部博文(691)

文章存档

2019年(1)

2017年(12)

2016年(99)

2015年(207)

2014年(372)

分类: LINUX

2014-12-09 20:51:54

原文地址:busybox的init程序分析 作者:xutianxi

BusyBox init进程依次进行以下工作:

1)为init设置信号处理进程。

2)初始化控制台。

3)解析inittab文件(/etc/inittab)。

4)执行系统初始化脚本(/etc/init.d/rcS作为缺省)。

5)执行所有阻塞的(会导致init暂停的)inittab命令(动作类型:wait)。

6)执行所有仅执行一次的inittab命令(动作类型:once)。

7)一旦完成以上工作,init进程便会循环执行以下工作:

8)执行所有终止时必须重新启动的inittab命令(动作类型:respawn)。

9)执行所有中止时必须重新启动但启动前必须前询问用户的inittab命令(动作类 型:askfirst)。

其中,inittab文件的每一行的格式为:id:runlevel:action:processprocess字段用来指定所执行程序的路径, 包括命令行选项。action字段用来指定可应用到process的动作。BusyBox init能够识别的inittab动作类型如下表所示:

动作

结果

sysinit

init提供初始化命令行的路径

respawn

每当相应的进程终止执行便重新启动

askfirst

类似respawn,不过它的主要用途是减少系统上执行 的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to activate this console.”的信息,并在重新启动进程之前等待用户按下Enter

wait

告诉init必须等到相应的进程完成才能继续执行

once

仅执行相应的进程一次,而且不会等待它完成

ctrlaltdel

当按下Ctrl-Alt-Delete组合键时,执行相 应的进程

shutdown

当系统关机时,执行相应的进程

restart

init重新启动时,执行相应的进程。通常此处所执行 的进程就是init本身

下面就是一个典型的嵌入式busyboxinittab文件的例子:

 

可见busybox分析完inittab脚本中会执行rcS脚本,下面就是一个rcS脚本的例子:

echo "export system param...."
export PATH=/sbin:/bin:
export HOSTNAME=micro2440

echo "init ip address....."
/sbin/ifconfig eth0 192.168.254.177

echo "Mount all filesystems (of the given types) mentioned in fstab."
mount –a

其中mount –a会加载文件/etc/fstab文件中的选项,这个目录的编写主要是安排哪些目录挂载哪些次级文件系统:例如:

proc           /proc        proc   defaults        0     0
tmpfs         /tmp        tmpfs  defaults        0     0
sysfs          /sys         sysfs  defaults        0     0

上面的rcS文件中不但加载了在etc/fstab中定义的文件系统(mount -a),还对系统的环境变量、ifconfig以及打印欢迎信息进行设置,这样比较省事儿,还有一种做法是在rcS中运行/usr/etc/rc.local脚本,该脚本的主要工作是安装核心模块、进行网络配置、运行应用程序、启动图形界面等,这里的rc.local脚本只进行ifconfig,打印欢迎信息,并执行/usr/etc/profileprofile文件时对应用程序的环境变量进行设置:

/sbin/init -> /etc/inittab -> /etc/init.d/rcS->/usr/etc/rc.local->/usr/etc/profile

阅读(672) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~