zoukankan      html  css  js  c++  java
  • 交叉编译arm Linux环境下的android-tools-adb(转)

    前言

        项目使用Rockchip的3399挖掘机demo板,使用官方提供的Debian Linux SDK(官方github源码链接:https://github.com/rockchip-linux)进行开发定制。当前需要将Android上的调试工具adb移植到arm平台上运行,所以搜罗了网上的一堆教程和参考,最终本地交叉编译出了可以在RK3399(3399是armhf的)核心板上直接运行的adb工具。

        开发环境为Ubuntu1604。

    一、下载桌面版Ubuntu1604的如下源码包:android-tools-adb,openssl,zlib。

        android-tools-adb源码包下载链接:https://packages.ubuntu.com/source/xenial/android-tools

        openssl-1.1.0源码包下载链接:https://www.openssl.org/source/

        zlib-1.2.8源码包下载链接:https://packages.ubuntu.com/xenial/zlib1g-dev

        注意:交叉编译armhf平台的adb工具,本地必须安装openssl和zlib库,直接用apt install是不行的,因为交叉编译时需要链接arm版本的库。最终交叉编译出来的openssl和zlib库,需要拷贝到本地/usr/arm-linux-gnueabihf/lib/目录下。

    二、下载arm-linux-gcc交叉编译工具链。

        arm-none-linux-gnueabi-gcc下载地址:https://blog.csdn.net/alan00000/article/details/51724252

        arm-linux-gnueabihf-gcc下载地址:http://www.veryarm.com/arm-linux-gnueabihf-gcc

        在Ubuntu1604上安装交叉编译工具链可以参考如下链接:https://blog.csdn.net/u010957054/article/details/58056863 

    三、交叉编译openssl和zlib库。

    3)交叉编译openssl库。

        1. 首先在终端命令行中运行配置命令(此步骤已经做过,不需要再做,可直接从第3步做起。当然有兴趣折腾的话,可以自己再配一次):./config no-asm -shared --prefix=$PWD/output/
       说明:no-asm  在交叉编译过程中不使用汇编代码代码加速编译过程。
                   -shared  生成动态链接库。
                   --prefix  指定安装编译生成文件的路径,如不指定则默认为当前目录。

        2. 其次修改当前目录下的 Makefile 文件(此步骤也已经做过,不需要再做,可直接从第3步做起。有兴趣自己折腾的话,可以自行配置修改):
       将 Makefile 第74行 “CROSS_COMPILE= ” 改为 “CROSS_COMPILE= arm-linux-gnueabihf-”(前提上电脑上已经安装了 arm 交叉编译工具,未安装的参考此链接:https://blog.csdn.net/u010957054/article/details/58056863
       或 https://blog.csdn.net/singleroot/article/details/54342935)。
       找到Makefile中有 “-m64” 的地方,全删之(共2处)。

        3. 最后,在终端命令行里面执行编译和安装命令:make && make install
       运行完毕后,会在当前目录下生成一个 “output” 目录,生成的交叉编译库文件、可执行文件和头文件等均在此目录下。

       将 “output/lib” 目录下的 “libcrypto” 和 “libssl” 开头的库文件全部复制到 “/usr/arm-linux-gnueabihf/lib/” 目录下即可。

        参考链接:
        https://www.cnblogs.com/ynxf/p/6375091.html
        https://blog.csdn.net/zqj6893/article/details/8778237

    2)交叉编译zlib库。

        1. 首先在终端命令行中运行命令指定编译器:export CC=arm-linux-gnueabihf-gcc

        2. 其次运行配置命令:./configure --prefix=$PWD/output
       说明:--prefix  指定安装编译生成文件的路径,如不指定则默认为当前目录。

        3. 最后,在终端命令行里面执行编译和安装命令:make && make install
       运行完毕后,会在当前目录下生成一个 “output” 目录,生成的交叉编译库文件、可执行文件和头文件等均在此目录下。

       将 “output/lib” 目录下的 “libz” 开头的库文件全部复制到 “/usr/arm-linux-gnueabihf/lib/” 目录下即可。   

        参考链接:
        https://blog.csdn.net/npy_lp/article/details/6991704

    四、交叉编译android-tools-adb工具。

        直接复制 android-tools-adb 源码包中 debian/makefiles 目录下的 adb.mk 到 core/adb 目录下,并改名为 Makefile 。然后在终端命令行中运行 export CC=arm-linux-gnueabihf-gcc 然后再运行 make 命令,即可编译生成 armhf 平台对应的 adb 可执行文件。

        将生成的 adb 可执行程序拷贝到3399目标板 /usr/bin/ 目录下,经验证,可以使用完整的 adb 调试命令。

    1.问题

    遇到一个比较苛刻的客户,测试程序adb push到开发板时间格式不一样,这都要算软件bug。

    没办法,只能想办法解决。
    后续在其他平台验证不会出现时间格式不一致的问题,所以把目标锁定在adbd版本的问题。于是打算重新移植个最新版本的adbd。
    后面发现根本原因是设备的系统时间小于adb push文件的属性时间,由于没有联网校时导致的,因此只会显示年份。

    不过还是把移植的过程记录下来。

    2.过程

    2.1 失败

    参考交叉编译arm Linux环境下的android-tools-adb_u011281197的博客-CSDN博客_android-tools-adb
    这篇文章,不过看内容描述又是移植openssl又是zlib的,把问题搞得复杂化了。

    而且这个版本的源码包里面依赖的好多库,对交叉编译来说太麻烦了。


    android-properties这个库都不知道在哪移植,索性放弃这个版本。

    2.2 成功

    成功移植的源码、zlib与openssl源码我都已提交的码云上android-tools相关源码
    其中adb与adbd目录下的makefile我已经修改,后续直接修改CC编译器就可以直接make

    需要安装zlib和openssl。

    2.2.1 安装gcc版本zlib

    1.tar zxvf zlib-1.2.11.tar.gz
    2.cd zlib-1.2.11
    3. ./configure

    4.make -j8

    5.make install

    2.2.2 安装gcc版本openssl

    1.tar zxvf openssl-1.0.0e.tar.gz
    2.cd openssl-1.0.0e/
    3. ./Configure shared os/compiler:gcc

    意思我电脑gcc默认是不支持编译编译动态库,没啥影响。
    4.make -j8

    5.make install

    2.2.3 编译测试

    对比下上个版本adbd的makefile

    所依赖的库少很多,减少很多移植难度。

    github上提交的源码已经按照操作流程拷贝了.mk文件,后续只要修改对应目录的Makefile即可。

    操作流程:

    1. 将android-tools-4.2.2/debian/makefiles中相应的.mk文件拷贝到android-tools-4.2.2/core/对应的目录,例如adb,只需将adb.mk拷贝到adb目录并将adb.mk修改为Makefile。
    2. 添加编译器,链接的头文件与.c文件路径记得修改一下。
    3. make

    编译成功。

    adb push到开发板试试看。

  • 相关阅读:
    第二阶段冲刺6
    第二阶段冲刺5
    第二阶段冲刺4
    第二阶段冲刺3
    暑假学习进度七
    暑假学习进度六
    暑假学习进度五
    暑假学习进度四
    暑假学习进度三
    暑假学习进度二
  • 原文地址:https://www.cnblogs.com/erhu-67786482/p/13996167.html
Copyright © 2011-2022 走看看