【ARM】简单移植adb与adbd过程记录

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 成功

我使用Ubuntu14.04,arm-oe-linux-gnueabi-gcc交叉编译器进行测试。之前没注意arm-oe-linux-gnueabi-gcc编译器已经包含zlib库和crypto库,难怪我觉得奇怪,我只编译gcc版本进行测试居然也可以链接成功。

后续改为海思编译器进行测试验证,arm-hisiv100nptl-linux-gcc。

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

需要安装zlib和openssl。

2.2.1 交叉编译zlib

1.tar zxvf zlib-1.2.11.tar.gz
2.cd zlib-1.2.11
3. CC=arm-hisiv100nptl-linux-gcc ./configure --prefix=/home/workspace/build/zlib

4.make -j8

5.make install

2.2.2 交叉编译openssl

1.tar zxvf openssl-1.0.0e.tar.gz
2.cd openssl-1.0.0e/
3. ./Configure shared os/compiler:arm-hisiv100nptl-linux-gcc --prefix=/home/workspace/build/openssl

意思默认是不支持编译编译动态库,没啥影响。
【如果有遇到编译异常,把shared选项去除。】

4.make -j8

5.make install

如果出现:

解决办法:

rm -f /usr/bin/pod2man

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

对应的makefile稍微做了修改:


# Makefile for adb; from https://heiher.info/2227.html
# CC:=arm-oe-linux-gnueabi-gcc
CC:=arm-hisiv100nptl-linux-gcc

VPATH+= ./
SRCS+= adb.c
SRCS+= adb_client.c
SRCS+= adb_auth_host.c
SRCS+= commandline.c
SRCS+= console.c
SRCS+= file_sync_client.c
SRCS+= fdevent.c
SRCS+= get_my_path_linux.c
SRCS+= services.c
SRCS+= sockets.c
SRCS+= transport.c
SRCS+= transport_local.c
SRCS+= transport_usb.c
SRCS+= usb_linux.c
SRCS+= usb_vendors.c
SRCS+= utils.c

VPATH+= ../libcutils
SRCS+= abort_socket.c
SRCS+= socket_inaddr_any_server.c
SRCS+= socket_local_client.c
SRCS+= socket_local_server.c
SRCS+= socket_loopback_client.c
SRCS+= socket_loopback_server.c
SRCS+= socket_network_client.c
SRCS+= list.c
SRCS+= load_file.c

VPATH+= ../libzipfile
SRCS+= centraldir.c
SRCS+= zipfile.c


CPPFLAGS+= -DADB_HOST=1
CPPFLAGS+= -DHAVE_FORKEXEC=1
CPPFLAGS+= -DHAVE_SYMLINKS
CPPFLAGS+= -DHAVE_TERMIO_H
CPPFLAGS+= -I./
CPPFLAGS+= -I../include
# zlib openssl 头文件与库搜索路径,根据你实际编译安装的路径为准。
CPPFLAGS+= -I/home/workspace/build/openssl/include
CPPFLAGS+= -I/home/workspace/build/zlib/include

LDFLAGS+= -L/home/workspace/build/zlib/lib
LDFLAGS+= -L/home/workspace/build/openssl/lib
LIBS+= -lc -lpthread -lz -lcrypto

OBJS= $(SRCS:.c=.o)

all: adb

adb: $(OBJS)
    $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)

clean:
    rm -rf $(OBJS) adb

编译成功。

将交叉编译的zlib与openssl的库拷贝到设备的/usr/lib,或者在设备端设置环境变量export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/flash/arm_soft/zlib/lib
/mnt/flash/arm_soft/zlib/lib为你动态库实际想要放置设备的路径。

adb push到开发板试试看。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
f_adbadbd是与安卓设备通信的关键组件。f_adb是指PC端的adb server,而adbd是指手机端的守护进程。它们通过建立连接进行通信。当PC端的adb client发送命令时,adb server会将命令转发给adbd执行。如果adbd以普通权限执行,有些需要root权限的操作可能无法执行。 要连接手机设备,可以在电脑端打开cmd窗口,进入adb.exe所在目录(sdk/platform-tools目录下),然后输入adb connect a.b.c.d,其中a.b.c.d是手机端的IP地址,可以在Wifi_ADB中找到。这样就可以建立PC端和手机端的连接了。 另外,可以使用adb命令来进行一些其他操作,比如从模拟器或设备复制文件或目录,启动和停止adb服务,以及发出shell命令。例如,通过adb start-server命令可以启动adb服务,而通过adb kill-server命令可以关闭adb服务。同时,可以使用adb shell命令来执行shell命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [adb1.0.26包含fastboot.exe](https://download.csdn.net/download/seostar/10997680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [android_ADB 调试工具总结](https://blog.csdn.net/Jun_P/article/details/126562843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值