最近在基于Android做IPV6方面的开发和测试,需要使用busybox中提供的ping, ping6, nslookup, traceroute6等工具。经过测试发现:网络上介绍交叉编译busybox并放到Android中运行的文章很多,交叉编译好的busybox也可以直接下载到。但是,由于它们都是静态编译busybox并链接在标准的glibc上,导致一些功能在Android中不能正常运行,例如:#busybox ping www.baidu.com
Android并没有采用glibc作为C库,而是采用了Google自己开发的Bionic Libc,它的官方Toolchain也是基于Bionic Libc而并非glibc的。与glibc相比,Bionic Libc有如下一些特点:
- 采用BSD License,而不是glibc的GPL License;
- 大小只有大约200k,比glibc差不多小一半,且比glibc更快;
- 实现了一个更小、更快的pthread;
- 提供了一些Android所需要的重要函数,如”getprop”, “LOGI”等;
- 不完全支持POSIX标准,比如C++ exceptions,wide chars等;
- 不提供libthread_db 和 libm的实现
我这里要做的就是基于bionic libc来编译busybox,以更好的提供对网络相关工具的支持。上网搜索发现,已经有一些人对busybox的移植做了许多工作,并且工作了自己的成果,比如:
- cyanogenmod已经提供了修改好的busybox源代码下载,但是基于froyo