交叉编译arm Linux环境下的android-tools-adb

2023-11-19

前言

    项目使用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.mkcore/adb 目录下,并改名为 Makefile 。然后在终端命令行中运行 export CC=arm-linux-gnueabihf-gcc 然后再运行 make 命令,即可编译生成 armhf 平台对应的 adb 可执行文件。

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

    附上我上传到csdn的完整资源链接,可以一次性下载 android-tools-adb, openssl 和 zlib 全部资源:https://download.csdn.net/download/u011281197/10401217

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交叉编译arm Linux环境下的android-tools-adb 的相关文章

随机推荐

  • 解构与迭代器

    开始 let x y x 1 y 2 正常的写法 let x y x 1 y 2 console log x y 1 2 let x y 1 2 console log x y 1 2 加上iterator方法 如果我们希望这段代码不报错
  • 计算机二级中的9种运算问题:笛卡尔积,自然连接,交,并,选择,投影。。。

    这九种运算分为7种二元运算 2种一元运算 用文字和例子来分别解释上面几个概念 7种二元运算 1 笛卡儿积 已知 如果算X1和X2的笛卡尔积 则 首先将属性 或者叫标题 A B C 和 D E 和在一块形成新的一组标题
  • python安装bert模型_BERT模型的简单使用(Python)

    不涉及原理 只是快速开始使用 更详细的请参考官方文档 https bert as service readthedocs io en latest index html 下载预训练模型 下载可能需要一些时间 等待的时候可以先去下一步把pyt
  • 某度翻译最新版Acs-Token逆向分析

    某度翻译最新版Acs Token逆向分析 免责声明 本文章中所有内容仅供学习交流使用 不用于其他任何目的 不提供完整代码 抓包内容 敏感网址 数据接口等均已做脱敏处理 严禁用于商业用途和非法用途 否则由此产生的一切后果均与作者无关 擅自使用
  • MySQL题库(4)

    301 考虑 Web 项目的安全性 MD5 算法的不可逆性可以保证加密数据的绝对安全 判断 题 A 正确 B 错误 正确答案 B 302 符合范式的数据表设计比反范式的数据表查询性能更高 判断题 A 正确 B 错误 正确答案 B 303 相
  • 关于文件描述符的close-on-exec标志位

    引言 我们在使用一些系统调用对文件描述符进行操作时 常常会碰到是否为文件描述符赋予CLOEXEC属性的情况 例如 open函数中的flags参数可指定O CLOEXEC标志 int open const char pathname int
  • 基于TF-IDF算法个人文件管理系统——机器学习+人工智能+神经网络(附Python工程全部源码)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 模块实现 1 数据预处理 2 词频计算与数据处理 3 数据计算与对比验证 系统测试 工程源代码下载 其它资料下载 前言 本项目旨在通过应用TF IDF算法 将新下载的课件进行自动分
  • SQL中使用IN关键字时,因空数组替换参数导致了SQL语法错误

    场景 在近期的工作中 发现了这么一个问题 在某一搜索页面 需要同时查询多种订单类型 但在页面中未选择任何订单类型 API通过UI端传来的空订单类型数组进行查询时 抛出了SQL的语法错误 原SQL SELECT FROM dbo order
  • go get 下载包时提示 could not read Username

    问题 在下载公司内部的包时 出现如下提示 go get module example com somepkg common git ls remote q origin in somepath xxxxxxxxxxxxxxxxxxxxxxx
  • python 线程锁

    目录 1 线程安全介绍 2 threading5种常见锁 2 1 同步锁 互斥锁 Lock 1 基本介绍及相关方法 2 给案例加lock锁 3 with语句 2 2 递归锁Rlock 1 基本介绍及相关方法 2 给案例加递归锁 3 with
  • tensorflow InceptionNet

    InceptionNet 即 GoogLeNet 诞生于 2015 年 旨在通过增加网络的宽度来提升网络的能 力 与 VGGNet 通过卷积层堆叠的方式 纵向 相比 是一个不同的方向 横向 显然 InceptionNet 模型的构建与 VG
  • react之纯函数、函数组件、类组件、纯组件

    一 纯函数 Pure Function 定义 一个函数的返回结果只依赖于它的参数 并且在执行的过程中没有副作用 我们就把该函数称作纯函数 特点 1 函数的返回结果只依赖与它的参数 同一个输入只能有同一个输出 let foo a b gt a
  • numpy模块中axis的理解——以np.argmax为例

    numpy模块中axis的理解 以np argmax为例 np argmax参数数量及其作用 axis不同情况的示例 np argmax参数数量及其作用 np argmax是用于取得数组中每一行或者每一列的的最大值 常用于机器学习中获取分类
  • 注意力机制的分类

    目录 1 什么是注意力机制 2 注意力机制分类 3 代表算法 1 空间域代表算法 2 通道域代表算法 3 混合域代表算法 DANet CBAM 4 注意力机制的应用 1 什么是注意力机制 注意力机制通俗的讲就是把注意力集中放在重要的点上 而
  • linux内核驱动开发笔试题

    linux内核驱动开发笔试题 一 一些常规中举的C考题 第一题 写出下述程序结果 int m 3 1 4 7 2 5 8 3 6 9 int i j k 2 for i 0 i lt 3 i printf d m k i 问题所在 本题考点
  • redis默认过期时间:redis默认的是永不过期

    今天同事问我redis默认过期时间是多久 突然想起几年前想查一下redis默认过期时间是多久 搜到的博文全是打着 redis默认过期时间是多久 的标题在讲redis过期原理 正好闲来没事 又搜了下 几年过去了 还是一样 哪来那么多文不对题的
  • StackExchange.redis 实现模糊匹配批量查询

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net Helloantoherday article details 81286685 如果
  • 一、C++中queue和deque的区别

    1 先明白队尾和队首 back和front的联系 无论从哪个方向看 插入的地方就是队尾 所有的操作名字都与back有联系 插入端的另一端就是队首 所有的操作名字都与front有联系 其中queue的操作是 queue
  • jdbc连接mysql数据库,设置字符集编码

    jdbc连接mysql数据库 设置字符集编码 1 第一种方法 JDBC连接数据库时常会出现乱码的情况 那是因为我们的字符级与数据库的字符级不一样 我们通过定义url地址的时候定义字符级 sql代表你的数据库名称 所以当这种情况遇到乱码的时候
  • 交叉编译arm Linux环境下的android-tools-adb

    前言 项目使用Rockchip的3399挖掘机demo板 使用官方提供的Debian Linux SDK 官方github源码链接 https github com rockchip linux 进行开发定制 当前需要将Android上的调