Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116445
  • 博文数量: 11
  • 博客积分: 565
  • 博客等级: 中士
  • 技术积分: 267
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-02 17:17
文章分类
文章存档

2014年(1)

2012年(2)

2011年(4)

2010年(4)

我的朋友

分类: LINUX

2011-04-06 19:23:37

使用busybox定制自己的应用程序(一)

1.       Busybox配置

首先在网上下载一个稳定的busybox版本,我用的版本是busybox-1.18.2,然后解压到工作目录。Busybox的配置方法和标准的linux内核的配置方法非常类似,我们只要切换到busybox的根目录下,使用make menuconfig命令就可以轻松定制出适合特定用途的一组应用程序。

#make menuconfig
#make
#make install

安装后,会发现busyboxbin目录下只有一个busybox二进制文件,其他命令,binsbin以后usr/binusr/sbin目录下都是指向busybox的链接文件。这么多命令一个应用程序就搞定。

2.       安装busybox到文件系统

#make install PREFIX=/xxx

这样,应用程序就安装到指定目录下,却换到/xxx下看看,bin目录,sbin目录,usr/bin目录,usr/sbin目录下出现了很多的应用程序。

3.       Busyboxinit

除了基本的命令之外,busybox还支持init功能,如同其他的init一样,busyboxinit也是完成系统的初始化工作,关机前的工作等等。Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,busyboxinit进程会依次进行以下工作:

1)         init设置信号处理过程

2)         初始化控制台

3)         剖析/etc/inittab文件

4)         执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS

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

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

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

1)         执行所有终止时必须重新启动的inittabl命令(动作类型:once

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

初始化控制台之后,busybox会检查/etc/inittab文件是否存在,如果此文件不存在,busybox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以后init重启设置缺省的动作,此外它还会为四个虚拟控制台(tty1tty4)设置启动shell的动作。如果未建立这些设备文件,busybox会报错。

inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹中有详尽的inittab文件范例)

id:runlevel:action:process

尽管此格式与传统的System V init类似,但是,idbusyboxinit中具有不同的意义。对busybox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如busyboxshash),应该会有个控制tty,如果控制tty不存在,busyboxsh会报错。Busybox将会完全忽略runlevel字段,所以空着它就行了。Process字段用来指定所执行程序的路径,包括命令行选项。Action字段用来指定下面表中8个可用到的process的动作之一:

1)         sysinit:为init提供初始化命令行的路径

2)         respawn:每当相应的进程终止执行便会重新启动

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

4)         wait:告诉init必须等到相应的进程完成之后才能继续执行

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

6)         ctratldel:当按下Ctrl+Alt+Delete组合键时,执行相应的进程

7)         shutdown:当系统关机时,执行相应的进程

8)         restart:当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身

以下是我的inittab文件:

::sysinit:/etc/rc.d/rcS
::respawn:/sbin/getty -L ttyS0 115200 vt100
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/rc.d/rcS stop
::restart:/sbin/init

这个inittab执行下列动作:

1)         /etc/rc.d/rcS设置成系统的初始化文件

2)         115200 bps的虚拟终端ttyS0上启动一个登陆会话

3)         当按下Ctrl+Alt+Delete组合键时,执行/sbin/reboot

4)         告诉init,在系统关机的时候执行/etc/rc.d/rcS stop命令

5)         如果init重启系统,将/sbin/init设置成它会执行的程序

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