近期研发一个新功能,需要用到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
- 1
然后将adbd 下载到开发板试试看。
./adbd &
- 1
可正常运行,并且在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)
- 1
但是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
- 1
就可以查看到设备啦
参考链接:https://blog.csdn.net/u010506504/article/details/42387349