toybox扩展
1. 背景¶
在AOSP中使用的命令行工具,原生状态下只有AOSP有用到的命令被打开。有限的命令可能无法满足我们调试的需求,下文将介绍如何打开toybox中的命令。
2. toybox源码介绍¶
toybox的源码位置在<AOSP>/external/toybox。它本身开源项目,被移植到AOSP中时,google为其添加了Android.bp用于支持在AOSP中编译。
<AOSP>/external/toybox/Android.bp中有一段注释:

a)修改目录下的.config-*来决定有哪些命令要被打开,然后执行regerate.sh来重新生成头文件
b)将要新打开的命令的源文件加到srcs变量中使其参加编译
c)如果只是想通过toybox <command> [args]来使用新的命令,完成上两步即可。如果想直接在命令行执行command [args]来使用新的命令,还要在symlinks变量中加入命令。
3. 举例¶
-
vi命令
按照前面注释给出的三步,现在看看三个配置文件分别是:

看起来-device是给Android用的,-linux是给pure-linux用的,-mac是给mac用的,接下来看.config-device:
搜索CONFIG_VI可以看到默认已经打开了:

再看看vi.c有没有被编译:

可以看到它被放到device_srcs这个变量中,进一步看其实就是Android.bp中有根据host target做条件编译:

既然有打开vi而且有编译到,但是当前Android12的命令行却没有vi命令,那应该是没有创建软连接了,在开发板中直接执行toybox vi即可。
或者添加vi的软连接:

编译system替换,就可以直接使用vi命令了。
-
dhcp命令
和vi一样,查看dhcp的情况发现dhcp没有加入编译,CONFIG没有开。可以这样修改:
a. 修改config

b. 找到dhcp.c将路径加到device_srcs,并创建软连接:


c. 执行./regenerate.sh,可以看到脚本帮忙我们更新了头文件:

d. 编译下载镜像,就会发现dhcp命令可以使用了:
