MDC610交叉编译

1.准备工作

环境准备

|

系统架构

|

X86_64

|
| --- | --- |
|

操作系统

|

Ubuntu 18.04及以上版本

须知:

MDC平台工具链仅支持Ubuntu 18.04版本。

|

获取软件包

|

软件包

|

说明

|
| --- | --- |
|

MDC_SDK-{version}.tar.gz

|

MDC二次开发包,包含gcc和clang编译器、编译框架和平台ARXML文件。

|
|

MDC_SDK-{version}_llvm.tar.gz

|

用于安装llvm编译器。

|
|

MDC_AOS_rpmlist-{version}.tar.gz

|

用于在交叉编译环境中安装第三方库。

|
|

MDC_AOS_rpmlist-{version}_llvm.tar.gz

|

用于在安装了llvm的编译环境中安装第三方库。

|
|

MDC-{version}.tar.gz

|

MDC产品包,包含AP平台包,OS镜像,以及MCU、CPLD、BIOS等固件包。

|

2.搭建交叉编译环境

  1. 在开发环境中,以普通用户打开终端。

  2. 进入SDK包(MDC_SDK-{version}.tar.gz)所在目录,并将SDK包解压至指定目录。

    1. 执行命令sudo mkdir -p /usr/local,创建目录“/usr/local”。

    2. 执行命令sudo tar -xf MDC_SDK-{version}.tar.gz -C /usr/local**,将SDK安装包解压至“/usr/local”目录下,解压即安装。

      解压得到的“mdc_sdk”目录说明如下:

      |

      目录

      |

      说明

      |
      | --- | --- |
      |

      dp_gea

      |

      存在GEA系统环境所需交叉编译器gcc、g++等。

      |
      |

      manifest

      |

      存在MDC平台的ARXML文件,Sample等。

      |
      |

      env_check.py

      |

      用于检查Ubuntu、cmake和make版本是否符合要求的脚本。

      |

  3. 确认Ubuntu系统版本为18.04,且已安装满足版本要求的构建/调试工具cmake(3.10.2及以上)和make(4.1及以上)。

    在“/usr/local/mdc_sdk”目录下执行校验版本号的脚本命令./env_check.py,回显示例如下,若提示不符合版本要求,请根据要求安装或升级至匹配版本。

    <pre class="screen" style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">[INFO]cmake version is OK, the current version is 3.10.2
    [INFO]make version is OK, the current version is 4.1
    [INFO]Ubuntu version is OK, the current version is Ubuntu 18.04.6 LTS \n \l</pre>

  4. 执行如下命令,配置环境变量。

    export PATH=/usr/local/mdc_sdk/dp_gea/mdc_cross_compiler/bin:$PATH

  5. 依次执行如下命令,确认环境变量配置正确。

    1. which aarch64-target-linux-gnu-gcc,通过回显确认gcc的安装路径,即步骤4中的安装路径。

      <pre class="screen" style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">/usr/local/mdc_sdk/dp_gea/mdc_cross_compiler/bin/aarch64-target-linux-gnu-gcc</pre>

    2. which aarch64-target-linux-gnu-g++,通过回显确认g++的安装路径,即步骤4中的安装路径。

      <pre class="screen" style="margin: 10px 0px 0px; padding: 0px; font-family: ConfluenceInstalledFont, monospace;">/usr/local/mdc_sdk/dp_gea/mdc_cross_compiler/bin/aarch64-target-linux-gnu-g++</pre>

3.构建应用

下文以编译helloworld.c文件为例,介绍代码的编译和运行步骤。

  1. 编写代码,即编辑helloworld.c文件。代码示例如下:
#include <stdio.h>

int main(void)
{
        printf("Hello World!\n");
        return 0;
}

2.在开发环境中执行命令export CC=aarch64-target-linux-gnu-gcc,指定编译器
3.创建并编写构建文件(Makefile)。

src_file=helloworld.c
elf_file=helloworld
all:
        ${CC} -I ${SYSROOT}/usr/include -L ${SYSROOT}/usr/lib64 ${src_file} -o ${elf_file}
  1. 编译helloworld.c文件。

    进入helloworld.c文件所在目录,依次执行如下命令:

    1. export SYSROOT=/usr/local/mdc_sdk/dp_gea/mdc_cross_compiler/sysroot/,指定编译目录。
    2. make,开始编译。
  2. 在“helloworld.c”文件所在目录执行命令ls,若返回结果含有可执行文件(helloworld),表示编译成功。

  3. 以SSH连接方式登录MDC系统环境(用户名和密码请参考《调测指南》的“登录操作系统”章节),并在AOS运行环境中运行helloworld。

总结交叉编译脚本,可直接编译cmake工程如下:

(1)build_mdc.sh

rm -rf ./build
mkdir build
cd ./build
cmake  -DCMAKE_SYSTEM_PROCESSOR="aarch64" \
        -DCMAKE_TOOLCHAIN_FILE=/usr/local/mdc_sdk/dp_gea/toolchain.cmake \
    ..

make -j8

(2)toolchain.cmake

get_filename_component(TOOLCHAIN_FILE_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH)

set(SCFI_SDK_TYPE dp_gea)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(SCFI_REPO ${TOOLCHAIN_FILE_PATH})

set(SCFI_MDC_SDK ${SCFI_REPO}/mdc_cross_compiler/sysroot/usr)
set(SCFI_USER_SDK ${SCFI_REPO}/user_repo)
set(SCFI_CROSS_COMPILE ${SCFI_REPO}/mdc_cross_compiler/bin)
set(SCFI_MDC_SDK_CMAKE ${SCFI_MDC_SDK}/lib/cmake)
set(SCFI_USER_SDK_CMAKE ${SCFI_USER_SDK}/lib/cmake)

file(RELATIVE_PATH SCFI_REPO_RELATIVE_MDC_CMAKE  ${SCFI_MDC_SDK_CMAKE} ${SCFI_REPO})
file(RELATIVE_PATH SCFI_REPO_RELATIVE_USER_CMAKE ${SCFI_USER_SDK_CMAKE} ${SCFI_REPO})
file(RELATIVE_PATH SCFI_MDC_RELATIVE_USER_SDK  ${SCFI_USER_SDK} ${SCFI_MDC_SDK})
file(RELATIVE_PATH SCFI_USER_RELATIVE_MDC_SDK ${SCFI_MDC_SDK} ${SCFI_USER_SDK})
set(ara-exec_DIR ${SCFI_MDC_SDK_CMAKE}/exec/)
set(CMAKE_C_COMPILER ${SCFI_CROSS_COMPILE}/aarch64-target-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${SCFI_CROSS_COMPILE}/aarch64-target-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH ${SCFI_USER_SDK} ${SCFI_MDC_SDK} ${CMAKE_FIND_ROOT_PATH})

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容