Android使adb作为host运行在arm64平台

交叉编译adb-tools
# souce build/envsetup.sh
# lunch user-debug

一、交叉编译openssl库
1.下载openssl
# git clone https://github.com/openssl/openssl.git

2.编译
# mkdir output
# ./config no-asm -shared --prefix=$(pwd)/output
说明:no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程。
    -shared  生成动态链接库。
    --prefix  指定安装编译生成文件的路径,如不指定则默认为当前目录。
<1>.将根目录下Makefile第74行 “CROSS_COMPILE=” 改为: “CROSS_COMPILE=aarch64-linux-android-”
<2>.找到Makefile中有 “-m64” 的地方,全删了(共2处)。

//链接交叉编译器.so系统库位置
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9
//链接交叉编译器.h系统头文件位置
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/include

<3>.如果编译报错没有.h文件报错解决:
# cp prebuilts/ndk/current/platforms/android-21/arch-arm64/usr/include/* prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/include

<4>.如果编译报错没有.so文件报错解决:
# cp prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9 prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/

# make -j16
<5>.编译完成后生成:libcrypto.so、libssl.so,拷贝到交叉编译器.so系统库位置
# cp libcrypto.so libssl.so prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9

<6>.头文件拷贝到交叉编译器.h系统头文件位置
# cp -rf openssl/include prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/include

二、交叉编译zlib-1.2.8库
1.下载zlib-1.2.8
# git clone https://github.com/fmrico/zlib-1.2.8.git

2.编译
# mkdir output
# ./configure —-prefix=$(pwd)/output
<1>.修改Makefile
TOOLSCHAIN=aarch64-linux-android-
将CC=gcc 改为: CC=$(TOOLSCHAIN)gcc
<2>.将Makefile出现gcc的地方全部改为:$(CC)
 将gcc全部改为:$(CC)
<3>.将
 AR=ar                                                                                                                                                                                                                                                                                                                                                                                                  
 RANLIB=ranlib
 改为:
 AR=$(TOOLSCHAIN)ar                                                                                                                                                                                                                                                                                                                                                                                                  
 RANLIB=$(TOOLSCHAIN)ranlib

# make -j16
<4>拷贝.so库到交叉编译系统库
# mv libz.so.1.2.8 libz.so
# cp libz.so prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9

三、android-tools
1.下载android-tools会有三个core  debian  extras目录
# git clone https://git.launchpad.net/~phablet-team/+git/android-tools

2.编译
# cp debian/makefiles/adb.mk core/adb/
# cd core/adb
# mv adb.mk Makefile
<1>.修改Makefile
CC=aarch64-linux-android-gcc                                                                                                                                                                                    
VPATH+= ../adb                                                                                                                                                                                                  
SRCS+= adb.c                                                                                                                                                                                                    
SRCS+= console.c                                                                                                                                                                                                
SRCS+= transport.c                                                                                                                                                                                              
SRCS+= transport_local.c                                                                                                                                                                                        
SRCS+= transport_usb.c                                                                                                                                                                                          
SRCS+= commandline.c                                                                                                                                                                                            
SRCS+= adb_client.c                                                                                                                                                                                             
SRCS+= adb_auth_host.c                                                                                                                                                                                          
SRCS+= sockets.c                                                                                                                                                                                                
SRCS+= services.c                                                                                                                                                                                               
SRCS+= file_sync_client.c                                                                                                                                                                                       
SRCS+= get_my_path_linux.c                                                                                                                                                                                      
SRCS+= usb_linux.c                                                                                                                                                                                              
SRCS+= usb_vendors.c                                                                                                                                                                                            
SRCS+= fdevent.c                                                                                                                                                                                                
                                                                                                                                                                                                                
VPATH+= ../libcutils                                                                                                                                                                                            
SRCS+= load_file.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                                                                                                                                                                                  
                                                                                                                                                                                                                
CPPFLAGS+= -DADB_HOST=1                                                                                                                                                                                         
CPPFLAGS+= -DHAVE_FORKEXEC=1                                                                                                                                                                                    
CPPFLAGS+= -DHAVE_SYMLINKS                                                                                                                                                                                      
CPPFLAGS+= -DHAVE_TERMIO_H                                                                                                                                                                                      
CPPFLAGS+= -I.                                                                                                                                                                                                  
CPPFLAGS+= -I../adb                                                                                                                                                                                             
CPPFLAGS+= -I../include                                                                                                                                                                                         
CPPFLAGS+= -I../../../external/zlib                                                                                                                                                                             
                                                                                                                                                                                                                
LIBS+= -fPIC -pie -fPIE -lc -lcrypto -lz -pthread                                                                                                                                                               
                                                                                                                                                                                                                
OBJS= $(SRCS:.c=.o)                                                                                                                                                                                             
                                                                                                                                                                                                                
all: adb                                                                                                                                                                                                        
adb: $(OBJS)                                                                                                                                                                                                    
        $(CC) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)                                                                                                                                                                  
clean:                                                                                                                                                                                                          
        rm -rf $(OBJS) adb

<2>.注释掉:ret = getlogin_r(username, sizeof(username));
# emacs android-tools/core/adb/adb_auth_host.c
注释掉即可:
//ret = getlogin_r(username, sizeof(username));

# make -j16

编译出adb libcrypto.so libssl.so libz.so等库,把他们push到/system/bin和/system/lib64即可。

这样Android就可以作为host运行adb,可能和本机的adbd端口(改端口号)冲突,可先杀死adbd即可.

 

你可能感兴趣的:(Android,系统调试方法)