Init进程

Init进程

嵌入式系统中命令都指向busybox程序,busybox是一系列命令的组合。
busybox
所以当执行ls时,实际上是执行busybox ls
init程序的目的是启动用户应用程序。
过程大概是:读取配置文件、根据配置文件配置运行环境、启动用户程序。

busybox首先调用init_main()函数。
init_main()函数首先设置信号处理函数``:

/* Set up sig handlers  -- be sure to
	 * clear all of these in run() */
	signal(SIGHUP, exec_signal);
	signal(SIGQUIT, exec_signal);
	signal(SIGUSR1, shutdown_signal);
	signal(SIGUSR2, shutdown_signal);
	signal(SIGINT, ctrlaltdel_signal);
	signal(SIGTERM, shutdown_signal);
	signal(SIGCONT, cont_handler);
	signal(SIGSTOP, stop_handler);
	signal(SIGTSTP, stop_handler);

然后控制台初始化console_init();设置标准输入输出和错误输出,指向/dev/console设备。
然后调用parse_inittab()函数寻找配置文件,parse_inittab()里面打开
file = fopen(INITTAB, "r"); 其中
#define INITTAB "/etc/inittab" /* inittab file location */

我们可以查阅inittab说明文档了解inittab的格式:
Format for each entry: <id>:<runlevels>:<action>:<process>
inittab的默认配置是:

    ::sysinit:/etc/init.d/rcS
    ::askfirst:/bin/sh
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/sbin/swapoff -a
    ::shutdown:/bin/umount -a -r
    ::restart:/sbin/init

其中<process>:是指定需要执行的命令或者程序。
读取完inittab配置文件后运行new_init_action函数解析配置文件。

然后init_main函数继续执行run_actions函数,run_actions是根据配置文件<process>来创建对应的子进程执行程序。

综上:最小的根文件系统需要的项:(init进程需要)
  1. 打开终端:/dev/ console/dev/NULL不设置 >inittab格式中的d(标准输入、输出和标准错误)时,就定位到/dev/NUL中去。
  2. int程序本身就是 busybox
  3. 需要配置文件:etc/inittab
  4. 配置文件若指定了某些应用程序或执行脚本-这些必须存在,不存在会有默认的。
  5. 应用程序需要库( fopen、 fwrite等函数需要)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值