交叉編譯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到開發板試試看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM