目录
2、准备(这里参考apollo使用docker编译aarch64版本_Mountain_xiu的博客-优快云博客)
1、目的
目前Apollo官方教程中只提供了X86的编译和安装方法,而我们实际使用中,往往都得在嵌入式中运行,嵌入式的系统一般都是aarch64的。针对这种情况,一般有两种方法:1、直接将整个代码下载到Orin系统中进行编译;2、在X86上编译,然后移植到aarch64;
针对方法一,如果源码编译,意味着要下载整个Apollo源码,而我理解,嵌入式产品应该只包含可执行文件和库,对于源码放在嵌入式系统,其实并不合适。
针对方法二,要么用交叉编译,要么利用aarch64_docker技术,前者改动较多,后者Apollo已提供。
下面针对方法二中的aarch64_docker技术进行详细介绍。
2、准备(这里参考apollo使用docker编译aarch64版本_Mountain_xiu的博客-优快云博客)
2.1 拉取代码
从gitee拉取代码
git clone https://gitee.com/ApolloAuto/apollo.git
git checkout v8.0.0
2.2拉取aarch64镜像
由于我们的目的是想在aarch64_docker中获取编译后的文件,因此我们只需要拉取aarch64镜像,查看cyber_start.sh,aarch64的镜像如下
VERSION_AARCH64="cyber-aarch64-18.04-20201217_1302"
在终端输入
docker pull apolloauto/apollo:cyber-aarch64-18.04-20201217_1302
同时拉取如下的镜像,否则无法启动aarch6的镜像
docker pull multiarch/qemu-user-static:latest
2.3 导入镜像
2.3.1、进入Apollo/docker/scripts, 复制cyber_start.sh为aarch_cyber_start.sh,并对aarch_cyber_start.sh进行修改35行“TARGET_ARCH=aarch64”;
2.3.2、复制cyber_into.sh为aarch_cyber_into.sh,不做修改;
2.4 启动镜像
2.4.1、docker run --rm --privileged multiarch/qemu-user-static:latest --reset -p yes
2.4.2、用管理员权限依次调用aarch_cyber_start.sh和aarch_cyber_into.sh;
3、编译
3.1、调用docker/build/install/intall_glfags_glog.sh, 并利用里面的语句安装glfag和glog库
3.2、采用指令./apollo.sh build cyber 进行编译;
4、aarch_docker中运行
4.1、修改环境变量export GLOG_alsologtostderr=1
4.2、调用指令./bazel-bin/cyber/examples/talker”,结果如图所示
5、Orin上部署
5.1、将PC机中的apollo/bazel-bin/cyber文件夹 拷贝到 orin的任意目录,其实就是拷贝可执行文件;
5.2、将PC机中的apollo/docker/build 文件夹拷贝到 orin的任意目录,主要目的是orin系统中可能有些库文件没有,可通过该目录下的脚本,实现相应库的安装,比如protobuffer,glog,gflags等等;
5.3、将PC机中的apollo/cyber/conf文件夹 拷贝到orin的/apollo/cyber/conf(若没有该路径,就自己创建该路径),目的就是我们在PC机编译的可执行文件会从这个路径下读取配置文件;
5.4、和在docker中的运行方式一样,首先配置terminal的实时输出(
export GLOG_alsologtostderr=1),然后调用相关可执行文件(./cyber/talker)
5.5、如果在运行的过程中,发现有.so找不到,可先通过 find / -name *.so 找到该so路径, 如果找的到,可以通过修改~/.bashrc中的$LD_LIBRARY_PATH,以及更新/etc/ld.so.conf 把相应的路径放置进去,如果找不到,说明整个系统上就没有该文件,得利用步骤2中的脚本安装相应的库文件。
最终运行结果如下图
以上。