使用busybox定制自己的应用程序

本文介绍了如何使用busybox定制应用程序,包括配置、安装到文件系统,以及使用busybox作为init来完成系统初始化工作。文章详细讲解了配置busybox、安装到指定目录、解析inittab文件以及系统的配置文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 busybox 定制自己的应用程序

1.       Busybox 配置

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



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

 

2.       安装 busybox 到文件系统

#make install PREFIX=/xxx

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

 

3.       Busybox init

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

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 重启设置缺省的动作,此外它还会为四个虚拟控制台( tty1 tty4 )设置启动 shell 的动作。如果未建立这些设备文件, busybox 会报错。

 

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

id:runlevel:action:process

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

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

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

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

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

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

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

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

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

 

以下是我的 inittab 文件:

这个 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 设置成它会执行的程序

 

4.       系统的配置文件

配置文件一般放在 /etc/ 目录下。下面依次介绍 /etc/ 目录下各文件:

1) /etc/rc.d/

[root@fedora9 rc.d]# ls

init.d  rc3.d  rc.conf  rc.modules  rcS  rc.serial  rc.sysinit

rcS 是我 init 初始化命令行的文件。内容如下:

[root@fedora9 rc.d]# cat rcS

#!/bin/sh

 

# minimal startup script, will work with msh (this is best available in

# MMUless format).

 

# load the configuration information

. /etc/rc.d/rc.conf

mode=${1:-start}

if [ "$mode" = "start" ]

then

cfg_services=`ls /etc/rc.d/rc3.d/S*`

else

cfg_services=`ls /etc/rc.d/rc3.d/K*`

fi

#echo $cfg_services

# run the configured sequence

for i in $cfg_services

do

    if [ -x $i ]

    then

        $i $mode

    fi

done

 

if [ $# -ge 2 ]

then

    exit 0

fi

# show all kernel log messages

#echo 8 >  /proc/sys/kernel/printk

 

2) /etc/fstab

[root@fedora9 etc]# cat fstab

#

# /etc/fstab: static file system information.

#

# file system   mount       type    options           dump    pass

proc            /proc       proc    defaults          0       0

 

3) /etc/profile

这个文件是 sh 用的,当用户获得一个 shell 后, sh 就会根据这个文件配置用户的登陆环境,下面是我的 profile 文件:

其中 PATH 环境变量指定当用户键入一个命令时, sh 寻找这个命令的路径。

PS1 指定 sh 提示符的格式

 

4) /etc/ld.so.conf /etc/ld.so.cache

这两个文件是与 lib 库有关的,它们用来指定应用程序寻找 lib 库的路径。我的 ld.so.conf 文件内容如下:

[root@fedora9 etc]# cat ld.so.conf

include ld.so.conf.d/*.conf

/usr/local/lib

 

ld.so.cache 里面的内容是由 ldconfig 命令生成的, ldconfig 根据 ld.so.conf 配置文件生成 ld.so.cache 里面的内容,应用程序读取的是 ld.so.cache 文件,因此如果变动了 ld.so.conf 文件,需要运行一次 ldconfig 才能使新的配置生效,另外如果新加了 lib 库文件,也需要 ldconfig

 

5) /etc/group

group 里面存放的是用户组的信息

 

6)  /etc/passwd

passwd 里面存放的是用户的信息

 

7) /etc/shadow

shadow 文件是 pam 认证到的密码存放文件。

 

8)  /etc/services

网络应用程序用到的标准服务端口映射表

 

9)  /etc/hosts, /etc/host.conf, /etc/resolv.conf

 

host.conf resolv.conf 是域名解析的时候用到的配置文件,其中 resolv.conf 里面是域名服务器的 ip 地址, host.conf 里面放的是主机的查找规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值