SSU_ADB使用说明
1. 交叉编译¶
adb工具编译时依赖于openssl、zlib,编译adb工具之前得先交叉编译openssl和zlib。
1.1. openssl交叉编译¶
1.1.1. 源码下载¶
版本:openssl-1.1.1a
1.1.2. 编译¶
资源包下载完成后,解压进入opensl-1.1.1a目录,执行Configure配置文件配置编译工具链和指定相应的安装路径,如下:
./Configure linux-generic32 no-asm shared --prefix=/home/xxxx/adbd/openssl CROSS_COMPILE=/tools/toolchain/gcc-6.4.0-20220722-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- CC=gcc make clean;make; make install;
编译安装完成后会在prefix配置的目录下release相关的头文件和库文件等文件。
1.2. zlib交叉编译¶
1.2.1. 源码下载¶
版本:1.2.11
1.2.2. 编译¶
资源包下载完成后,解压进入zlib-1.2.11目录,执行configure文件配置安装目录,如下:
./configure --prefix=/home/xxxx/adbd/zlib
修改Makefile编译脚本
CC=arm-linux-gnueabihf-gcc LDSHARED=arm-linux-gnueabihf-gcc CPP=arm-linux-gnueabihf-E AR=arm-linux-gnueabihf-ar
make clean;make; make install;
编译安装完成后会在prefix配置的目录下release相关的头文件和库文件。
1.3. adb交叉编译¶
1.3.1. 源码下载¶
git clone https://github.com/yoannsculo/adbd.git
1.3.2. 编译¶
下载完成后进入到adbd目录下,修改目录下的Makefile脚本,修改编译工具链和配置需要依赖的openssl和zlib的头文件和库文件,修改内容如下:
CC:=arm-linux-gnueabihf-gcc CPPFLAGS+= -I/home/xxxx/adbd/openssl/include CPPFLAGS+= -I/home/xxxx/adbd/zlib/include LDFLAGS+= -L/home/xxxx/adbd/openssl/lib LDFLAGS+= -L/home/xxxx/adbd/zlib/lib make clean;make;
然后会在该目录下生成adbd device端应用程序adbd。
2. 环境搭建¶
2.1. kernel配置¶
ADB的实现依赖于functionfs框架,所以打开相关的配置,编译完成后会生成相应的ko,打开配置如下:
2.2. project修改¶
把交叉编译生成的bin打包进设备,把相应的bin放到project里的相应的release目录下;
config配置完成之后需要在应用层增加一个执行脚本才能使能Function filesystem,脚本内容如下:
#!/bin/sh USB_DEVICE_DIR=/sys/kernel/config/usb_gadget/s-star/ USB_CONFIGS_DIR=/sys/kernel/config/usb_gadget/s-star/configs/default.1 USB_FUNCTIONS_DIR=/sys/kernel/config/usb_gadget/s-star/functions config_adb() { #no attributes, all parameters are set through FunctioFS mkdir ${USB_FUNCTIONS_DIR}/ffs.adb ln -s ${USB_FUNCTIONS_DIR}/ffs.adb ${USB_CONFIGS_DIR}/ffs.adb } # main if [ -d /sys/kernel/config/usb_gadget ] then umount /sys/kernel/config fi mount -t configfs none /sys/kernel/config mkdir $USB_DEVICE_DIR mkdir $USB_CONFIGS_DIR mkdir ${USB_DEVICE_DIR}/strings/0x409 mkdir ${USB_CONFIGS_DIR}/strings/0x409 # 配置configs # MaxPower/bmAttributes echo 0x02 > ${USB_CONFIGS_DIR}/MaxPower echo 0xC0 > ${USB_CONFIGS_DIR}/bmAttributes # 配置strings # manufacturer/product/serialnumber/configuration echo "Linux Foundation" > ${USB_DEVICE_DIR}/strings/0x409/manufacturer echo "ADB gadget" > ${USB_DEVICE_DIR}/strings/0x409/product echo "0123" > ${USB_DEVICE_DIR}/strings/0x409/serialnumber echo "ADB" > ${USB_CONFIGS_DIR}/strings/0x409/configuration # 配置function config_adb # 挂载并运行adbd应用 mkdir -p /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb /customer/adbd & sleep 2 # 配置device # UDC/bDeviceClass/bDeviceProtocol/bDeviceSubClass/bMaxPacketSize0/bcdDevice/bcdUSB/idProduct/idVendor echo 0xef > ${USB_DEVICE_DIR}/bDeviceClass echo 0x01 > ${USB_DEVICE_DIR}/bDeviceProtocol echo 0x02 > ${USB_DEVICE_DIR}/bDeviceSubClass echo 0x00 > ${USB_DEVICE_DIR}/bMaxPacketSize0 echo 0x0419 > ${USB_DEVICE_DIR}/bcdDevice echo 0x0200 > ${USB_DEVICE_DIR}/bcdUSB echo 0x0102 > ${USB_DEVICE_DIR}/idProduct echo 0x1d6b > ${USB_DEVICE_DIR}/idVendor UDC=`ls /sys/class/udc/ | awk '{print $1}'` echo $UDC > ${USB_DEVICE_DIR}/UDC
2.3. patch修改参考¶
具体的kernel配置修改和project bin打包流程修改参考以下patch:
3. 测试¶
Windows host端工具:
platform-tools_r33.0.1-windows.zip
pc上环境安装完成之后,通过usb线将设备与pc端连接起来;通过以下的常用命令可以进行测试:
adb devices --> 枚举adb设备 adb shell --> 连接adb设备的shell adb push/pull --> 与adb设备进行文件传输
4. 常见Q&A¶
Q1:adb (1.0.31 adb client)连接不上设备,要怎么解决?
PC端adb host扫描设备和连接设备时会先获取USB设备VID值,然后与已向usb if申请VID的公司或读取/user/xx/.android/adb_usb.Ini下的VID做匹配,匹配到VID, interfaceClass, interfaceSubClass, interfaceProtocol正确时,说明外接USB设备为ADB gadget,这时候才能正常连接上。
修改方法:若VID没有在已经申请的数组里,可以在个人PC电脑下创建/user/xx/.android/adb_usb.Ini文件并添加相应的VID;设备VID的查询方法在设备管理器中硬件ID中查看;
Q2:板端ADB在Windows 10上正常,但在Windows 7系统下无法识别设备该怎么处理?
这种情况一般是驱动安装的问题,可以使用这个驱动安装工具ADBDriverInstaller.zip 。在板端USB插入PC后,使用该工具查找到直接安装即可。