本文介绍在Ubuntu 16.04上基于通用GCC工具链完成远程运维设备端代码移植到Ubuntu上。

准备工作

下载Toolchain

a. 假设我们在Ubuntu的/tmp/目录下通过下面的命令下载toolchain:

  1. $sudo apt-get install gcc

下载过程如下:

b. 测试gcc可用:

image.png

下载设备端代码

a. 假设我们在Ubuntu的/tmp/目录下通过下面的命令下载最新代码包:

  1. git clone https://github.com/alibaba/iot_remote_access.git

注意: 如果您的Ubuntu上并未安装git,请使用以下命令首先安装git: sudo apt-get install -y git

image.png

新增第三方库编译脚本

参考一键编译手册的流程,我们拷贝support_armv7.sh到script目录,重命名为support_ubuntu16_64.sh .

  • 修改support_ubuntu_16_64.sh里的相关变量,依据规则如下:

  • _ToolChainRootDirectory:        指的是ToolChain解压的根目录,一般情况下,ToolChain的根目录包含include/bin/lib等目录
    _CrossPrefix:                   指的所采用的Gcc的前缀,一般在ToolChain的根目录bin下,有*-gcc,比如arm-linux-gnueabi-gcc等。
    _Host:                          指的是交叉编译器所运行的OS信息,一般情况下,可以通过*-gcc -v获取其中的--host值。
    _Target:                        指的是交叉编译器所运行的Target信息,一般情况下,可以通过*-gcc -v获取其中的--target值。
    _TargetBit:                     值的是交叉编译的目标平台的bit数,一般为 32位。
    _NewBoardName:                  新的平台的名称,最好跟脚本名称里包含的board名称一致,假如为myboard。
    

_ToolChainRootDirectory: 在当前文档中,我们是/usr,查看方法如下:
image.png
_CrossPrefix: 当前toolchain,gcc编译的通用前缀是空的。
_Host: 当前toolchain,我们这个是 x86_64-linux-gnu,获取方法如下:

image.png

_Target: 当前toolchain,我们这个是 x86_64-linux-gnu,获取方法如下:

image.png

_TargetBit: 就是设备是32bit的还是64bit的机器,当前文档我们使用的是64bit的。

_NewBoardName: 假设我们重新命名为新设备为ubuntu16_64,这样脚本运行后,我们会在board目录看到ubuntu16_64的子目录。
至此,support_ubuntu16_64.sh需要用户自行修改的内容如下:

image.png

执行第三方库编译脚本

我们在script目录下,直接运行刚才新建的脚本:

/tmp/iot_remote_access/script$ ./support_ubuntu16_64.sh

完整的编译日志可以到这里下载: compile_ubuntu_16_64.log.zip
编译完成后的输出如下:

image.png

此时,我们可以到board目录下,看到已经新增了一个目录ubuntu16_64,并且ubuntu16_64的目录内容如下:

image.png

编译可执行程序

我们在顶层目录下,执行下面的命令,完成编译:

/tmp/iot_remote_access$ CC=gcc make board=ubuntu16_64

可以看到编译结果如下:

image.png

我们通过file命令,可以查看是否编译的产物符合预期:

image.png

如果我们需要让二进制flash占用更小些,可以strip一下:
image.png

编译生成物介绍

image.png

完整的编译框架使用指南请参考: https://www.yuque.com/yuehu/link_iot_edge_lite/xft9x9