1.準(zhǔn)備工作
環(huán)境準(zhǔn)備
|
系統(tǒng)架構(gòu)
|
X86_64
|
| --- | --- |
|
操作系統(tǒng)
|
Ubuntu 18.04及以上版本
須知:
MDC平臺工具鏈僅支持Ubuntu 18.04版本箍铲。
|
獲取軟件包
|
軟件包
|
說明
|
| --- | --- |
|
MDC_SDK-{version}.tar.gz
|
MDC二次開發(fā)包,包含gcc和clang編譯器由境、編譯框架和平臺ARXML文件客扎。
|
|
MDC_SDK-{version}_llvm.tar.gz
|
用于安裝llvm編譯器珠闰。
|
|
MDC_AOS_rpmlist-{version}.tar.gz
|
用于在交叉編譯環(huán)境中安裝第三方庫咬崔。
|
|
MDC_AOS_rpmlist-{version}_llvm.tar.gz
|
用于在安裝了llvm的編譯環(huán)境中安裝第三方庫狸棍。
|
|
MDC-{version}.tar.gz
|
MDC產(chǎn)品包鉴扫,包含AP平臺包赞枕,OS鏡像,以及MCU坪创、CPLD炕婶、BIOS等固件包。
|
2.搭建交叉編譯環(huán)境
在開發(fā)環(huán)境中莱预,以普通用戶打開終端古话。
-
進(jìn)入SDK包(MDC_SDK-{version}.tar.gz)所在目錄,并將SDK包解壓至指定目錄锁施。
執(zhí)行命令sudo mkdir -p /usr/local陪踩,創(chuàng)建目錄“/usr/local”。
-
執(zhí)行命令sudo tar -xf MDC_SDK-{version}.tar.gz -C /usr/local**悉抵,將SDK安裝包解壓至“/usr/local”目錄下肩狂,解壓即安裝。
解壓得到的“mdc_sdk”目錄說明如下:
|
目錄
|
說明
|
| --- | --- |
|dp_gea
|
存在GEA系統(tǒng)環(huán)境所需交叉編譯器gcc姥饰、g++等傻谁。
|
|manifest
|
存在MDC平臺的ARXML文件,Sample等列粪。
|
|env_check.py
|
用于檢查Ubuntu审磁、cmake和make版本是否符合要求的腳本谈飒。
|
-
確認(rèn)Ubuntu系統(tǒng)版本為18.04,且已安裝滿足版本要求的構(gòu)建/調(diào)試工具cmake(3.10.2及以上)和make(4.1及以上)态蒂。
在“/usr/local/mdc_sdk”目錄下執(zhí)行校驗版本號的腳本命令./env_check.py杭措,回顯示例如下,若提示不符合版本要求钾恢,請根據(jù)要求安裝或升級至匹配版本手素。
<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> -
執(zhí)行如下命令,配置環(huán)境變量瘩蚪。
export PATH=/usr/local/mdc_sdk/dp_gea/mdc_cross_compiler/bin:$PATH
-
依次執(zhí)行如下命令泉懦,確認(rèn)環(huán)境變量配置正確。
-
which aarch64-target-linux-gnu-gcc疹瘦,通過回顯確認(rèn)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>
-
which aarch64-target-linux-gnu-g++言沐,通過回顯確認(rèn)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.構(gòu)建應(yīng)用
下文以編譯helloworld.c文件為例呢灶,介紹代碼的編譯和運(yùn)行步驟吴超。
- 編寫代碼,即編輯helloworld.c文件鸯乃。代碼示例如下:
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
2.在開發(fā)環(huán)境中執(zhí)行命令export CC=aarch64-target-linux-gnu-gcc鲸阻,指定編譯器
3.創(chuàng)建并編寫構(gòu)建文件(Makefile)。
src_file=helloworld.c
elf_file=helloworld
all:
${CC} -I ${SYSROOT}/usr/include -L ${SYSROOT}/usr/lib64 ${src_file} -o ${elf_file}
-
編譯helloworld.c文件缨睡。
進(jìn)入helloworld.c文件所在目錄鸟悴,依次執(zhí)行如下命令:
- export SYSROOT=/usr/local/mdc_sdk/dp_gea/mdc_cross_compiler/sysroot/,指定編譯目錄奖年。
- make细诸,開始編譯。
在“helloworld.c”文件所在目錄執(zhí)行命令ls陋守,若返回結(jié)果含有可執(zhí)行文件(helloworld)震贵,表示編譯成功。
以SSH連接方式登錄MDC系統(tǒng)環(huán)境(用戶名和密碼請參考《調(diào)測指南》的“登錄操作系統(tǒng)”章節(jié))水评,并在AOS運(yùn)行環(huán)境中運(yùn)行helloworld猩系。
總結(jié)交叉編譯腳本,可直接編譯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)