BusyBox应用
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