一、簡介
SDK(Software Development Kit) 是 NXP 針對其官方評估板的軟件開發(fā)包劈狐,可以在 NXP 的官網(wǎng)下載得到。SDK 中包含了固件庫和各種程序范例。這個(gè) SDK 包提供了 Windows 和 Linux 兩種版本屡律,分別針對主機(jī)系統(tǒng)是 Windows 和 Linux。
二降淮、獲取SDK
官網(wǎng)下載:i.MX 6ULL單核處理器超埋,配備Arm? Cortex?-A7內(nèi)核
百度網(wǎng)盤:https://pan.baidu.com/s/17Esz2aigWejm8MQ4wtv8-w?pwd=51ub 提取碼:51ub
三、SDK工程結(jié)構(gòu)
安裝完成以后的SDK如圖所示:
3.1 boards:示例程序
SDK的boards
目錄包含了NXP官方評估版MCIMX6ULL-EVK的各種示例程序佳鳖。
-
demo_apps:
包含了一些應(yīng)用范例霍殴,如串口打印“hello world”、使用lwip協(xié)議棧進(jìn)行網(wǎng)絡(luò)通訊等內(nèi)容系吩。
-
driver_examples:
包含了i.mx6主要片上外設(shè)的使用范例来庭。
-
project_template:
包含了官方示例使用的一些必備文件,這些文件主要是針對官方評估板做了一些引腳定義淑玫、時(shí)鐘配置等功能巾腕。
-
rtos_examples:
包含了使用FreeRTOS實(shí)時(shí)操作系統(tǒng)的應(yīng)用范例。
-
usb_examples:
包含了各種USB程序示例絮蒿,具體如下所示尊搬。USB設(shè)備種類繁多且驅(qū)動復(fù)雜, 參考官方的這些示例能快速建立自己需要的USB應(yīng)用土涝。
3.2 CMSIS:包含CMSIS標(biāo)準(zhǔn)相關(guān)的文件
在2.2版本的SDK中佛寿,CMSIS只有一個(gè)GCC相關(guān)頭文件。
3.3 CORTEXA:Cortex相關(guān)頭文件
SDK目錄下的CORTEXA文件夾包含了Cortex-A核適配IAR、GCC的頭文件冀泻。
3.4 devices:i.MX固件庫
SDK中的devices
目錄包含的內(nèi)容就是外設(shè)驅(qū)動固件庫常侣,該目錄下的MCIMX6Y2
文件夾即是針對開發(fā)板板載芯片對應(yīng)的固件庫。
-
MCIMX6Y2\drivers目錄:
drivers
目錄是固件庫的主體弹渔,有時(shí)我們把這些文件稱為外設(shè)驅(qū)動庫胳施。這些文件都使用fsl_xxx.c/h的命名格式,其中xxx是對應(yīng)的片上 外設(shè)名字肢专,如ADC舞肆、GPIO、UART博杖、I2C等外設(shè)椿胯,大部分外設(shè)包含一個(gè)C源文件和頭文件。
這些文件都使用
fsl_xxx.c/h
的命名格式剃根,其中xxx是對應(yīng)的片上外設(shè)名字哩盲,如ADC、GPIO狈醉、UART廉油、I2C等外設(shè),大部分外設(shè)包含一個(gè)C源文件和頭文件舔糖。當(dāng)使用到某個(gè)外設(shè)時(shí)娱两,我們會把此處對應(yīng)的外設(shè)驅(qū)動源文 件添加到工程中,加入編譯金吗,對于沒有源文件的IOMUXC外設(shè)十兢,則直接使用“#include”包含其頭文件
fsl_iomuxc.h
。特別地摇庙,其中的
fsl_common.c
和fsl_common.h
中的common不是i.MX6芯片的某個(gè)外設(shè)名字旱物,它表示絕大多數(shù)工程都會需要這些“共同”的內(nèi)容,所以一般工程都會添加這個(gè)fsl_common.c
文件卫袒,并且可以通過fsl_common.h
文件包含前面介紹的fsl_device_regi sters.h
頭文件宵呛,達(dá)到最終包含具有大量寄存器定義的MCIMX6Y2.h
核心頭文件的目的。
MCIMX6Y2\gcc夕凝、iar目錄:
在不同的編譯平臺下宝穗,使用匯編語言編寫的啟動文件、各種版本的分散加載文件的語法稍有區(qū)別码秉,所以固件庫把這些內(nèi)容放在獨(dú)立的文件夾逮矛。gcc和iar文件夾分別對應(yīng)ARM-GCC和IAR開發(fā)環(huán)境,這些文件夾內(nèi)的文件功能是一樣的转砖。-
MCIMX6Y2\utilities目錄:
utilities是實(shí)用工具集的意思须鼎,此目錄下包含了開發(fā)常用的一些調(diào)試工具,如串口輸出、運(yùn)行日志晋控,通常我們都會把這些文件加到工程以方便開發(fā)汞窗。
fsl_device_registers.h:
根據(jù)CPU型號包含相應(yīng)的頭文件,在開發(fā)環(huán)境的全局宏定義中應(yīng)根據(jù)CPU指定芯片型號赡译。MCIMX6Y2.h:
主要是包含i.MX6芯片的各種寄存器定義和中斷編號定義仲吏,是非常重要,非炒范洌基礎(chǔ)的一個(gè)頭文件蜘矢。 所以在前面fsl_device_registers.h
文件中就根據(jù)CPU型號把添加這個(gè)文件。MCIMX6Y2_features.h:
主要定義了一些關(guān)于i.MX6芯片特性的內(nèi)容综看,定義了本芯片有多少個(gè)IIS外設(shè)或UART外設(shè)。在前面的fsl_device_registers.h
的內(nèi)容中也包含了本文件岖食。MCIMX6Y2.xml:
NXP的開發(fā)環(huán)境需要的一些記錄信息红碑,此處不作介紹。system_MCIMX6Y2.c/h:
system_MCIMX6Y2包含一個(gè)源文件和頭文件泡垃。其中頭文件system_MCIMX6Y2.h
中主要包含時(shí)鐘定義以及源文件相應(yīng)函數(shù)的聲明析珊,而源文件system_MCIMX6Y2.c
中則主要包含系統(tǒng)初始化和配置系統(tǒng)時(shí)鐘的函數(shù)。
3.5 docs:部分說明文檔
這目錄下主要是《Getting Started with MCUXpresso SDK for i.MX 6ULL Derivatives》
文件比較有用蔑穴,它介紹了使用官方評估板時(shí)的基礎(chǔ)使用步驟忠寻。
文件夾 lwip
、rtos
存和、usb
奕剃、分別保存對應(yīng)的說明文檔授舟。文件夾MCUXpresso SDK API Reference Manual_MCIMX6Y2
保存有.html格式的SDK API接口函數(shù)說明文檔祈搜。
3.6 middleware:中間件
主要包含一些中間層軟件,即這些軟件常為應(yīng)用層提供一些協(xié)議祈秕、架構(gòu)上的支撐茄袖,它的主要部分又與芯片底層的硬件外設(shè)驅(qū)動(前面drivers
目錄中的文件)聯(lián)系不甚緊密操软,是不同芯片之間通用的一些構(gòu)件。
-
fatfs:
這是一個(gè)嵌入式常用的文件系統(tǒng)宪祥,有了文件系統(tǒng)后能更好地管理存儲器以及使用通用的文件形式來訪問存儲器聂薪。 -
lwip:
這是嵌入式常用網(wǎng)絡(luò)TCP/IP協(xié)議棧,使用協(xié)議椈妊颍可以方便地接入網(wǎng)絡(luò)藏澳。 -
sdmmc:
它是遵照SDIO協(xié)議編寫的集成識別、讀寫SD存儲卡功能的驅(qū)動肘交。 -
usb:
包含了遵照USB協(xié)議編寫的基本驅(qū)動笆载,在它之上可方便地編寫USB應(yīng)用程序。
3.7 rtos:實(shí)時(shí)操作系統(tǒng)
包含了FreeRTOS實(shí)時(shí)操作系統(tǒng)的源代碼,位于“boards\evkmcimx6ull\rtos_examples”
目錄的FreeRTOS例程會使用到這里的源碼凉驻。
3.8 tools:開發(fā)工具
-
cmake_toolchain_files:
提供cmake工具腻要,用于生成ARM GCC編譯器需要的Makefile文件。 -
imgutil:
提供圖片壓縮工具涝登。 -
mfgtools/mfgtools-with-rootfs:
提供MFG批量下載工具雄家。
3.9 其它
在SDK的根目錄下還包含了幾個(gè).xml、.txt胀滚、.htm以及.bat文件趟济。
.xml和txt文件它們主要是包含SDK第三方構(gòu)件的一些版權(quán)、出處說明以及EVK-MCIMX6UL生成的一些說明信息
keilkill.bat批處理文件用于清理編譯程序生成的中間文件咽笼。
四顷编、搭建Linux開發(fā)環(huán)境
4.1 安裝CMake工具
執(zhí)行以下命令:
sudo apt-get install cmake
4.2 安裝交叉編譯工具
執(zhí)行以下命令:
sudo apt-get install gcc-arm-none-eabi
添加臨時(shí)環(huán)境變量,執(zhí)行以下命令:
export ARMGCC_DIR=/usr
注:使用以上命令添加的環(huán)境變量只在當(dāng)前終端上有效剑刑,如果虛擬機(jī)重啟或者重新打開了終端需要再次執(zhí)行添加環(huán)境變量命令媳纬。 該環(huán)境變量只有在編譯官方SDK時(shí)才用得到,需要時(shí)動態(tài)添加即可施掏。
4.3 安裝Linux版本SDK
將 SDK_2.2_MCIM6ULL_RFP_Linux.run 拷貝到Linux下钮惠,存放位置自定。然后運(yùn)行.run文件生成SDK七芭,若無法運(yùn)行可嘗試修改.run文件的權(quán)限chmod 777 SDK_2.2_MCIM6ULL_RFP_Linux.run
素挽。
./SDK_2.2_MCIM6ULL_RFP_Linux.run
運(yùn)行后會彈出圖形化的界面,不過鼠標(biāo)無法對界面上的選項(xiàng)進(jìn)行操作狸驳,只能通過鍵盤上的方向鍵選擇预明。
我們通過“上下”方向鍵選擇生成的SDK文件保存位置⌒坷“左右”方 向鍵選擇“Select”或“Abort Installation”贮庞。需要說明的是上圖中選項(xiàng)1表示生成的SDK保存在你當(dāng)前登錄的用戶文件夾下,不同用戶路徑不同究西。
五窗慎、編譯SDK
打開SDK源碼目錄任意一個(gè)工程,可以看到每個(gè)工程有兩個(gè)版本如下所示:
由于我們要在Linux下編譯卤材、下載遮斥,所以我們需要選擇ARM GCC版本工程。打開“armgcc”文件夾如下所示扇丛。
-
腳本文件:
可以看到arngcc文件夾下包含很多build_xx腳本
术吗,這些腳本用于在Linux環(huán)境下編譯生成.bin可執(zhí)行文件
, 所以我們需要一個(gè)ARM GCC交叉編譯器
帆精。 -
CMake相關(guān)文件:
CMakeList.txt
用于生成編譯過程中需要的Makefile
较屿,所以我們還需要一個(gè)CMake工具
隧魄。 -
鏈接器腳本相關(guān)文件:
以.ld
結(jié)尾的文件是鏈接器腳本相關(guān)文件,根據(jù)運(yùn)行的腳本不同隘蝎,腳本會自動調(diào)用相應(yīng)的鏈接文件购啄。
打開 SDK_2.2_MCIM6ULL/boards/evkmcimx6ull/demo_apps/hello_world/armgcc 工程,運(yùn)行build_ddr_release.sh
腳本嘱么,命令如下:
./build_ddr_release.sh
build_ddr_release.sh
用于生成.bin
文件狮含,運(yùn)行成功后會在當(dāng)前文件夾下生成ddr_release
文件夾, 在文件夾中存在一個(gè)sdk20-app.bin
文件曼振,將sdk20-app.bin
放到SD卡程序并不能直接運(yùn)行几迄, 根據(jù)存儲設(shè)備不同還要在sdk20-app.bin
添加相應(yīng)的頭部信息然后才能在開發(fā)板上運(yùn)行。
注意:
運(yùn)行build_ddr_release.sh常見錯(cuò)誤:
錯(cuò)誤原因是沒有添加ARMGCC_DIR環(huán)境變量冰评,根據(jù)之前講解添加環(huán)境變量命令“export ARMGCC_DIR=/usr”只在當(dāng)前端口有效映胁,所以在當(dāng)前端口再次執(zhí)行命令。export ARMGCC_DIR=/usr
添加環(huán)境變量即可(不建議將環(huán)境變量添加到系統(tǒng)環(huán)境變量中集索,因?yàn)樵摥h(huán)境變量只有編譯官方SDK程序才用的到屿愚, 后面章節(jié)主要是自己寫程序,若編譯還是錯(cuò)誤务荆,在運(yùn)行
./build_ddr_release.sh
前先運(yùn)行./clean.sh
清除之前編譯的內(nèi)容)。
? 由 Leung 寫于 2022 年 10 月 24 日