mobile_readme.md 3.0 KB
Newer Older
1

2
# Paddle-lite-mobile开发指南
3

4
## 交叉编译
5

6
Paddle-lite-mobile 推荐在我们的Docker环境下交叉编译,减少环境配置上的不必要问题。
7 8 9 10

### 1. 拉取代码创建容器

```shell
11
$ git clone https://github.com/PaddlePaddle/Paddle.git
12 13 14
$ git checkout incubate/lite
```

15 16
编译docker环境:
`docker build --file paddle/fluid/lite/tools/Dockerfile.mobile --tag paddle-lite-mobile:latest . `
17

18 19 20 21
### 主要cmake选项
                
- `ARM_TARGET_OS` 代表目标操作系统, 目前支持 "android" "armlinux", 模型是Android
- `ARM_TARGET_ARCH_ABI` 代表ARCH, 目前支持 "arm64-v8a" "armeabi-v7a"。 模型是arm64-v8a
22

23
### 编译
24

25
基于`paddle-lite-mobile`镜像创建容器,并在容器内外建立目录映射关系:
26 27

```shell
28
$ docker run -it --name <yourname> --net=host --privileged -v <your-directory-path>:<your-directory-path> paddle-lite-mobile bash
29 30
```

31
参考build.sh下的 cmake arm编译需要的平台。
32

33
参考示例:
34 35

```shell
36
#!/bin/bash
37
cmake .. \
38 39 40 41 42 43 44 45 46
    -DWITH_GPU=OFF \
    -DWITH_LITE=ON \
    -DLITE_WITH_CUDA=OFF \
    -DLITE_WITH_X86=OFF \
    -DLITE_WITH_ARM=ON \
    -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON \
    -DWITH_TESTING=ON \
    -DWITH_MKL=OFF \
    -DARM_TARGET_OS="android" -DARM_TARGET_ARCH_ABI="arm64-v8a"
47 48 49 50 51

# fc层单测
make test_fc_compute_arm -j

```
52
### 在Android上执行
53

54 55
#### 1. 在模拟器上执行
#### 2. 上传编译文件到手机上
56 57 58 59

键盘上`crtl+q+p`同时摁下,切换到容器外(容器还在后台运行),将刚刚编译出的程序`adb push`到手机上。USB线连接手机,确保`adb devices`可以找到手机设备。
```shell
$ cd <paddle-repo>
60
$ adb push ./build/paddle/fluid/lite/kernels/arm/test_fc_compute_arm /data/local/tmp/
61 62 63 64 65 66

# 进入手机
$ adb shell # 若多台手机设备先用命令adb devices查看目标手机的序列码
$ cd /data/local/tmp

# 执行编译的程序
67
$ ./test_fc_compute_arm
68 69
```

70
### 在ARM LINUX下执行
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

TBD

# Q&A

#### 1. adb命令找不到:adb: command not found  
解决:`sudo apt install -y adb`   

#### 2. 明明手机USB连接电脑却显示找不到设备:`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服务:
```shell
$ sudo chmod a+rx /etc/udev/rules.d/70-android.rules
$ sudo service udev restart
```
第五步:重启adb服务,adb devices有设备说明adb安装成功。  
```shell
$ adb kill-server
$ sudo adb start-server
$ adb devices

# 若显示连接的手机设备,则表示成功
List of devices attached
5cb00b6 device
```