移植Busybox到Android平台
Busybox想必大家都很熟悉,但是其是基于glibc/uclibc开发,而android采用bionic,另外dns有特殊处理。在android的移植,实际上已经有人做过了,比如https://github.com/CyanogenMod.
但是他的移植不够好,主要有两点:
1. 基于eclair的,虽然在froyo下没什么问题。比如froyo下的bionic实际上已经有了regex了,而他依然选择第三方库的。此外种种,不一而足。
2. 无法自定义。我们知道,busybox的makefile和linux内核一样,具有高度的可配性,从而生成makefile。
而Android.mk需要指定LOCAL_SRC_FILES,虽然有LOCAL_GENERATED_SOURCES,但是还是不够灵活。为此,本人增加了一些补丁,来动态获取source.
实际上之前的移植和这相关,是定义gcc的cflags等环境变量,然后生成busybox,和agcc有点类似。
后来本人改为采用Android.mk这种方式了。经历一段时间后,终于基本完成。
在默认defconfig下,仍然有一些无法编译,本人也不想支持这些,所以不会再打补丁。
比如init, syslogd, loginutils,及rpc服务,共享内存,utmp/wtmp的几个。
考虑到这些基本在android里基本没有用,就直接去除了。
禁用的选项请参考Android.in。
不再多说,如果各位有心,请关注以下网址:
http://github.com/liudongmiao/busybox-android
另外,对bionic的要求是froyo以上,虽然里面有支持eclair,但只限于动态链接的情况。
目前静态链接编译bionic后,大约800多k,比起之前用glibc静态链接1.8M,已经很小很小了。
其实上面已经分析过移植busybox的两种可能。 一是使用busybox里内建的makefile,比如你使用make menuconfig,但是编译时需要指定很多环境变量。 二是重新写适合busybox编译的Android.mk,然后直接运行make APP-busybox就可以了。 现在这里说一下运行我这个的方式: 1. 请确保bionic是eclair+的版本,最好是froyo或master (本人只在froyo下测试) 2. 默认使用静态链接,如果目标平台是eclair并要支持动态链接,请... (呃,真的有必要说方法么,哈?) shell>> make APP-busybox 这个将使用默认的config,即defconfig,如果需要修改,请这样运行: 1. 到busybox目录下运行make O=/path/to/busybox_intermediates menuconfig (生成config) 然后运行make APP-busybox |
更多相关文章
- android动效开篇
- Android(安卓)App异常检测及处理
- Android(安卓)ListView 如何 更改字体颜色,字体类型等参数
- 在线看Android系统源码,AndroidXRef的简易使用方法
- Android内存泄漏总结
- Android(安卓)app调用动态库so
- 动态加载Dex的原理
- Android-使用AutoCompleteTextView进行动态匹配
- 【Android】利用adt-bundle在Linux下轻松搭建Android开发环境与H