【ATU Book-i.MX8系列】 NXP i.MX8M Mini 環境建置

1. i.MX8M Mini 簡介
    1.1 EVK Platform
    i.MX8M Mini EVK 為 NXP 提供給開發者進行 i.MX8M Mini 處理器全方位評估發展之平台。下圖為此平台之實際照片,為一片主板加上一片 BB 板所組成。而主板包含 i.MX 8M Mini Quad applications processor,是一顆包裝 4*A53 + 1*M4 的 SOC,使用 2GB LPDDR4 和 16GB eMMC;BB 板則包含各種影、音、網路等周邊之連接。此平台的優勢在於高效的電源管理,加上整合各種影音周邊硬體,以及擁有 BT/WiFi 等對外聯結的介面,非常適合血壓計、智慧燈飾、IP Camera、影像門鈴、智慧家居……等多種應用。

i.MX8M Mini EVK

2. Linux 環境建置(使用 Yocto)
此文件採用範例的版本為 L4.14.98-2.0.0_ga,詳細步驟如下描述。
    2.1 安裝之前
    
在開始之前,建置環境的主機建議的 OS 為 ubuntu 16.04 或更新的版本。另外主機需要先安裝一些必要的工具,並至少保留 120GB 的硬碟空間。需要安裝的 tools 如下,

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev curl


<略>

安裝 repo,並加入 PATH 中,

$ mkdir ~/bin (this step may not be needed if the bin folder already exists)

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

$ echo "export PATH=~/bin:\$PATH" >> .bashrc


    2.2 Yocto Project 建立
   
接下來就可以利用 repo 先取得 Yocto Project。詳細步驟如下,

首先設定 git 參數,

$ git config --global user.name "Your Name"

$ git config --global user.email "Your Email"

$ git config --list

接下來以 repo command 取得 Yocto Project,

$ mkdir imx-yocto-bsp

$ cd imx-yocto-bsp

$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml
$ repo sync


<略>

完成這個步驟之後,Yocto Project 就建立好了。相關的材料都已經 ready,可以進行 build image 的動作。

在 build 之前,我想先重點介紹一下這些材料的內容。而且只需大致了解這些內容就可以讓我們更容易理解整個 i.MX 在 Yocto 下的結構組成,而且這也跟下一章節會提到的 script 息息相關。
Yocto Project 的前兩層資料夾如下圖,其中 source 下的〝meta-fsl-bsp-release〞是我想要特別提出來談的部分。首先,我們知道,
  • meta-freescale:提供支援 i.MX 板子的基礎
  • meta-freescale-3rdparty:提供支援相關的 3rd party
  • meta-freescale-distro:針對板子的能力,可增加的附加項目
  • 基本上擁有以上 3 項即可支援 i.MX 的 board,但新的板子不斷推陳出新。在處理上,NXP 並不會直接更新上述三個資料夾,而是將較新的部分優先更新在〝meta-fsl-bsp-release〞裡面。如下,
  • meta-fsl-bsp-release:內含〝meta-bsp〞和〝meta-sdk〞
    • meta-bsp:用來更新〝meta-freescale〞、〝poky〞、〝meta-openembedded〞
    • meta-sdk:用來更新〝meta-freescale-distro〞



    2.2 Build Configuration
    
這個章節會詳細描述產生 image 前如何利用 Yocto Porject 設定環境的步驟。首先,i.MX 為了簡化 machine 的建立流程,提供了一個 script,名為〝fsl-setup-release.sh〞。利用這個 script,並賦予特定待 build 的 machine 名稱,即可快速建立出待 build 的 machine 資料夾以及其相關環境;同理,我們也可以重複利用此 script 建立多個 machine 資料夾,如下圖有多個 machine,包含 i.MX8M Mini、i.MX8QM、i.MX8QXP 等 machine,這幾個資料夾基本上各自獨立,並不相互影響。

    那 machine folder 是如何建立的呢?裡面又包含了哪些東西?我們繼續往下看,

Machine folder 是經由 script 建立,指令格式如下,

 $ DISTRO= MACHINE= source fsl-setup-release.sh -b

 其中 DISTRO 的設定,以 i.MX 系列來說,原廠建議使用其所提供之 DISTRO configuration,因為這些設定原廠都會持續支援並且都是經過驗證跟測試過的。關於目前支援的 DISTRO 設定,茲節錄原廠文件[1]內容如下,

 

以 i.MX8M Mini 採用 xwayland 為例,建立 machine folder 的指令[2]如下,

 $ DISTRO=fsl-imx-xwayland MACHINE=imx8mmevk source fsl-setup-release.sh -b build-xwayland-imx8mmevk


<略>

同意 EULA 之後,會自動產生並進入 build dir 中,所謂的 machine folder 就產生了。在 build dir 內,還包含一個conf 的資料夾,裡面放有 local.conf 和 bblayers.conf 等 Yocto 設定檔,之後 bitbake 執行會依照這些設定檔進行後續動作。local.conf 包含了 MACHINE、DISTRO 等資訊。而 bblayers.conf 則列出了 i.MX Yocto Project 所有可能用到的 metalayer。另外,在上一章節曾經提到,i.MX 系列較新的部分會優先更新在資料夾〝meta-fsl-bsp-release〞裡面。所以在產生 machine folder 的過程中,script〝fsl-setup-release.sh〞除了建立出 machine folder 之外,同時也會將資料夾〝meta-fsl-bsp-release〞裡面的內容取出與舊版中對應的位置做比對且更新。例如在與資料夾〝meta-freescale〞的內容比對之後,相異或新增的部分就會再增加到〝bblayers.conf〞以及〝local.conf〞。

[1] i.MX Yocto Project User's Guide(Document Number: IMXLXYOCTOUG,Rev. L4.14.98-2.0.0_ga, 04/2019)

[2] -b 參數 可自行定義,將會是產生出來的資料夾名稱。


    2.4 選擇一個 i.MX Yocto Project 的 image
    設定好 Machine 之後,接下來要選擇待 build 的 image。Yocto Project 可提供多種 image 讓 user 選擇。如下圖,Poky 提供了〝core-image-minimal〞、〝core-image-base〞以及〝core-image-sato〞。一般我們會使用〝fsl-image-validation-imx〞作為我們 default 的選項,後面我們同樣會選擇〝fsl-image-validation-imx〞作為我們的範例。

圖片來源於 NXP官方文件(i.MX_Yocto_Project_User's_Guide.pdf)
    2.5 Build image

在前一章節所建立的環境下,Yocto Project 利用 bitbake command 可以 build 出 image,指令如下,

$ bitbake fsl-image-validation-imx

完成之後,產生出來的 image 可以在下面的資料夾找到,其中檔案〝fsl-image-validation-imx-imx8mmevk.sdcard.bz2〞可搭配 dd command 做完整的 SD Card 燒錄。

另外,在 tmp/work 下,有各個 Package 在每個階段所產生出來的檔案,不管是 fetch 時期的 source code,compile 時期的 object file,或是 deploy 之後的 image。如果能夠多理解這些資料夾的內容會對開發上有極大的幫助,不管是要從 source code 裡找答案,或是直接單獨 build 某個 package 來做驗證都可能加速產品開發的時程。


    2.6 Bitbake 選項
    前面我們使用了簡單的 bitbake 指令 build 出完整的 image。但其實,bitbake 還有更多的用處。下面列舉幾個常用的 bitbake 指令,如果使用者可以善用這些指令,在開發上可事半功倍。
  • -h 秀出 Help 訊息,簡易的使用說明都會列出來

$ bitbake -h

  • -e 秀出環境變數。但由於資料太多,通常會搭配 grep 擷取欲得知的部分。例如:欲取得〝imx-atf〞source code 的位置可以這樣做,

$ bitbake -e imx-atf | grep "^S="

  • -g 可列出 target 所包含之 installed package list

$ bitbake -g fsl-image-validation-imx && cat pn-buildlist | grep -ve "native" | sort | uniq

  • -s 秀出所有的 package 以及它的版本

$ bitbake -s

  • -c 表示 task command、-f 可令其強制執行

$ bitbake -f -c

例如:

列出這個 package 的 task 列表

$ bitbake linux-imx -f -c listtasks

Compile 這個 package

$ bitbake linux-imx -f -c compile

Deploy 這個 package

$ bitbake linux-imx -f -c deploy


    2.7 重啟環境
    若是開發環境的終端機視窗關閉之後,我們可以使用以下指令重啟。

$ source setup-environment

例如:

$ source setup-environment build-xwayland-imx8mmevk/



3. Image
燒錄

前面的章節有提到,產生出來的 image 會放在 /tmp/deploy/images。在預設的情況下,SD Card image 會以 .sdcard.bz2 的格式存在(依據 IMAGE_FSTYPES 的定義,可能會有其他的壓縮格式)。.sdcard 檔案裡面會包含 U-boot,kernel,rootfs 等完整的系統。

產生出來的 image file 為 fsl-image-validation-imx-imx8mmevk.sdcard.bz2

燒錄的方式如下,先解壓縮,

$ bunzip2 -dk -f .sdcard.bz2

 

使用 dd 進行燒錄, 的值需要視當下 host 的配置決定,

$ sudo dd if=.sdcard of=/dev/sd bs=1M conv=fsync

 

另一種方法是使用 UUU tool 燒錄(Universal Update Utility),此時 EVK 板子需要設置為 Download Mode。

> uuu uuu_sd.auto

 

燒錄完畢後,EVK 板可開到 command line,

 

Note:

需要注意燒錄 .sdcard,rootfs 的空間將受到限制。

 

關於 uuu_sd.auto 的設定內容,

uuu_version 1.2.39

 

# This command will be run when i.MX6/7 i.MX8MM, i.MX8MQ

SDP: boot -f imx-boot-imx8mmevk-sd.bin-flash_evk

 

# This command will be run when ROM support stream mode

# i.MX8QXP, i.MX8QM

SDPS: boot -f imx-boot-imx8mmevk-sd.bin-flash_evk

 

# These commands will be run when use SPL and will be skipped if no spl

# SDPU will be deprecated. please use SDPV instead of SDPU

# {

SDPU: delay 1000

SDPU: write -f imx-boot-imx8mmevk-sd.bin-flash_evk -offset 0x57c00

SDPU: jump

# }

 

# These commands will be run when use SPL and will be skipped if no spl

# if (SPL support SDPV)

# {

SDPV: delay 1000

SDPV: write -f imx-boot-imx8mmevk-sd.bin-flash_evk -skipspl

SDPV: jump

# }

 

FB: ucmd setenv fastboot_dev mmc

FB: ucmd setenv mmcdev ${sd_dev}

FB: ucmd mmc dev ${sd_dev}

FB: flash -raw2sparse all fsl-image-validation-imx-imx8mmevk.sdcard

FB: flash bootloader imx-boot-imx8mmevk-sd.bin-flash_evk

FB: done

至此,i.MX8M Mini 的開發環境以及 EVK 板端的燒錄都已經完成,板子也可正常開機。接下來,就可以進行下一步開發。而在後續的文章裡頭,我們將會持續介紹有關 i.MX8M Mini 的相關技術。To Be Continued…

4. 參考文獻
  • MX_Yocto_Project_User's_Guide.pdf
  • MX_Linux_User's_Guide.pdf

https://www.nxp.com/webapp/Download?colCode=imx-yocto-L4.14.98_2.0.0_ga






★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論

Shaun

Shaun

2022年4月13日
請問有spi 燒錄方式嗎?