all-in-one Linux command line
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 年前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 5 个月前 | ||
| 3 年前 | ||
| 5 个月前 | ||
| 5 个月前 | ||
| 1 个月前 | ||
| 17 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 天前 | ||
| 5 个月前 | ||
| 5 年前 | ||
| 5 个月前 | ||
| 4 年前 | ||
| 2 年前 | ||
| 5 个月前 | ||
| 3 个月前 | ||
| 5 个月前 | ||
| 10 个月前 | ||
| 5 个月前 | ||
| 5 个月前 | ||
| 1 个月前 |
Toybox:一站式 Linux 命令行工具。
--- 快速开始
您可以从以下地址下载适用于各种目标平台的静态二进制文件:
特殊名称 "." 表示当前目录(就像 ".." 表示父目录一样),您可以通过指定路径来运行不在 $PATH 中的程序,因此以下命令应该可以正常工作:
wget http://landley.net/toybox/bin/toybox-x86_64 chmod +x toybox-x86_64 ./toybox-x86_64 echo hello world
--- 构建 toybox
输入 "make help" 可获取构建说明。
Toybox 采用与 Linux 内核相同的 "make menuconfig; make; make install" 模式。通常,您可以使用如下命令:
make defconfig make make install
或者也可以这样:
LDFLAGS="--static" CROSS_COMPILE=armv5l- make defconfig toybox PREFIX=/path/to/root/filesystem/bin make install_flat
"configure" 文件定义了许多控制 toybox 构建的环境变量的默认值;如果您将这些变量中的任何一个导出到环境中,您设置的值将取代该文件中的默认值。
上面的 CROSS_COMPILE 参数是可选的,默认情况下会构建一个可在当前机器上运行的 toybox 版本。交叉编译需要使用带有适当前缀的交叉编译器工具链,一些示例工具链(使用 toybox 源代码中的 "scripts/mcm-buildall.sh" 文件构建)可从以下地址获取:
https://landley.net/toybox/downloads/binaries/toolchains/latest
对于上面的 "CROSS_COMPILE=armv5l-" 示例,请下载 armv5l-linux-musleabihf-cross.tar.xz,解压它,并将其 "bin" 子目录添加到您的 $PATH 中。(是的,末尾的连字符非常重要,因为前缀包含一个连字符。)
有关交叉编译的更多信息,请参见:
https://landley.net/toybox/faq.html#cross http://landley.net/writing/docs/cross-compiling.html http://landley.net/aboriginal/architectures.html
有关 toybox 构建过程的更详细描述,请参见:
http://landley.net/toybox/code.html#building
--- 使用 toybox
toybox 构建会生成一个多调用二进制文件,这是一个“瑞士军刀”式的程序,它的行为会根据调用它的名称(如 cp、mv、cat 等)而有所不同。安装 toybox 会为每个命令名称添加指向 $PATH 的符号链接。
特殊的 "toybox" 命令将其第一个参数视为要运行的命令。如果没有参数,它会列出可用的命令。这允许您在不安装 toybox 的情况下使用它,并且它是唯一可以有任意后缀的命令(因此有 "toybox-armv5l" 这样的名称)。
"help" 命令提供有关每个命令的信息(例如 "help cat"),而 "help toybox" 提供有关 toybox 的一般信息。
--- 配置 toybox
它的工作方式与 Linux 内核类似:allnoconfig、defconfig 和 menuconfig 会编辑一个 ".config" 文件,该文件选择要包含在生成的二进制文件中的功能。您可以保存并重用您的 .config 文件,但在迁移到新版本时,可能需要运行 "make oldconfig" 来重新运行依赖解析器。
最合理的配置是 "make defconfig":不建议将 allyesconfig 作为 toybox 的起点,因为它会启用未完成的命令、调试代码以及您的构建环境可能不提供的可选依赖项。
--- 创建基于 Toybox 的 Linux 系统
Toybox 有一个内置的简单系统构建器(scripts/mkroot.sh),带有一个 Makefile 目标:
make root sudo chroot root/host/fs /init
输入 "exit" 即可退出。如果您安装了适当的交叉编译器并将其指向 Linux 源代码,它可以构建简单的三包系统,这些系统可以在 qemu 下启动到 shell 提示符:
make root CROSS_COMPILE=sh4-linux-musl- LINUX=~/linux cd root/sh4 ./qemu-sh4.sh
通过直接调用 scripts/mkroot.sh,您可以向构建添加其他软件包,以 scripts/root/dropbear 为例。
常见问题解答(FAQ)对此有更详细的解释:
https://landley.net/toybox/faq.html#system https://landley.net/toybox/faq.html#mkroot
--- 演示文稿
-
2013 年嵌入式 Linux 大会上的“为什么选择 Toybox?”演讲
大纲:http://landley.net/talks/celf-2013.txt 视频:http://youtu.be/SGmtP5Lg_t0
https://landley.net/toybox/about.html 页面上有导航链接,将该演讲分解为各个部分。
-
“为什么选择公有领域?” copyleft 的兴衰,2013 年俄亥俄 Linux 节
大纲:http://landley.net/talks/ohio-2013.txt 音频:https://archive.org/download/OhioLinuxfest2013/24-Rob_Landley-The_Rise_and_Fall_of_Copyleft.mp3
-
我为什么开发 Aboriginal Linux(这引导我走向了 toybox)
260 张幻灯片的演示: https://speakerdeck.com/landley/developing-for-non-x86-targets-using-qemu
如何以及为何使 Android 自托管: http://landley.net/aboriginal/about.html#selfhost
比必要内容更多的背景故事: https://landley.net/aboriginal/history.html
-
toybox 的新特性(2015 年 ELC 状态更新):
视频:http://elinux.org/ELC_2015_Presentations 大纲:http://landley.net/talks/celf-2015.txt
-
Toybox 与 BusyBox(2019 年 ELC 演讲):
大纲:http://landley.net/talks/elc-2019.txt 视频:https://www.youtube.com/watch?v=MkJkyMuBm3g
--- 贡献代码
与 toybox 项目沟通的三个重要网址是:
邮件列表:http://lists.landley.net/listinfo.cgi/toybox-landley.net
git 仓库:http://github.com/landley/toybox
维护者希望补丁发送到邮件列表。如果您使用 git,最简单的方法是:
git format-patch -1 $HASH
然后发送文件附件。非订阅者的邮件会被列表暂存等待审核,但我通常会在一两天内处理。
我会将 github 的拉取请求(pull requests)作为补丁下载,并使用 "git am" 应用它们(这样可以避免不必要的合并提交)。有时我甚至会记得关闭拉取请求。
如果您的补丁在一周后仍未得到我的回复,请随时提醒我。
Android 对 toybox 补丁的政策是,非构建补丁应首先进入上游(进入 vanilla toybox,并在 toybox 邮件列表上进行讨论),然后从那里拉入 Android 的 toybox 仓库。(他们通常在周五进行同步)。例外情况是针对他们构建脚本(Android.mk 和已签入的 generated/* 文件)的补丁,这些补丁直接提交到 AOSP。
(至于“贡献”的另一种含义,https://patreon.com/landley 总是受欢迎的,但我事先警告您,我在更新它方面做得很糟糕。)