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

1 篇文章 0 订阅
1 篇文章 0 订阅

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 //如果之前有编译过其他平台的,先make clean一下
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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值