apollo使用docker编译aarch64版本
1、准备
1.1 拉取代码
建议:
从gitee中拉取apollo代码,github上拉取代码非常的慢
git clone https://gitee.com/ApolloAuto/apollo.git
git checkout v6.0.0
使用v6.0.0分支
为什么使用v6.0.0分支?我先前用v5.5.0里面的aarch64的docker是3年前更新的,自己测试过这个docker,无法正常编译。所以被我舍弃掉。v5.5.0中docker版本如下:
VERSION_X86_64="dev-18.04-x86_64-20191111_1530"
VERSION_AARCH64="dev-aarch64-20170927_1111"
1.2 拉取镜像
查看v6.0.0版本中镜像名如下:
VERSION_X86_64="dev-x86_64-18.04-20200914_0742"
VERSION_AARCH64="dev-aarch64-18.04-20200915_0106"
这个版本的镜像都是2020年做的,应该能够用,于是从Docker Hub中拉取相应版本。
在终端中输入以下指令进行拉取:
docker pull apolloauto/apollo:dev-x86_64-18.04-20200914_0742
docker pull apolloauto/apollo:dev-aarch64-18.04-20200915_0106
注意:
因为笔记本上面是x86架构,docker中是aarch架构。需要拉取另外一个镜像,否则无法启动aarch64的镜像。
docker pull multiarch/qemu-user-static:latest
1.3 导入镜像
- 拷贝dev_start.sh dev_into.sh
将dev_start.sh以及dev_into.sh拷贝一份分别命名为aarch_start.sh 以及 aarch_into.sh。 - aarch_start.sh中指定加载aarch64版本镜像
# TARGET_ARCH=“$(uname -m)”
TARGET_ARCH=aarch64
- aarch_start.sh屏蔽map以及其他镜像
屏蔽dev_start.sh中挂载的map_volumes以及other_volumes,就不会去pull其他的镜像。
# mount_map_volumes
# mount_other_volumes
- 启动镜像
注意:
在直接启动aarch64的镜像之前需要启动以下multiarch/qemu-user-static:latest镜像。
docker run --rm --privileged multiarch/qemu-user-static:latest --reset -p yes
再使用以下指令从本地启动上一步骤拉取的镜像。-l指令
./docker/scripts/dev_start.sh -l
- 进入镜像
./docker/scripts/aarch_into.sh
2、编译
2.1 编译cyber
在终端中输入编译cyber指令
./apollo.sh build cyber
等待一段时间后即可以编译完成,如果遇到错误,可以试着将/apollo/.cache删除。再重新编译。因为可能是你在x86架构下面也进行了编译,导致出错。所以,我修改了以下dev_start.sh 和 dev_into.sh中。可以在启动时链接到不同的路径,不需要删除.cache重新编译。后面会有相关代码链接。
3、部署
3.1 将相关文件上传到xavier
具体如下:
注意:
找不到libPocoFoundation.so.71库。将libPocoFoundation.so建立一个软连接即可。
cd /usr/lib
sudo ln -svf libPocoFoundation.so libPocoFoundation.so.71
4、运行
4.1 准备
- 拉取aarch64库
git clone https://gitee.com/mountain_xiu/apollo_aarch64_bin.git
- 建立软连接
sudo ln -svf path_to_apollo_aarch64_bin /apollo
- source环境变量
source /apollo/apollo.env
4.2 运行
- 运行talker
cd apollo
./bazel-bin/cyber/examples/talker
- cyber_monitor显示数据