九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 6189|回复: 2
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2011-12-15 14:58:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前写过一篇博客,名为给android添加busybox,给出了四种移植方法,但是仍然不是很完美,需要

后期处理,不能一次性解决所有问题,下面给出上文的补丁,即android平台busybox的终极解决方案,

具体步骤如下:

第一步:交叉编译busybox

这里选择busybox-1.19.0,当然可以用更高的版本。修改makefile文件,修改的内容如下:

ARCH ?= arm

CROSS_COMPILE ?=/opt/arm-2009q3/bin/arm-none-linux-gnueabi-

注意,这里交叉编译工具使用的和内核相同的工具,arm-none-linux-gnueabi-gcc所在路径需在bashrc中声明。

执行 make menuconfig 配置 busybox:

在 Busybox Settings -> Build Options 中:

  • Build BusyBox as a static binary (no shared libs)

  • 在 Busybox Settings -> Busybox Library Tuning 中,确保选中 Tab completion 选项,支持

    Tab 扩展键:

    在 Busybox Settings ---> Installation Options 中:

    然后执行 make,make install,这时将会在 busybox-1.19.0 目录生成 busybox 工具,同

    时在_install\bin 目录会生成很多指令工具。



    第二步:如果android平台上已经放有busybox,将原来存在的删掉,如

    android_gingerbread/vendor/samsung/smdkv210/wifi/bin下,放有busybox,直接

    删掉,然后将第一步编译出来的busybox,同时将cp,ls,sh一起四个文件全拷贝到以下目录:

    android_gingerbread/vendor/samsung/smdkv210/wifi/bin

    修改/home/lqm/android_gingerbread/vendor/samsung/smdkv210/device-vendor.mk文件,修改部分

    如下:

    #wifi

    PRODUCT_COPY_FILES +=   \

            vendor/samsung/smdkv210/wifi/bin/busybox:system/busybox/busybox \

    vendor/samsung/smdkv210/wifi/bin/ls:system/busybox/ls \

            vendor/samsung/smdkv210/wifi/bin/cp:system/busybox/cp \

            vendor/samsung/smdkv210/wifi/bin/sh:system/busybox/sh \



    这一步是借助于WIFI模块,一并将busybox,ls,cp,sh四个文件拷贝到system/busybox目录,当然也可以在

    其他地方执行这一步骤,只要实现即可,方法多种多样。



    第三步:修改init.rc文件,这里基于x210平台,其他平台方法接近雷同,不再赘述。

    找到init.rc的源头,

    android_gingerbread/device/samsung/smdkv210/init_sdmmc.rc或者

    android_gingerbread/device/samsung/smdkv210/init.rc,SD卡映像为前者,

    nand flash映像为后者。在最前面的环境变量声明中做如下修改:

    # setup the global environment

        export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin:/system/busybox

    这里仅仅是增加了/system/busybox的声明;

    新建/system/busybox目录:

    # Create busybox directory

        mkdir /system/busybox

    将原来的toolbox的shell脚本改变为busybox的shell脚本:

    #service console /system/bin/sh

    #    console

    #    disabled

    #    group log

    # lqm changed for busybox shell.

    service console /system/busybox/sh

        console

        disabled

        group log



    第四步:重新编译系统,内核

    ./mk -k -s -x -U

    注意,由于init.rc是放在android.img.cpio中的,因此仅仅更新android系统是没有效果的,需要将android.img.cpio

    拷贝到内核根目录,再编译内核才能确保android.img.cpio被更新。为此,我们可以修改mk编译脚本,只要编译了android

    系统,就自动将out目录下产生的android.img.cpio拷贝到内核根目录,这样只要有init.rc更新,再更新内核后,init.rc

    就自动更新了,没有必要手动拷贝android.img.cpio了。另外,同时编译android系统,内核时,需先编译android系统,

    才能保证修改的init.rc有效,修改的mk部分如下:

    build_system()


    ......

    cp -av ${TARGET_DIR}/installed-files.txt ${RELEASE_DIR}/ || return 1;

    cp -av ${TARGET_DIR}/installed-files.txt ${RELEASE_DIR}/ || return 1;

    cp -av ${TARGET_DIR}/android.img.cpio ${RELEASE_DIR}/ || return 1;

    cp -av ${TARGET_DIR}/android.img.cpio ${KERNEL_DIR}/ || return 1;

    ......


    ......

    if [ "${system}" = yes ]; then

    build_system || exit 1

    fi



    if [ "${kernel}" = yes ]; then http://

    build_kernel || exit 1

    fi



    if [ "${uboot}" = yes ]; then

    build_bootloader_uboot || exit 1

    fi



    if [ "${xboot}" = yes ]; then

    build_bootloader_xboot || exit 1

    fi



    if [ "${update}" = yes ]; then

    gen_update_bin || exit 1

    fi

    ......



    第五步:更新文件系统,内核,事实上,我们只需用量产卡更新update.bin就可以了。

    进入系统后,我们可以看到,用不着使用busybox sh指令手动切换,已经能够使用busybox,ls,cp,

    Tab键,ctrl+c等等了。


    注:如需下载编译mk脚本,或者不想自己编译busybox的,可直接下载编译好的busybox,进入如下链接下载:点击打开链接


    回复

    使用道具 举报

    沙发
     楼主| 发表于 2011-12-16 11:50:22 | 只看该作者
    哈哈,如果你习惯复制粘贴,那也没关系,直接用toolbox就行,只要不怕麻烦。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

    GMT+8, 2024-11-22 23:03 , Processed in 0.019270 second(s), 19 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表