不需要依賴笨重的虛擬機,也不需要安裝雙系統。拋開繁瑣的環境準備,在Windows上輕松搭建交叉編譯環境。本文將介紹如何在Windows上搭建交叉編譯環境,不借助Linux系統,直接進行交叉編譯。
?前言
嵌入式Linux系統,由于系統資源的匱乏,通常無法安裝本地編譯器進行本地開發,而需要在借助一臺主機進行交叉開發。一般情況下,在主機安裝相應的交叉編譯器,將在主機編輯好的程序交叉編譯后,通過一定方式如以太網或者串口將程序下載到目標系統運行,或者進行調試。一般的交叉開發流程如圖1所示。

圖1 嵌入式Linux交叉開發一般流程
ZMC600E/900E開發的一般模型如圖2所示。通常需要一臺PC主機,在其中安裝好各種進行交叉編譯所需要的軟件,通過串口和以太網和目標板相連。在主機上進行程序編輯和編譯,得到的可執行文件通過串口或者以太網下載到ZMC600E/900E中運行或者進行調試。

圖2 嵌入式Linux交叉開發一般流程通常
常見的交叉編譯環境中,主機會選用Linux系統。如果主機是Windows系統,通常會采用虛擬機的方式運行Linux系統來搭建環境。其實Windows系統中同樣也可以搭建交叉編譯環境,在Windows上就可以開發ZMC600E/900E的程序,接下來將介紹如何實現。 ?測試環境
1. 遠程設備:ZMC900E主站控制器2. 主機:Win103. IDE: VS Code4. 所需軟件環境:
- cmake版本3.xx,推薦3.20及以上版本
- mingw64(主要需要mingw32-make.exe)獲取最新版本s
- aarch64-linux-gnu(windows)交叉編譯鏈,包括:① 編譯器aarch64-linux-gnu-gcc.exe aarch64-linux-gnu-g++.exe等;② aarch64-linux-gnu.cmake 交叉編譯工具鏈配置文件;③ 可以聯系我們技術支持獲取。
5. VSCode需要的插件:
圖3 VSCode中需要的插件6. 環境變量:
- 將交叉編譯鏈解壓到D:/aarch64-linux-gnu(或其他容易找到的地方),將D:/aarch64-linux-gnu/bin 加入環境變量。
- 將CMake和mingw64也加入到環境變量。
- 重啟使其生效。

圖4 Windows環境變量配置 ?搭建交叉編譯鏈
本節以hello_world和ecat_io為例子,介紹如何搭建交叉編譯工具鏈,并通過powershell命令行進行交叉編譯。
1. 安裝軟件環境&設置環境變量
根據第1節介紹,在本節需要準備cmake、mingw64、aarch64-linux-gnu(windows)三個工具軟件,并配置環境變量。
2. 準備交叉編譯工具鏈說明文件CMAKE_TOOLCHAIN_FILE
在前述交叉編譯鏈解壓路徑 D:/aarch64-linux-gnu/bin 路徑下新建文件arm-linux-toolchain.cmake,并添加以下內容:
# arm-linux-toolchain.cmakeset(CMAKE_SYSTEM_NAME Linux)set(CMAKE_SYSTEM_PROCESSOR arm)
# 設置編譯器路徑set(CROSS_CHAIN_PATH${CMAKE_CURRENT_LIST_DIR})# 根據你的安裝路徑調整交叉編譯工具鏈的位set(CMAKE_C_COMPILER${CROSS_CHAIN_PATH}/aarch64-linux-gnu-gcc.exe)set(CMAKE_CXX_COMPILER${CROSS_CHAIN_PATH}/aarch64-linux-gnu-g++.exe)set(CMAKE_LINKER${CROSS_CHAIN_PATH}/aarch64-linux-gnu-ld.exe)set(CMAKE_AR${CROSS_CHAIN_PATH}/aarch64-linux-gnu-ar.exe)set(CMAKE_RANLIB${CROSS_CHAIN_PATH}/aarch64-linux-gnu-ranlib.exe)
3. hello_world示例
新建文件夾,在文件夾下創建CMakeLists.txt文件,以及main.c源代碼文件。在CMakeLists.txt中寫入以下內容。
cmake_minimum_required(VERSION3.20)project(hello)add_executable(hello main.c)
在main.c中寫入以下內容:
#include
intmain(intargc,char**argv){ printf("Hello world!\n"); return0;}
然后打開powershell,cd至當前目錄,并新建build文件夾,此時當前目錄下會有以下文件:
zmc├── build├── CMakeLists.txt└──main.
接下來在powershell下執行以下指令,進行交叉編譯
cdbuildcmake -G"MinGW Makefiles"-DCMAKE_TOOLCHAIN_FILE="D:\aarch64-linux\bin\aarch64-linux-gnu.cmake"..mingw32-make.exe
其中:
- cmake的-G “MinGW Makefiles”參數用于指定生成的工程類型,此處指定為MinGW工程。
- -DCMAKE_TOOLCHAIN_FILE=”D:\aarch64-linux\bin\aarch64-linux-gnu.cmake”,-D參數聲明了一個變量CMAKE_TOOLCHAIN_FILE,該變量用于指定通過cmake生成交叉編譯工程時,交叉編譯工具鏈的配置文件。
- cmake ..,目前位于build文件夾下,..表示指定上層目錄中../CMakeLists.txt作為cmake生成的參考文件。
完成后將在build目錄下生成一個hello文件,該文件為Linux arm格式的可執行文件,需要上傳到ZMC900E運行,運行效果如下。

圖5 測試hello_world
4. ecat_io示例
從“【ZMC900E】在線資料包 examples\zmc.zip”中獲取demo程序,其結構如下:
zmc├── demo│ ├── ecat_io│ │ ├── Makefile│ │ ├── test.c│ │ └── test.xml│ ├── ecat_redundance│ ├── ecat_servo│ ├── esi_update│ ├── foe│ └── master├──include│ └── ecat│ ├── zecm_ex.h│ └── zecm_zh.h└── lib└── libzecm.so
打開demo/ecat_io示例,新建CMakeLists.txt文件,寫入以下內容:
cmake_minimum_required(VERSION 3.10)
project(ecat_io)
include_directories("../../include")link_directories("../../lib")
add_executable(testtest.c)
target_link_options(testPRIVATE -lpthread -lrt -ldl -lstdc++ -lm)target_link_libraries(testzecm)
根據實際測試從站對主站程序test.c做相應修改,具體請參考倍福I/O端子操作示例:https://manual.zlg.cn/web/#/211/11214接下來在powershell下執行以下指令,進行交叉編譯。
cdbuildcmake -G"MinGW Makefiles"-DCMAKE_TOOLCHAIN_FILE="D:\aarch64-linux\bin\aarch64-linux-gnu.cmake"..mingw32-make.exe
完成后將在build目錄下生成一個test文件,該文件為Linux arm格式的可執行文件。需要將test、test.xml、libzecm.so都上傳到ZMC900E運行。 ?VSCode搭建圖形化交叉編譯環境
1. VSCode配置CMakeTool
此步驟用到的工具鏈:CMake + make(來自mingw64里包含的mingw32-make.exe) + aarch64-linux-gnu + VS Code&插件CMake等。如果失敗需要檢查工具鏈上每一環節是否工作正常。首先,需要先自己寫一個給CMake用的交叉編譯工具鏈配置文件。可以參照第2.2節內容。用VSCode打開項目文件夾,例如前面測試的ecat_io示例。然后按ctrl+shift+P,彈出菜單,輸入CMAKE查找到CMAKE: QUICK START選項:

圖6 CMakeTool工具配置Quick Start點擊Add a new preset,然后選擇Toolchain File,然后輸入aarch64(或其他任意)作為配置項名稱。完成后會生成一個CMakePresets.json配置文件。修改其中配置,令其關聯到 mingw32-make.exe + aarch64-linux-gnu。

圖7 配置CMakePresets.json
完成后,保存配置文件,點擊左側工具欄的CMake一欄,找到Delete Cache and Reconfigure,重新生成CMake工程。

圖8 生成CMake工程查看下側Output輸出,若無報錯,則表示CMake配置成功。

圖9 VSCode Output無報錯輸出
2. VSCode + CMakeTool圖形化編譯
在右側工具欄點擊CMAKE項,切換到圖形化編譯頁面:

圖10 圖形化編譯界面
是cmake生成Makfile,
是編譯,底部工具欄的
也是編譯。先生成cmake工程,后編譯程序。根據CMakePresets.json配置,輸出路徑為out文件夾,可以找到完成編譯的程序test。此時如果通過linux的file工具查看該程序的格式可以驗證其是arm程序且有debug信息。

圖11 工程目錄結構
cdbuildcmake -G"MinGW Makefiles"-DCMAKE_TOOLCHAIN_FILE="D:\aarch64-linux\bin\aarch64-linux-gnu.cmake"..mingw32-make.ex
將test程序、動態庫libzecm.so、ENI文件上傳到ZMC900E同一目錄下,并給test程序加上x權限。然后就可以執行主站程序了。
#ZMC900E$chmod+xtest$lstest ENI.xml libzecm.so
?ZMC900E高性能EtherCAT主站控制器

圖12ZMC900E高性能EtherCAT主站控制器
ZMC900E是ZLG致遠電子開發的最新一代EtherCAT主站控制器,其核心采用多核異構的應用處理器,內核包括4+1個64位的ArmCortex-A55核,主頻2GHz;3個Cortex-R5F內核,主頻800MHz。同時板載4GB LPDDR4、8GB eMMC以及32KB FRAM。
ZMC900E EtherCAT主站控制器為了滿足不同的自動化應用需求,集成1路專用EtherCAT口、3路通用以太網、1路CANFD、1路RS485、1路TF卡、1路USB3.0 Host、1路HDMI接口、16路Dl數字輸入、16路DO數字輸出等接口,靈活滿足自動化設備應用需求。
ZMC900E 示意圖及接口圖如下所示:

圖13ZMC900E接口
-
WINDOWS
+關注
關注
4文章
3603瀏覽量
90845 -
Linux系統
+關注
關注
4文章
602瀏覽量
28265 -
編譯環境
+關注
關注
0文章
13瀏覽量
8627
發布評論請先 登錄
ubuntu交叉編譯環境搭建
Windows下STM32單片機eclipse編譯環境搭建
想要自學搭建嵌入式Linux開發環境搭建的同學有福利了。
arm-linux的交叉編譯環境解析
嵌入式Linux開發環境搭建-(4)安裝交叉編譯工具鏈

ZMC900E 國產EtherCAT主站控制器 — 電源口傳導騷擾整改

ZMC900E控制器之ROS2環境安裝指南

評論