交叉编译并移植Android工具adb与adbd过程

19
五月
2021

Android tool 移植adb与adbd的记录

近期研发一个新功能,需要用到Android的adbd服务。如是尝试着交叉编译adbd,由于目前的使用场景是PC端通过usb连接到开发板上,利用adb push/pull 进行文件的传输。故我只需要交叉编译adbd服务即可。

我使用的是Ubuntu18.04,交叉编译器为T2、T7。

成功移植的Android-tools源码,zlib和OpenSSL源码我都提交到码云上:https://gitee.com/jackackcheng/android-tools-4.2.2

其中core/adb,core/adbd目录下的Makefile文件我已经修改,后续可直接修改CC编译器就可以直接make

首先需要交叉编译,安装zlib和OpenSSL

交叉编译zlib

1. tar zxvf zlib-1.2.11.tar.gz
2. cd zlib-1.2.11
3. CC=/toolchain/T2/bin/arm-linux-gnueabi-gcc ./configure --prefix=/home/a/build/zlib/T2
4. make -j6
5. make install

交叉编译OpenSSL

1. tar zxvf openssl-1.0.0e.tar.gz
2. cd openssl-1.0.0e/
3. ./Configure shared os/compiler:/toolchain/T2/bin/arm-linux-gnueabi-gcc --prefix=/home/a/build/openssl/T2
	You gave the option 'shared'....
	【如果有遇到编译异常,把shared选项去除】
	在实际的编译工作中,使用A33i平台的交叉编译链会编译不通过,还未找到具体原因
4. make -j6
5. make install 
	如果出现 POD document had syntax errors at /usr/bin/pod2man line 71
	则 rm -f /usr/bin/pod2man

编译测试

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

操作流程:

​ 1.将android-tools-4.2.2/debian/makefiles 中相应的.mk文件拷贝到android-tools-4.2.2/core/ 对应的目录中。例如adb,只需将adb.mk文件拷贝到adb目录下并修改为Makefile。

​ 2.添加编译器,设置头文件和库文件路径,修改.c文件的路径

​ 3.make

下面贴出adbd目录下的Makefile文件,修改CC和设置lib和OpenSSL头文件和库文件

# Makefile for adbd
#CC:=arm-oe-linux-gnueabi-gcc
#修改成自己的编译工具链
CC:=/toolchain/T2/bin/arm-linux-gnueabi-gcc

VPATH+= ./
SRCS+=  adb.c
SRCS+=	backup_service.c
SRCS+=	fdevent.c
SRCS+=	transport.c
SRCS+=	transport_local.c
SRCS+=	transport_usb.c
SRCS+=	adb_auth_client.c
SRCS+=	sockets.c
SRCS+=	services.c
SRCS+=	file_sync_service.c
SRCS+=	jdwp_service.c
SRCS+=	framebuffer_service.c
SRCS+=	remount_service.c
SRCS+=	usb_linux_client.c
SRCS+=	log_service.c
SRCS+=	utils.c
SRCS+=	base64.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
SRCS+= android_reboot.c

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


CPPFLAGS+= -O2 -g -Wall -Wno-unused-parameter
CPPFLAGS+= -DADB_HOST=0 -DHAVE_FORKEXEC=1 -D_XOPEN_SOURCE -D_GNU_SOURCE -DALLOW_ADBD_ROOT=1
CPPFLAGS+= -DHAVE_SYMLINKS -DBOARD_ALWAYS_INSECURE
CPPFLAGS+= -DHAVE_TERMIO_H
CPPFLAGS+= -DADBD_NON_ANDROID
CPPFLAGS+= -I./
CPPFLAGS+= -I../include

#设置zlib OpenSSL 头文件和库文件搜索路径
CPPFLAGS+= -I/home/a/build/openssl/T2/include
CPPFLAGS+= -I/home/a/build/zlib/T2/include

LDFLAGS+= -L/home/a/build/openssl/T2/lib
LDFLAGS+= -L/home/a/build/zlib/T2/lib
#设置结束

LIBS+= -lc -lpthread -lz -lcrypto -lcrypt

OBJS= $(patsubst %, %.o, $(basename $(SRCS)))

all: adbd

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

#%.o:
#	echo $(OBJS)
#	$(CC) -o $@ $(CPPFLAGS) $(CFLAGS) -c $(wildcard $(addprefix $(CURDIR)/../*/,$(patsubst %.o, %.c, $@)))
clean:
	rm -rf $(OBJS) adbd

编译成功后,将交叉编译的zlib和openssl的库拷贝到设备的/usr/lib或者/lib,也可在设备端设置环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/flash/mypath/zlib/lib

然后将adbd 下载到开发板试试看。

./adbd &

可正常运行,并且在PC端可以通过adb push/pull 与板子传输文件。

参考链接:https://blog.csdn.net/chenwr2018/article/details/108118047

开发板连接到PC,lsusb可以查看到设备,adb devices却找不到设备

在PC端通过lsusb可以查看到设备

Bus 001 Device 025: ID 1f3a:1002 Onda (unverified)

但是adb devices -l 却查看不到设备

第一步:

sudo vim /etc/udev/rules.d/50-android.rules
输入以下文本:
SUBSYSTEM=="usb",SYSFS{"Onda"}=="1f3a",MODE="0666"

第二步:

sudo chmod a+x /etc/udev/rules.d/50-android.rules
sudo /etc/init.d/udev restart

第三步:

sudo adb devices -l

就可以查看到设备啦

参考链接:https://blog.csdn.net/u010506504/article/details/42387349

TAG

网友评论

共有访客发表了评论
请登录后再发布评论,和谐社会,请文明发言,谢谢合作! 立即登录 注册会员