引言
Keil或者IAR為嵌入式開(kāi)發(fā)者提供了非常方便的可視化開(kāi)發(fā)環(huán)境,但Keil或者IAR是商業(yè)軟件,需要購(gòu)買(mǎi)并注冊(cè)License才能正常使用(Arm提供的社區(qū)版License可以供用戶(hù)免費(fèi)使用1年)。另外,仍有用戶(hù)希望使用命令行的方式編譯微控制器工程,這些用戶(hù)可能來(lái)自于Linux用戶(hù),也可能是某些定制工具開(kāi)發(fā)包的用戶(hù),或者搭建自動(dòng)化持續(xù)集成平臺(tái)的系統(tǒng)維護(hù)工程師。此時(shí),搭建開(kāi)源的armgcc工具集,也是微控制器開(kāi)發(fā)者常用的編譯工具解決方案。命令行方式使用的工具,在Linux操作系統(tǒng)中較為常用,但在Windows操作系統(tǒng)中,可以基于MSYS2作為模擬命令行工作環(huán)境的虛擬終端,配合armgcc工具集,搭建微控制器開(kāi)發(fā)環(huán)境。
本文講述基于Windows操作系統(tǒng),搭建 armgcc 編譯環(huán)境,并支持編譯MindSDK樣例工程。
安裝 MSYS2 環(huán)境
MSYS2 是一系列軟件工具和軟件庫(kù),可用于在Windows操作系統(tǒng)上模擬類(lèi)似于Linux操作系統(tǒng)的命令行運(yùn)行環(huán)境,并且可以使用部分Linux操作系統(tǒng)的部分命令,用以方便地構(gòu)建、安裝和運(yùn)行本地的應(yīng)用程序。
在 MSYS2 的官網(wǎng)上,可下載當(dāng)前最新的安裝包。如圖1所示。
圖1 在MSYS2官網(wǎng)下載MSYS2安裝包
如圖1所示,下載 msys-x86_64-20220904.exe 安裝文件后,即可啟動(dòng)安裝過(guò)程。安裝完成后,啟動(dòng) MSYS2 程序,可以看到MSYS2的命令行交互終端界面,如圖2所示。
圖2 運(yùn)行MSYS的終端界面
安裝完之后,可在 MSYS2 環(huán)境的終端下,試用Linux下的文件夾查看命令ls和顯示工作目錄命令pwd,確認(rèn) MSYS2 環(huán)境可以正常工作。
MindMotion@DESKTOP-MCR7G5AMSYS~ $ls MindMotion@DESKTOP-MCR7G5AMSYS~ $pwd /home/MindMotion
在 MSYS2 環(huán)境中安裝工具
這里使用 make 作為基本的構(gòu)建系統(tǒng)工具,但為了便于用戶(hù)編寫(xiě)構(gòu)建工程文件 makefile ,選用 cmake 作為創(chuàng)建 makefile 文件的工具。MSYS2 環(huán)境中的的包管理器已經(jīng)提供了可用的 make 和 cmake 工具,可用于安裝。
在 MSYS2 環(huán)境中安裝 make 工具
使用 pacman -Ss 命令,在 MSYS2 中查找可用的 make 工具的安裝包:
MindMotion@DESKTOP-MCR7G5AMSYS~ $pacman-Ssmake ... msys/make4.3-3(base-devel) GNUmakeutilitytomaintaingroupsofprograms ...
使用 pacman -S 命令,在 MSYS2 環(huán)境中安裝 make 工具:
MindMotion@DESKTOP-MCR7G5AMSYS~ $pacman-Smsys/make resolvingdependencies... lookingforconflictingpackages... Packages(1)make-4.3-3 TotalDownloadSize:0.46MiB TotalInstalledSize:1.48MiB ::Proceedwithinstallation?[Y/n]Y ::Retrievingpackages... make-4.3-3-x86_64466.2KiB538KiB/s00:01[###############################]100% (1/1)checkingkeysinkeyring[###############################]100% (1/1)checkingpackageintegrity[###############################]100% (1/1)loadingpackagefiles[###############################]100% (1/1)checkingforfileconflicts[###############################]100% (1/1)checkingavailablediskspace[###############################]100% ::Processingpackagechanges... (1/1)installingmake[###############################]100% ::Runningpost-transactionhooks... (1/1)Updatingtheinfodirectoryfile...
運(yùn)行命令查看版本號(hào),可以確認(rèn) make 工具已經(jīng)安裝完成,可以正常使用。
MindMotion@DESKTOP-MCR7G5AMSYS~ $make--version GNUMake4.3 Builtforx86_64-pc-msys Copyright(C)1988-2020FreeSoftwareFoundation,Inc. LicenseGPLv3+:GNUGPLversion3orlater Thisisfreesoftware:youarefreetochangeandredistributeit. ThereisNOWARRANTY,totheextentpermittedbylaw.
在 MSYS2 中安裝 CMake 工具
使用 pacman -Ss 命令,在 MSYS2 環(huán)境中查找 cmake 工具的安裝包。
MindMotion@DESKTOP-MCR7G5AMSYS~ $pacman-Sscmake ... msys/cmake3.21.0-1 Across-platformopen-sourcemakesystem ...
使用 pacman -S 命令,在 MSYS2 環(huán)境中安裝 cmake 工具
MindMotion@DESKTOP-MCR7G5AMSYS~ $pacman-Smsys/cmake resolvingdependencies... lookingforconflictingpackages... Packages(6)jsoncpp-1.9.5-1libarchive-3.6.1-2librhash-1.4.2-1libuv-1.42.0-1pkgconf-1.8.0-1 cmake-3.23.2-1 TotalDownloadSize:7.80MiB TotalInstalledSize:41.22MiB ::Proceedwithinstallation?[Y/n]Y ::Retrievingpackages... jsoncpp-1.9.5-1-any101.2KiB116KiB/s00:01[###############################]100% libuv-1.42.0-1-x86_64113.1KiB79.1KiB/s00:01[###############################]100% pkgconf-1.8.0-1-x86_6458.4KiB83.0KiB/s00:01[###############################]100% librhash-1.4.2-1-x86_64116.5KiB47.8KiB/s00:02[###############################]100% libarchive-3.6.1-2-x86_641138.4KiB353KiB/s00:03[###############################]100% cmake-3.23.2-1-x86_646.3MiB1738KiB/s00:04[###############################]100% Total(6/6)7.8MiB1965KiB/s00:04[###############################]100% (6/6)checkingkeysinkeyring[###############################]100% (6/6)checkingpackageintegrity[###############################]100% (6/6)loadingpackagefiles[###############################]100% (6/6)checkingforfileconflicts[###############################]100% (6/6)checkingavailablediskspace[###############################]100% ::Processingpackagechanges... (1/6)installingjsoncpp[###############################]100% JsonCppheadersandbuildlibrariesarenowinjsoncpp-devel. (2/6)installinglibarchive[###############################]100% (3/6)installinglibrhash[###############################]100% (4/6)installinglibuv[###############################]100% (5/6)installingpkgconf[###############################]100% (6/6)installingcmake[###############################]100%
嘗試查看版本號(hào),可以確認(rèn) CMake 工具已經(jīng)安裝完成并可正常使用。
MindMotion@DESKTOP-MCR7G5AMSYS~ $cmake--version cmakeversion3.23.2 CMakesuitemaintainedandsupportedbyKitware(kitware.com/cmake).
在 MSYS2 環(huán)境中安裝 armgcc 工具集
MSYS2 的包管理器中也包含了 armgcc 的工具集,可以使用pacman搜索 arm-none-eabi-gcc ,找到對(duì)應(yīng)的軟件包。
MindMotion@DESKTOP-MCR7G5AMSYS~ $pacman-Ssarm-none-eabi-gcc mingw32/mingw-w64-i686-arm-none-eabi-gcc10.1.0-2(mingw-w64-i686-arm-none-eabi-toolchain) GNUToolsforARMEmbeddedProcessors-GCC(mingw-w64) mingw64/mingw-w64-x86_64-arm-none-eabi-gcc10.1.0-2(mingw-w64-x86_64-arm-none-eabi-toolchain) GNUToolsforARMEmbeddedProcessors-GCC(mingw-w64)

圖3 在SYS2環(huán)境中使用pacman檢索 armgcc 工具集
但實(shí)際上, armgcc 工具集也提供了Windows操作系統(tǒng)下的可執(zhí)行文件,因此,這里推薦的做法是,直接下載并解壓Windows操作系統(tǒng)的 armgcc 工具集的壓縮包,然后在 MSYS2 中引用。這個(gè)過(guò)程展現(xiàn)了另一種在 MSYS2 環(huán)境中集成工具軟件的方法,但更重要的是,在Windows操作系統(tǒng)中安裝的 armgcc 工具集,同時(shí)還可以被其它可用的集成開(kāi)發(fā)環(huán)境引用,例如VS Code,這樣可以避免重復(fù)安裝同一個(gè)軟件包,確保在同一臺(tái)開(kāi)發(fā)主機(jī)上編譯器行為的一致性。
在Arm的官網(wǎng)上,可下載Windows操作系統(tǒng)版本對(duì)應(yīng)的armgcc編譯器工具包。如圖4所示。
圖4 在MSYS2官網(wǎng)下載MSYS2安裝包
如圖4所示頁(yè)面中,下載 gcc-arm-none-eabi-10.3-2021.10-win32.zip 文件,解壓至Windows文件系統(tǒng)的目錄中,例如 C:gcc-arm-none-eabi-xxxx 目錄。然后,在MSYS2的安裝目錄下的etc目錄下,例如 C:/msys64/etc ,在其中profile文件末尾處添加對(duì)gcc-arm-none-eabi工具集的引用路徑。
另外,可在MSYS2運(yùn)行環(huán)境中創(chuàng)建`armgcc`_DIR`環(huán)境變量,后續(xù)編譯MindSDK的`armgcc`工程時(shí),將會(huì)使用`armgcc`_DIR`環(huán)境變量檢索`armgcc`編譯工具集的路徑。
... echo"###################################################################" echo"##" echo"##" echo"#CAUTION#" echo"##" echo"#ThisisfirststartofMSYS2.#" echo"#YouMUSTrestartshelltoapplynecessaryactions.#" echo"##" echo"##" echo"###################################################################" echo echo fi unsetMAYBE_FIRST_START exportPATH="/c/gcc-arm-none-eabi-10.3-2021.10/bin:$PATH" export`armgcc`_DIR="/c/gcc-arm-none-eabi-10.3-2021.10"
保存更改過(guò)的文件后,使用 source 命令,激活對(duì) profile 文件的更新,讓更新的內(nèi)容在 MSYS2 環(huán)境中生效。
MindMotion@DESKTOP-MCR7G5AMSYS~ $source/etc/profile
可查看 PATH 變量的最新值,若添加成功,則可觀察到已包含 arm-gcc-none-eabi 的引用路徑。
MindMotion@DESKTOP-MCR7G5AMSYS~ $echo$PATH /c/gcc-arm-none-eabi-10.3-2021.10/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
可試著查看 arm-gcc-none-eabi 工具的版本號(hào),驗(yàn)證 armgcc 可在 MSYS2 中被正常調(diào)用。
MindMotion@DESKTOP-MCR7G5AMSYS~ $arm-none-eabi-gcc--version arm-none-eabi-gcc.exe(GNUArmEmbeddedToolchain10.3-2021.10)10.3.120210824(release) Copyright(C)2020FreeSoftwareFoundation,Inc. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO warranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.
至此,基于Windows操作系統(tǒng),在MSYS2環(huán)境中安裝armgcc工具鏈完成。
編譯MindSDK樣例工程
用戶(hù)可以在MindSDK的網(wǎng)站上下載適用于 armgcc 工具鏈創(chuàng)建的工程,即可在 MSYS2 環(huán)境中執(zhí)行編譯創(chuàng)建可執(zhí)行文件。這里以 plus-f5270 開(kāi)發(fā)板上的 hello_world 工程為例。
MindMotion@PF2LD92HMSYS/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/build/armgcc $ls CMakeLists.txtarmgcc.cmakebuild.shclean.sh MindMotion@PF2LD92HMSYS/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/build/armgcc $./build.sh --TOOLCHAIN_DIR:/usr/gcc-arm-none-eabi-10-2020-q4-major --BUILD_TYPE:debug --TOOLCHAIN_DIR:/usr/gcc-arm-none-eabi-10-2020-q4-major --BUILD_TYPE:debug --TheCcompileridentificationisGNU10.2.1 --TheCXXcompileridentificationisGNU10.2.1 --DetectingCcompilerABIinfo --DetectingCcompilerABIinfo-done --CheckforworkingCcompiler:/usr/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc-skipped --DetectingCcompilefeatures --DetectingCcompilefeatures-done --DetectingCXXcompilerABIinfo --DetectingCXXcompilerABIinfo-done --CheckforworkingCXXcompiler:/usr/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-g++-skipped --DetectingCXXcompilefeatures --DetectingCXXcompilefeatures-done --TheASMcompileridentificationisGNU --Foundassembler:/usr/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc --Configuringdone --Generatingdone --Buildfileshavebeenwrittento:/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/build/armgcc Scanningdependenciesoftargetmy_project.elf [2%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/applications/demo_apps/basic/hello_world/main.c.obj [5%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/board_init.c.obj [8%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/clock_init.c.obj [11%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/boards/plus-f5270/demo_apps/basic/hello_world/pin_init.c.obj [14%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_power.c.obj [17%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_pwr.c.obj [20%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_rcc.c.obj [23%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/drivers/hal_syscfg.c.obj [26%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/adc_1/hal_adc.c.obj [29%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/comp_1/hal_comp.c.obj [32%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/cordic_0/hal_cordic.c.obj [35%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/crc_0/hal_crc.c.obj [38%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/dac_1/hal_dac.c.obj [41%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/dma_1/hal_dma.c.obj [44%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/exti_0/hal_exti.c.obj [47%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/flexcan_0/hal_flexcan.c.obj [50%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/fsmc_0/hal_fsmc.c.obj [52%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/gpio_0/hal_gpio.c.obj [55%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/i2c_0/hal_i2c.c.obj [58%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/i2s_0/hal_i2s.c.obj [61%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/iwdg_0/hal_iwdg.c.obj [64%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/lptim_0/hal_lptim.c.obj [67%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/lpuart_0/hal_lpuart.c.obj [70%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/mds_0/hal_mds.c.obj [73%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/rtc_0/hal_rtc.c.obj [76%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/qspi_0/hal_qspi.c.obj [79%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/spi_0/hal_spi.c.obj [82%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/tim_1/hal_tim.c.obj [85%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/uart_0/hal_uart.c.obj [88%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/usb_0/hal_usb.c.obj [91%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/drivers/wwdg_0/hal_wwdg.c.obj [94%]BuildingCobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/system_mm32f5277e.c.obj [97%]BuildingASMobjectCMakeFiles/my_project.elf.dir/d/_git_repos/mm32-mcu-sdk/devices/MM32F5277E/armgcc/startup_mm32f5277e.S.obj [100%]LinkingCexecutabledebug/my_project.elf [100%]Builttargetmy_project.elf
編譯成功,創(chuàng)建了 my_project.elf 文件。
審核編輯:劉清
-
微控制器
+關(guān)注
關(guān)注
48文章
7724瀏覽量
152684 -
Linux操作系統(tǒng)
+關(guān)注
關(guān)注
0文章
54瀏覽量
11175 -
gcc編譯器
+關(guān)注
關(guān)注
0文章
78瀏覽量
3482 -
vscode
+關(guān)注
關(guān)注
1文章
160瀏覽量
8009 -
MM32
+關(guān)注
關(guān)注
1文章
106瀏覽量
865
原文標(biāo)題:靈動(dòng)微課堂 (第251講)|為MindSDK搭建armgcc編譯環(huán)境(Windows版)
文章出處:【微信號(hào):MindMotion-MMCU,微信公眾號(hào):靈動(dòng)MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
迅為RK3588開(kāi)發(fā)板實(shí)時(shí)系統(tǒng)編譯-Preemption系統(tǒng)/ Xenomai系統(tǒng)編譯-獲取Linux源碼包
如何搭建企業(yè)AI開(kāi)發(fā)環(huán)境
【MM32F5270】Keil開(kāi)發(fā)環(huán)境搭建

【米爾NXP i.MX 93開(kāi)發(fā)板試用評(píng)測(cè)】2、異構(gòu)通信環(huán)境搭建和源碼編譯
SemiDrive X9 AI 開(kāi)發(fā)環(huán)境搭建

pytorch環(huán)境搭建詳細(xì)步驟
PyTorch深度學(xué)習(xí)開(kāi)發(fā)環(huán)境搭建指南
ESP IDF編譯環(huán)境突然崩潰是什么原因引起的?
VSCODE搭建的IDF編譯環(huán)境,如何配置調(diào)試串口的波特率呢?
搭建esp32-C3編譯環(huán)境報(bào)錯(cuò)的原因?
搭建ESP-idf環(huán)境時(shí),如何自主選擇工具鏈的版本?
Purple Pi OH又開(kāi)外掛!帶你搭建編譯環(huán)境及編譯Android 11固件

鴻蒙OpenHarmony【搭建Ubuntu環(huán)境】

鴻蒙OpenHarmony【搭建Windows環(huán)境】

評(píng)論