Android移植busybox

android 编译 busybox 1. 下载 busybox-1.27.0 并解压; 2. export PATH=$PATH:/home///prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8/bin 3. cd busybox-1.27.0 4. vim configs/android2_defconfig #修改下面一行 CONFIG_CROSS_CO 阅读详情

http://www.cnblogs.com/cslunatic/p/3196014.html

Android 的toolbox没有自动补齐,命令少,对于开发人员还是需要busybox,直接移植官方的busybox会有很多问题,主要是因为基于Android的交叉编译工具并没有采用glibc作为C库,而是采用了Google自己开发的Bionic Libc,它的官方Toolchain也是基于Bionic Libc而并非glibc的。
与glibc相比,Bionic Libc有如下一些特点:
1> 采用BSD License,而不是glibc的GPL License; 
2> 大小只有大约200k,比glibc差不多小一半,且比glibc更快;
3> 实现了一个更小、更快的pthread;
4> 提供了一些Android所需要的重要函数,如”getprop”, “LOGI”等; 
5> 不完全支持POSIX标准,比如C++ exceptions,wide chars等;
6> 不提供libthread_db 和 libm的实现 
下面简单阐述cyanogenmod提供的针对android bionic 库的android源码的移植及添加方法,方便大家开发使用。

1. 下载cyanogenmod修改过的busybox源码,并解压到源码external/busybox目录
位置:https://github.com/CyanogenMod/android_external_busybox
目录内容如下:

2.编译、配置busybox并修正编译错误:
先在android源码根目录执行:source build/envsetup.sh
进入目录:external/CyanogenMod-android_external_busybox-995d0d3/
1>.执行meke menuconfig
Busybox Settings  --->
              General Configuration  --->
                    [*]   Don't use /usr-->  //要选择此项,不然又部分命令会被安装到_install/usr/bin和_install/usr/sbin, busybox-1.18.0中,这项没有用,不管选择与否都会有部分命令安装到_install/usr/bin和_install/usr/sbin。使用busybox-1.17.0就正常,且此项在Build Options中。
              Build Options  --->
                    [*] Build BusyBox as a static binary (no shared libs) //使用静态库编译
                        (arm-eabi-) Cross Compiler prefix   //填入交叉编译工具链名,如果不在路径PATH中,可使用绝对路径。
              Busybox Library Tuning  --->
                    [*]   Tab completion  ->  //检测此项是否选择,如没有选,就不能使用tab键补全,默认是选择的。
2>.执行source ../../build/envsetup.sh      
3>.执行:mm(单独编译模块)
4>.编译错误
问题1:
build/core/base_rules.mk:74: *** Module name: libclearsilverregex
build/core/base_rules.mk:75: *** Makefile location: external/android_external_busybox-gingerbread
build/core/base_rules.mk:76: * 
build/core/base_rules.mk:77: * Each module must use a LOCAL_MODULE_TAGS in its
build/core/base_rules.mk:78: * Android.mk. Possible tags declared by a module:
build/core/base_rules.mk:79: * 
build/core/base_rules.mk:80: *     optional, debug, eng, tests, samples
build/core/base_rules.mk:81: * 
build/core/base_rules.mk:82: * If the module is expected to be in all builds
build/core/base_rules.mk:83: * of a product, then it should use the
build/core/base_rules.mk:84: * "optional" tag: 
build/core/base_rules.mk:85: * 
build/core/base_rules.mk:86: *    Add "LOCAL_MODULE_TAGS := optional" in the
build/core/base_rules.mk:87: *    Android.mk for the affected module, and add
build/core/base_rules.mk:88: *    the LOCAL_MODULE value for that component
build/core/base_rules.mk:89: *    into the PRODUCT_PACKAGES section of product
build/core/base_rules.mk:90: *    makefile(s) where it's necessary, if
build/core/base_rules.mk:91: *    appropriate.
build/core/base_rules.mk:92: * 
build/core/base_rules.mk:93: * If the component should be in EVERY build of ALL
build/core/base_rules.mk:94: * products, then add its LOCAL_MODULE value to the
build/core/base_rules.mk:95: * PRODUCT_PACKAGES section of
build/core/base_rules.mk:96: * build/target/product/core.mk
build/core/base_rules.mk:97: * 
build/core/base_rules.mk:98: *** user tag detected on new module - user tags are only supported on legacy modules.  Stop.
解决:在Android.mk中的LOCAL_MODULE := libclearsilverregex和LOCAL_MODULE := libuclibcrpc后添加LOCAL_MODULE_TAGS := optional
问题2:
我用git add file添加文件时出现这样错误:
fatal: Not a git repository (or any of the parent directories): .git
提示说没有.git这样一个目录,解决办法如下:
git init就可以了!
问题3:
make: *** No rule to make target `out/target/product/generic/obj/lib/***.so', needed by `out/target/product/generic/obj/STATIC_LIBRARIES/***/busybox'.  Stop.
解决办法:
在/home/ryan/Android2.2/alps/out/target/product 找到我们的工程名,工程名就是我们编译时出现的project=ti816xevm
在终端输入命令:export TARGET_PRODUCT=ti816xevm
问题就解决了

3.安装、创建busybox shell 链接打包:
编译通过,依据Android.mk中的变量 LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities 可知,编译出来目标文件busybox在out/target/product/$(platform_name)/utilities/目录下;
进入out/target/product/$(platform_name)/utilities/目录下,创建链接便于进入busybox  shell环境,执行:ln -s busybox ash,将busybox 和 ash 一起复制到system/bin/目录下,一起打包进文件系统system.img(链接文件和链接目标文件必须一起打包)

4.烧录到产品板使用:
usb 或网络链接adb 之后,adb shell ,之后执行ash 即可进入busybox shell,操作就和pc的linux环境差不多了,可以使用tab键自动补齐,和其他一些busybox的命令;
也可以通过nfs挂载Android文件系统,直接copy到主机的挂载目录下system/bin/,然后执行ln -s busybox ash, 然后在终端输入ash进入busybox shell, 执行su退出busybox shell环境。

5.其它编译问题:
另外,有网友在编译过程中出现其它问题,这里也一并列具出来,供参考;
问题1描述:In file included from external/busybox/coreutils/df.c:25: bionic/libc/include/mntent.h:48: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'struct' 
解决方法:在出错的文件中,包含头文件stdio.h。
例如在df.c中增加#include <stdio.h> 
类似的编译出错的文件可能会有:coreutile/df.c util-linux/mount.c util-linux/umount.c 
问题2描述: external/busybox/shell/ash.c:12714: error: 'rlim_t' undeclared (first use in this function) 
原因分析:使用的是早期的Android版本,其中rlim_t没有定义。
解决方法:在bionic/libc/include/sys/resource.h中增加
typedef unsigned long rlim_t;  
typedef unsigned long rlim_t; 
可以参考Froyo bionic/libc/include/sys/resource.h文件。
问题3描述:busybox/networking/ntpd.c:1458: undefined reference to `adjtimex'  
出错原因:bionic中没有定义adjtimex,stime,swapon,swapoff,sysinfo,getsid等函数。
解决方法:修改Android.mk,增加 CYANOGEN_BIONIC:=true

参考:http://blog.csdn.net/sustzombie/article/details/6763791

android+busybox+编译,Androidbusybox编译 Androidbusybox编译1下载busybox源码2解压tar -xvf busybox-1.23.2.tar.bz23 android版的配置脚本解压后的源码里,configs文件压有android版本的配置脚本:android2_defconfig android_defconfig android_ndk_defconfig我选用的是android2_def... 阅读详情

相关推荐

BusyBox编译时选择合适的编译器

在编译BusyBox时,选择合适的编译器是非常重要的。编译器是将源代码转换为可执行文件的关键工具,不同的编译器可能会对生成的可执行文件的性能和大小产生影响。本文将介绍如何在编译BusyBox时选择适合的编译器,并提供相应的源代码示例。通过查看系统中可用的编译器,并将选定的编译器设置为环境变量,我们可以使用所选的编译器来编译源代码。根据实际情况选择适合的编译器。上述命令将使用选定的编译器将"hello.c"编译为可执行文件"hello"。至此,我们成功选择了合适的编译器并编译了一个简单的BusyBox示例。

HackDashX的博客 343

Android NDK安装ARM交叉编译工具

本文由TinyLab.org原创。 本文简要介绍了如何安装Android NDK的C/C++语言开发套件,并介绍了如何创建一个独立的ARM交叉编译工具链。通过该工具链接可以交叉编译Android上的C语言程序,也可以用来编译Android Linux内核。文中举例介绍了如何通过该交叉工具链编译Busybox

Android12移植busybox

7. 设置环境变量:为了让系统能够识别busybox命令,需要将其添加到环境变量中。1. 下载busybox源码:访问https://busybox.net/downloads.html,选择合适的版本下载。4. 选择需要的功能:在配置界面中,根据需要选择相应的功能,例如文件操作、网络操作等。2. 解压源码包:将下载的源码包解压到一个目录中,例如/path/to/busybox。注意将`/path/to/busybox`替换为实际的busybox安装路径。

Do my best! 729

如何编译Android内可运行的arm/arm64架构的busybox执行文件

如何使用NDK编译Android内可以运行的busybox二进制文件呢?此篇做操作说明。

Android系统工程师--小馬佩德罗 2957

移植BusyboxAndroid平台

Busybox想必大家都很熟悉,但是其是基于glibc/uclibc开发,而android采用bionic,另外dns有特殊处理。在android移植,实际上已经有人做过了,比如https://github.com/CyanogenMod. 但是他的移植不够好,主要有两点: 1. 基于eclair的,虽然在froyo下没什么问题。比如froyo下的bionic实际上已经有了regex了,而他

yihui8的专栏 2690

Android移植busybox

Android移植busybox 一 目的        Android自带了命令工具集,但是使用起来很不方便,且很多linux上常用的命令都不支持,如不能使用cp,grep,tab补全,回格删除,上下方向键记忆等等。所以,我们需要在Android系统中添加linux系统常用的工具集——busybox。   二 环境说明        硬件环境:DM3730 EVM        软

sagane的专栏 2204

Android Recovery 移植 Busybox

这里说的是源码的编译环境下, 如何完整的移植一份Busybox。 如果在Recovery下开发新功能, 没有Busybox的话, 调试起来很麻烦(不能执行 adb shell)。 这里在推荐一个小技巧: 可以通过 adb pull /tmp/recovery.log ./  来看当前运行的Log。 移植的方案有很多(我自己就看到过不止3中), 我这里说一个比较简单的, 而且移植的效率

ouo555的专栏 3398

BusyBox移植Android

busybox-1.13.4.tar.gz1. configureBusybox Settings  --->     Build Options  --->             [*] Build BusyBox as a static binary (no shared libs)                        [ ] Force NOMMU b

Mango的专栏 1027

基于android内核的Busybox移植过程

首先,编译busybox源代码,在menuconfig中配置如下:Busybox Settings  ---> Build Options  --->中不要选择静态连接,要动态的,Installation Options  --->中选择安装目录,和选择[*] Don‘t use /usr,这样,在make install是就不会安装在/usr下,而是安装在自己选择的目录下,我这里选择代码目录下的

xiaofengcanyue2013的专栏 2726

Android shell 下 busybox,clear,tcpdump、、众多命令的移植

作为一名Android开发者,经常需要进入Android 的shell终端运行一些命令。但是我们发现Android终端下的内置命令不仅少的可怜,如基本的清屏命令(clear)都没有,而且十分难用,如 ls 命令的显示简直奇丑无比!! 这篇文章主要专注于解决上面两个问题,或许有的牛人会...

choumianxian2107的博客 509

基于real6410和android2.1源码的busybox移植

详细步骤如下: 下载地址:http://www.busybox.net/ (本文下载版本是1.13.3 )下载并解压。 运行menuconfig对busybox进行配置: make menuconfig  Busybox Settings --> Build Options --> Build Busybox as a static binary (no shared libs)  -

zailushangha的专栏 882

Android环境下移植busybox-1.21.1

前言:本移植主要是为了实现安卓环境下DHCP服务器和telnetd服务器功能。 Dhcp服务器主要修改缓存文件路径“/tmp/leases”,telnetd主要添加登陆验证,这个牵扯到login命令。 1.首先下载busybox-1.21.1.tar.bz2 2.解压,进入busybox-1.21.1 执行: #cp configs/android2_defconfig .con

六月初曲的博客 939

repost:Android shell 下 busybox,clear,tcpdump、、众多命令的移植

Android shell 下 busybox,clear,tcpdump、、众多命令的移植 http://my.oschina.net/mopidick/blog/167372 作为一名Android开发者,经常需要进入Android 的shell终端运行一些命令。但是我们发现Android终端下的内置命令不仅少的可怜,如基本的清屏命令(clear)都没有,而且十分难用,如 ls  命令的显...

hunter 1988

android box A8,android平台busybox的终极解决方案---基于x210开发板

之前写过一篇博客,名为给android添加busybox,给出了四种移植方法,但是仍然不是很完美,需要后期处理,不能一次性解决所有问题,下面给出上文的补丁,即android平台busybox的终极解决方案,具体步骤如下:第一步:交叉编译busybox这里选择busybox-1.19.0,当然可以用更高的版本。修改makefile文件,修改的内容如下:ARCH ?= armCROSS_COMPILE...

weixin_34180452的博客 349

android添加busybox

转载:http://www.verydemo.com/demo_c131_i130674.html    默认情况下,android使用的是精简的toolbox工具,相对习惯了busybox的朋友来说,使用toolbox 简直无法忍受。网上介绍了一些移植busyboxandroid平台的文章,但是用起来总感觉有些不顺手,比如有 网友将busybox放在了/data目录,这可是ram目录啊,

neveremind158的专栏 649
上一篇: adb 知识
下一篇: Android移植busybox
Pansing
博客等级 码龄15年 30粉丝 25原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值