BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils , shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的嵌入式系统。

一、编译

1.下载Busybox tar包,如busybox-1.23.0.tar.bz2。

      官网:http://www.busybox.net/

2.   make distclean;清除原有配置

      make menuconfig;  配置命令选项

      make;编译

      make install;安装编译文件,主要为bin, sbin,  linuxrc,  usr

3. 主要配置选项:

      busybox setting -> build options -> Build Busybox as a static binary (no shared libs).   选中 静态编译。

                                                         ->Cross Compiler prefix  ;交叉编译器配置。

                                -> Installation options -> BusyBox installation prefix ;默认生成命令保存位置。

                                                                       可不指定,生成后移到rootfs,若已有rootfs,可指定rootfs位置(推荐,自动完成)。

      其他选项根据需要裁剪。

      当然也可直接修改.config配置文件完成配置选项。

4. mtd支持

此版本busybox已支持mtd-utils:flash_erase, flash_eraseall, nanddump, nandwrite, 若不支持,还需单独编译mtd-utils相关工具。

推荐网址:http://www.crifan.com/files/doc/docbook/runtime_upgrade_linux/release/webhelp/some_note.html

在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)

5. 编译中一个错误:关于__user,可参考其他文件,用宏定义将__user定义为空即可。

二、使用

busybox编译完成后,生成可执行文件busybox。在需要制作文件系统映像烧入板子的情况下,busybox应放在根文件系统目录下的bin中,其他的命令都是指向他的符号链接

两种方法:

1. 使用busybox [function] [arguments]

#busybox ls

功能就相当运行ls命令。

命令作为busybox参数运行。

2. 使用符号链接

最常用的用法是建立指向busybox的链接,不同的链接名完成不同的功能.

#ln -s busybox ls

#ln -s busybox rm

#ln -s busybox mkdir

然后分别运行这三个链接:

#./ls

#./rm

#./mkdir

就可以分别完成了ls rm 和mkdir命令的功能。虽然他们都指向同一个可执行程序busybox,但是只要链接名不同,完成的功能就不同。 

注:有些命令没有引出符号链接,故单独执行命令不可以,提示找不到命令。但可以采用“busybox 命令”方式执行命令。

注:直接运行busybox可以列出当前busybox支持的所有命令。

三、内置服务 

3.1 telnet

1.  busybox配置telnet相关命令。

2.  devpts文件系统,是目前最常见的pseudo终端,使用telnetd服务器,必须加载该文件系统。

     在/dev目录下创建一个pts目录,用来加载devpts文件系统:

     mkdir pts

     同时修改rcS,增加mount项:

     mount -t devpts  devpts  /dev/pts

     或在fstab中指出:

     devpts /dev/pts    devpts defaults 0 0

3.  设备文件

     telnet必须的设备文件节点:/dev/ptmx

     mknod -m  666 /dev/ptmx c 5 2

4.  rcS开启telnet

     /usr/sbin/telnetd &

5.  此外可以加上登录信息(测试中发现必须加用户帐号,否则登录不成功)

     passwd, shadow, group.

3.2 ftp  — 服务器

参考:http://blog.chinaunix.net/uid-20564848-id-74041.html

最新的busybox已集成ftp服务器ftpd,使用方法如下:

方法一:

# tcpsvd 0 21 ftpd -w /ftpd_dir &
// 上面的0表示对所有ip地址都进行侦听
// 如果设置为127.0.0.1那么只能开发板本地arm可以进行ftp
// 比如开发板eth0的的ip地址设为172.20.0.2,那么就不能通过该ip登录
// 所以上面指定ip等于0,那么无论来自127.0.0.1还是172.20.0.2网络地址的数据都能使用ftpd服务器.
// ftpd -w这里的参数-w表示client可以对目录执行写操作
// 可以使用-t和-T参数设置client在没有任何操作的最大时间之后ftpd主动断开client连接,即:Idle and absolute timeouts
// 默认-t为2分钟=2 * 60,-T为1小时=1 * 60 * 60

// ftpd_dir为client登录ftp后所在目录,可根据需要设置

方法二:

# vi /etc/inetd.conf
21 stream tcp nowait root ftpd ftpd -w /gliethttp_ftpd_dir
# inetd                 // inetd会执行/etc/inetd.conf脚本中的命令行,这样ftpd就作为daemon运行到起来了

注意:1) 以上2种方式运行的ftpd都不会在ps中看到ftpd进程的运行;2) 两方法的用户帐号信息与系统相同(passwd)。

~ # tcpsvd 
BusyBox v1.23.0 (2015-09-19 18:45:51 CST) multi-call binary.

Usage: tcpsvd [-hEv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] IP PORT PROG

Create TCP socket, bind to IP:PORT and listen
for incoming connection. Run PROG for each connection.

        IP              IP to listen on, 0 = all
        PORT            Port to listen on
        PROG ARGS       Program to run
        -l NAME         Local hostname (else looks up local hostname in DNS)
        -u USER[:GRP]   Change to user/group after bind
        -c N            Handle up to N connections simultaneously
        -b N            Allow a backlog of approximately N TCP SYNs
        -C N[:MSG]      Allow only up to N connections from the same IP
                        New connections from this IP address are closed
                        immediately. MSG is written to the peer before close
        -h              Look up peer\'s hostname
        -E              Don\'t set up environment variables
        -v              Verbose

3.3 tftp — 客户端

BusyBox已集成命令tftp,可通过tftp上传或下载文件:

Usage: tftp [OPTIONS] HOST [PORT]

Transfer a file from/to tftp server

        -l FILE Local FILE
        -r FILE Remote FILE
        -g      Get file
        -p      Put file
        -b SIZE Transfer blocks of SIZE octets

上传文件:

tftp -p -l  local.sh   192.168.1.222

下载文件:

tftp -g -r remote.sh 192.168.1.222

3.4 httpd

在启动脚本合适位置添加:

httpd -h /usr/app/www/

即开始httpd服务,并定位到/usr/app/www/。

httpd [-ifv[v]] [-c CONFFILE] [-p [IP:]PORT] [-u USER[:GRP]] [-r REALM] [-h HOME] or httpd -d/-e/-m STRING

Listen for incoming HTTP requests

Options:

        -i              Inetd mode
        -f              Do not daemonize
        -v[v]           Verbose
        -c FILE         Configuration file (default httpd.conf)
        -p [IP:]PORT    Bind to ip:port (default *:80)
        -u USER[:GRP]   Set uid/gid after binding to port
        -r REALM        Authentication Realm for Basic Authentication
        -h HOME         Home directory (default .)
        -m STRING       MD5 crypt STRING
        -e STRING       HTML encode STRING
        -d STRING       URL decode STRING

 

版权声明:本文为embedded-linux原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/embedded-linux/p/4821814.html