lite/tools/mobile_readme.md
Paddle-lite-mobile 推荐在我们的Docker环境下交叉编译,减少环境配置上的不必要问题。
$ git clone https://github.com/PaddlePaddle/Paddle.git
$ git checkout incubate/lite
编译docker环境:
docker build --file lite/tools/Dockerfile.mobile --tag paddle-lite-mobile:latest .
ARM_TARGET_OS 代表目标操作系统, 目前支持 "android" "armlinux", 默认是AndroidARM_TARGET_ARCH_ABI 代表ARCH,支持输入"armv8"和"armv7",针对OS不一样选择不一样。
-DARM_TARGET_OS="android" 时
-DARM_TARGET_OS="armlinux" 时
eabihf且-march=armv7-a -mfloat-abi=hard -mfpu=neon-vfpv4 。eabi且-march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv4。ARM_TARGET_LANG 代表目标编译的语言, 默认为gcc,支持 gcc和clang两种。基于paddle-lite-mobile镜像创建容器,并在容器内外建立目录映射关系:
$ docker run -it --name <yourname> --net=host --privileged -v <your-directory-path>:<your-directory-path> paddle-lite-mobile bash
参考build.sh下的 cmake arm编译需要的平台。
参考示例:
#!/bin/bash
cmake .. \
-DLITE_WITH_X86=OFF \
-DLITE_WITH_ARM=ON \
-DWITH_TESTING=ON \
-DWITH_MKL=OFF \
-DARM_TARGET_OS="android" -DARM_TARGET_ARCH_ABI="arm64-v8a"
# fc层单测
make test_fc_compute_arm -j
# 创建Android avd (armv8)
$ echo n | avdmanager create avd -f -n paddle-armv8 -k "system-images;android-24;google_apis;arm64-v8a"
# 启动Android armv8 emulator
$ ${ANDROID_HOME}/emulator/emulator -avd paddle-armv8 -noaudio -no-window -gpu off -verbose &
# 如果需要执行armv7版本,如下:
# $ echo n | avdmanager create avd -f -n paddle-armv7 -k "system-images;android-24;google_apis;armeabi-v7a"
# $ ${ANDROID_HOME}/emulator/emulator -avd paddle-armv7 -noaudio -no-window -gpu off -verbose &
# 退出所有模拟器
adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done
键盘上crtl+q+p同时摁下,切换到容器外(容器还在后台运行),将刚刚编译出的程序adb push到手机上。USB线连接手机,确保adb devices可以找到手机设备。
$ cd <paddle-repo>
$ adb push ./build/lite/kernels/arm/test_fc_compute_arm /data/local/tmp/
# 进入手机
$ adb shell # 若多台手机设备先用命令adb devices查看目标手机的序列码
$ cd /data/local/tmp
# 执行编译的程序
$ ./test_fc_compute_arm
拉取Linux arm64镜像
$ docker pull multiarch/ubuntu-core:arm64-bionic
运行容器并在内外建立目录映射关系
$ docker run -it --name <yourname> -v <your-directory-path>:<your-directory-path> multiarch/ubuntu-core:arm64-bionic
进入bin目录,并运行并文件
$ cd <bin-dir>
$ ./test_fc_compute_arm
解决:sudo apt install -y adb
error: device not found解决:
第一步lsusb命令查看插上拔下手机前后usb设备的变化情况,确定手机设备的ID。 假设lsusb命令执行显示Bus 003 Device 011: ID 2717:9039 ,则ID是0x2717;
第二步:创建adb_usb.ini文件并追加写入ID:echo 0x2717 >> ~/.android/adb_usb.ini;
第三步:给手机添加权限sudo vim /etc/udev/rules.d/70-android.rules,根据第一步骤取得的ATTRS{idVendor}和ATTRS{idProduct}这两个属性值,在该文件加入该设备信息:
SUBSYSTEM=="usb", ATTRS{idVendor}=="2717", ATTRS{idProduct}=="9039",MODE="0666";
第四步:重启USB服务:
$ sudo chmod a+rx /etc/udev/rules.d/70-android.rules
$ sudo service udev restart
第五步:重启adb服务,adb devices有设备说明adb安装成功。
$ adb kill-server
$ sudo adb start-server
$ adb devices
# 若显示连接的手机设备,则表示成功
List of devices attached
5cb00b6 device