• busybox 知:构建


    1. 前言

    BusyBox 将许多常见 UNIX 实用程序的微小版本组合成一个小型可执行文件。它为您通常在 GNU fileutils、shellutils 等中找到的大多数实用程序提供了替代品。BusyBox 中的实用程序通常比它们功能齐全的 GNU 表亲具有更少的选项;但是,包含的选项提供了预期的功能,并且其行为与 GNU 对应项非常相似。BusyBox 为任何小型或嵌入式系统提供了一个相当完整的环境。

    官网:https://busybox.net/
    在这里插入图片描述
    文本基于最新的 1.35.0 版本(2021年12月26日发布)介绍 busybox 的构建过程。

    2. 构建

    busybox 的编译与 Linux 内核的编译过程类似。从 http://www.busybox.net/downloads/ 可以下载目标版本的源码,解压后,通过以下几步,即可完成 busybox 的编译:

    2.1. 下载

    wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
    tar -jxf busybox-1.35.0.tar.bz2
    cd busybox-1.35.0
    
    • 1
    • 2
    • 3

    2.2. 配置

    make XXXconfig
    
    • 1

    busybox 提供了几种配置:defconfig (缺省配置)、allyesconfig(最大配置)、 allnoconfig(最小配置),一般选择缺省配置即可。

    这一步结束后,在当前目录下生成 .config 配置文件

    make menuconfig
    
    • 1

    这一步是可选的,当你认为上述配置中还有不尽如意的地方,可以通过这一步进行微调,加入或去除某些命令。

    这一步实际上是修改 .config 配置文件

    2.3. 编译

    make CROSS_COMPILE=arm-linux-
    或
    make CROSS_COMPILE=
    
    • 1
    • 2
    • 3

    这一步就是根据 .config,生成 busybox,当然你也可以指定其他的编译器, 如:arm-linux-gnueabi-,当 CROSS_COMPILE= 时,表示采用宿主机的 gcc 进行编译,生成的 busybox 可以在宿主机上执行。

    2.4. 举例

    作者通过下面几步生成了 busybox 命令:

    make defconfig
    make CROSS_COMPILE=
    
    • 1
    • 2

    在这里插入图片描述

    3. 使用

    busybox的使用很简单,有以下三种方式:

    1)busybox 后直接跟命令,如:

    busybox ls
    busybox ps
    
    • 1
    • 2

    2)直接将 busybox 重命名,如:

    cp busybox ls
    cp busybox ps
    
    • 1
    • 2

    然后再执行 ls,ps 即可。

    3)创建符号链接,如:

    ln -s busybox ls
    ln -s busybox ps
    
    • 1
    • 2

    然后再执行 ls,ps 即可。

    备注:后两种方式当执行ls时,虽然,实际调用 busybox,但是 busybox 获得的命令行参数却是 ls,因此,busybox 可通过命令行参数来确定调用的是哪个命令。

    单独执行 busybox 可以显示帮助信息,并列出支持的命令:

    [maminjie@fedora busybox-1.35.0]$ ./busybox
    BusyBox v1.35.0 (2022-08-03 23:02:38 CST) multi-call binary.
    BusyBox is copyrighted by many authors between 1998-2015.
    Licensed under GPLv2. See source distribution for detailed
    copyright notices.
    
    Usage: busybox [function [arguments]...]
       or: busybox --list[-full]
       or: busybox --show SCRIPT
       or: busybox --install [-s] [DIR]
       or: function [arguments]...
    
    	BusyBox is a multi-call binary that combines many common Unix
    	utilities into a single executable.  Most people will create a
    	link to busybox for each function they wish to use and BusyBox
    	will act like whatever it was invoked as.
    
    Currently defined functions:
    	[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arch, arp, arping, ascii, ash, awk, base32, base64,
    	basename, bc, beep, blkdiscard, blkid, blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat,
    	chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, conspy,
    	cp, cpio, crc32, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser,
    	depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, dpkg, dpkg-deb, du,
    	dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, factor,
    	fakeidentd, fallocate, false, fatattr, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find,
    	findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fsfreeze, fstrim, fsync, ftpd, ftpget, ftpput,
    	fuser, getopt, getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump, hexedit, hostid,
    	hostname, httpd, hush, hwclock, i2cdetect, i2cdump, i2cget, i2cset, i2ctransfer, id, ifconfig, ifdown,
    	ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs,
    	iplink, ipneigh, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, last, less, link,
    	linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq,
    	lpr, ls, lsattr, lsmod, lsof, lspci, lsscsi, lsusb, lzcat, lzma, lzop, makedevs, makemime, man, md5sum,
    	mdev, mesg, microcom, mim, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod,
    	mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mpstat, mt, mv, nameif, nanddump,
    	nandwrite, nbd-client, nc, netstat, nice, nl, nmeter, nohup, nologin, nproc, nsenter, nslookup, ntpd, od,
    	openvt, partprobe, passwd, paste, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill,
    	pmap, popmaildir, poweroff, powertop, printenv, printf, ps, pscan, pstree, pwd, pwdx, raidautorun, rdate,
    	rdev, readahead, readlink, readprofile, realpath, reboot, reformime, remove-shell, renice, reset, resize,
    	resume, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-init, run-parts, runlevel, runsv,
    	runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfattr, setfont,
    	setkeycodes, setlogcons, setpriv, setserial, setsid, setuidgid, sh, sha1sum, sha256sum, sha3sum,
    	sha512sum, showkey, shred, shuf, slattach, sleep, smemcap, softlimit, sort, split, ssl_client,
    	start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svc, svlogd, svok, swapoff, swapon,
    	switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tc, tcpsvd, tee, telnet, telnetd, test,
    	tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, truncate, ts, tty, ttysize,
    	tunctl, ubiattach, ubidetach, ubimkvol, ubirename, ubirmvol, ubirsvol, ubiupdatevol, udhcpc, udhcpc6,
    	udhcpd, udpsvd, uevent, umount, uname, unexpand, uniq, unix2dos, unlink, unlzma, unshare, unxz, unzip,
    	uptime, users, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, w, wall, watch, watchdog, wc,
    	wget, which, who, whoami, whois, xargs, xxd, xz, xzcat, yes, zcat, zcip
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    4. 参考

  • 相关阅读:
    Redis学习-Redis的九种数据结构
    上周热点回顾(3.25-3.31)
    【论文笔记】—低光图像增强—Zero-reference—ZeroDCE—2020-CVPR
    PBN衔接ILS时中间进近航段的保护区绘制方法
    给Windows文件夹添加备注信息
    一本了解生成式人工智能
    uniapp微信小程序用户隐私保护
    基于Matlab的超像素图像分割
    数据类型与运算符-java
    打字机效果的实现与应用
  • 原文地址:https://blog.csdn.net/canpool/article/details/126151186