IMX6ULL學(xué)習(xí)筆記(11)——獲取和編譯官方SDK

一、簡介

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.cfsl_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ǔ)使用步驟忠寻。

文件夾 lwiprtos存和、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 日

? 參考:2. 編譯下載官方SDK程序到開發(fā)板

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末穷遂,一起剝皮案震驚了整個(gè)濱河市函匕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚪黑,老刑警劉巖盅惜,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忌穿,居然都是意外死亡抒寂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進(jìn)店門掠剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屈芜,“玉大人,你說我怎么就攤上這事朴译【樱” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵眠寿,是天一觀的道長躬翁。 經(jīng)常有香客問我,道長盯拱,這世上最難降的妖魔是什么盒发? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任例嘱,我火速辦了婚禮,結(jié)果婚禮上宁舰,老公的妹妹穿的比我還像新娘拼卵。我一直安慰自己,他們只是感情好明吩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布间学。 她就那樣靜靜地躺著,像睡著了一般印荔。 火紅的嫁衣襯著肌膚如雪低葫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天仍律,我揣著相機(jī)與錄音嘿悬,去河邊找鬼。 笑死水泉,一個(gè)胖子當(dāng)著我的面吹牛善涨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播草则,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼钢拧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炕横?” 一聲冷哼從身側(cè)響起源内,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎份殿,沒想到半個(gè)月后膜钓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卿嘲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年颂斜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拾枣。...
    茶點(diǎn)故事閱讀 38,711評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沃疮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出放前,到底是詐尸還是另有隱情忿磅,我是刑警寧澤,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布凭语,位于F島的核電站葱她,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏似扔。R本人自食惡果不足惜吨些,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一搓谆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧豪墅,春花似錦泉手、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屏轰,卻和暖如春颊郎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霎苗。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工姆吭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唁盏。 一個(gè)月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓内狸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厘擂。 傳聞我的和親對象是個(gè)殘疾皇子昆淡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內(nèi)容