米爾i.MX6UL開發板Linux構建文件系統

硬件:米爾i.MX6UL開發板MYD-Y6ULX
簡介:MYD-Y6ULX開發板(i.MX6UL開發板)由MYC-Y6ULX核心板和底板組成,基於NXP i.MX6UL處理器或i.MX6ULL處理器可選,MYD-Y6ULX開發板(i.MX6ULL開發板)提供豐富外設硬件,板載了Mini PCIE接口(用於4G模塊)及SIM卡槽、WIFI芯片及天線接口、雙百兆網口、LCD液晶接口、音頻接口、帶隔離的CAN,RS485,RS232等。

部署開發環境:開發前需要PC安裝好Linux操作系統,推薦使用Ubuntu 16.04 64bit發行版,連接網線並配置好網絡,後續操作需要連接互聯網安裝或下載相關軟件包。


構建文件系統
Linux系統平臺上有許多開源的系統構建框架,這些框架方便了開發者進行嵌入式系統的構建和定製化開發,目前比較常見的有Buildroot, Yocto,OpenEmbedded等等。其中Yocto項目使用更強大和定製化的方法,來構建出適合嵌入式產品的Linux系統。
Yocto不僅僅是一個製做文件系統工具,同時提供整套的基於Linux的開發和維護工作流程,使底層嵌入式開發者和上層應用開發者在統一的框架下開發,解決了傳統開發方式下零散和無管理的開發形態。
Yocto是一個開源的“umbrella”項目,意指它下面有很多個子項目,Yocto只是把所有的項目整合在一起,同時提供一個參考構建項目Poky,來指導開發人員如何應用這些項目,構建出嵌入式Linux系統。它包含Bitbake, OpenEmbedded-Core, 板級支持包,各種軟件包的配置文件。通過Poky,可以構建出不同類需求的系統,如最小的系統core-image-minimal、全功能命令行系統core-image-base、帶Qt5圖形庫的fsl-image-qt5。
MYD-Y6YKX提供了符合Yocto的配置文件,幫助開發者構建出可燒寫在MYD-Y6ULX板上的Linux系統鏡像。

Yocto構建Linux系統
本節適合需要對文件系統進行深度定製的開發者,希望從Yocto構建出符合MYD-Y6ULX系列開發板的文件系統,同時基於它的定製需求。初次體驗使用或無特殊需要的開發者可以直接使用MYD-Y6ULX已經提供的文件系統。
由於Yocto構建前需要下載文件系統中所有軟件包到本地,爲了快速構建,MYD-Y6ULX已經把相關的軟件打包好,可以直接解壓使用,減少重複下載的時間。
注意:構建Yocto不需要加載工具鏈環境變量,請創建新shell或打開新的終端窗口。
MYD-Y6ULX提供的Yocto解壓Yocto源碼包,同時解壓Yocto-downloads.tar.xz軟件包至Yocto目錄下。Yocto-downloads.tar.xz是把Yocto構建中用到的第三方軟件包打包,免除開發者再次下載花費的時間。
注意:由於Yocto-downloads.tar.xz文件較大,無法與MYD-Y6ULX打包在同一文件內,請訪問網頁下載: http://down.myir-tech.com/MYD-Y6ULX/。
文件名爲Yocto-downloads.tar.xz。
cd $DEV_ROOT
tar xvf 04-Source/fsl-release-yocto.tar.xz
tar xvf 04-Source/Yocto-downloads.tar.xz -C fsl-release-bsp

還需要將Linux內核和U-Boot代碼放在用戶家目錄下,方便開發和Yocto編譯。
tar xvf 04-Source/MYiR-iMX-Linux.tar.gz -C ~/
tar xvf 04-Source/MYiR-iMX-uboot.tar.gz -C ~/

初始化Yocto構建目錄
使用NXP提供的fsl-setup-release.sh腳本,會創建一個工作空間,然後在此空間下構建鏡像。執行腳本後會先要求閱讀並同意版權聲明後纔會進入構盡過目錄。同時,腳本會默認創建並進入build目錄。如果需要特定目錄名稱,可以使用-b參數,如"-b myir"。 這裏的MACHINE參數爲"mydy6ull14x14"
cd fsl-release-bsp
DISTRO=myir-imx-fb MACHINE=myd-y6ull14x14 source fsl-setup-release.sh -b build
tree conf/
conf/
├── bblayers.conf
├── bblayers.conf.org
├── local.conf
├── local.conf.org
├── local.conf.sample
├── sanity_info
└── templateconf.cfg

build/conf目錄下是當前構建的配置文件。上面在初始化後,就可以構建適合"myd-y6ull14x14"的鏡像了。
構建GUI Qt5版的系統
第一次構建時,會需要很長時間,請耐心等待。
bitbake fsl-image-qt5
構建非GUI版的系統

第二次構建時,如果是同設備,不需要修改其它文件,直接編譯即可。

bitbake core-image-base


構建文件系統完成後,會在輸出目錄下有manifest文件,這個文件裏包含了對應文件系統中已安裝的軟件包。
Yocto第一次構建會需要很長時間,取決於計算機的CPU核心數和硬件讀寫速度。Yocto建議可以使用八核和SSD硬盤可以加速構建速度。第一次構建完成後會生成緩存,後面修改的構建,時間會減少很多。
檭建完成後在會"tmp/deploy/images/myd-y6ull14x14/"目錄下生成不同的文件,以下是構建後的一個例子:

ls -lh tmp/deploy/images/myd-y6ull14x14/
total 1.4G
-rw-r--r-- 1 kevinchen kevinchen 64M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 4.4K Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 80M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 15M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 11M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.tar.xz
-rw-r--r-- 1 kevinchen kevinchen 64M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.ext4
12
-rw-r--r-- 1 kevinchen kevinchen 4.4K Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 80M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 15M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 11M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.tar.xz
lrwxrwxrwx 1 kevinchen kevinchen 57 Oct 11 16:48 core-image-base-myd-y6ull14x14.ext4 -> core-image-base-myd-y6ull14x14-20171011084
756.rootfs.ext4
lrwxrwxrwx 1 kevinchen kevinchen 61 Oct 11 16:48 core-image-base-myd-y6ull14x14.manifest -> core-image-base-myd-y6ull14x14-2017101
1084756.rootfs.manifest
lrwxrwxrwx 1 kevinchen kevinchen 59 Oct 11 16:48 core-image-base-myd-y6ull14x14.sdcard -> core-image-base-myd-y6ull14x14-201710110
84756.rootfs.sdcard
lrwxrwxrwx 1 kevinchen kevinchen 60 Oct 11 16:48 core-image-base-myd-y6ull14x14.tar.bz2 -> core-image-base-myd-y6ull14x14-20171011
084756.rootfs.tar.bz2
lrwxrwxrwx 1 kevinchen kevinchen 59 Oct 11 16:48 core-image-base-myd-y6ull14x14.tar.xz -> core-image-base-myd-y6ull14x14-201710110
84756.rootfs.tar.xz
-rw-r--r-- 1 kevinchen kevinchen 532M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 7.3K Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.manifest
-rw-r--r-- 1 kevinchen kevinchen 548M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.sdcard
-rw-r--r-- 1 kevinchen kevinchen 111M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.tar.bz2
-rw-r--r-- 1 kevinchen kevinchen 64M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.tar.xz
lrwxrwxrwx 1 kevinchen kevinchen 55 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.ext4 -> fsl-image-qt5-myd-y6ull14x14-20171011090003.
rootfs.ext4
lrwxrwxrwx 1 kevinchen kevinchen 59 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.manifest -> fsl-image-qt5-myd-y6ull14x14-20171011090
003.rootfs.manifest
lrwxrwxrwx 1 kevinchen kevinchen 57 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.sdcard -> fsl-image-qt5-myd-y6ull14x14-2017101109000
3.rootfs.sdcard
lrwxrwxrwx 1 kevinchen kevinchen 58 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.tar.bz2 -> fsl-image-qt5-myd-y6ull14x14-201710110900
03.rootfs.tar.bz2
lrwxrwxrwx 1 kevinchen kevinchen 57 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.tar.xz -> fsl-image-qt5-myd-y6ull14x14-2017101109000
3.rootfs.tar.xz
-rw-r--r-- 2 kevinchen kevinchen 1.3M Oct 11 16:47 modules--4.1.15-r0-myd-y6ull14x14-20171011084447.tgz
lrwxrwxrwx 1 kevinchen kevinchen 52 Oct 11 16:47 modules-myd-y6ull14x14.tgz -> modules--4.1.15-r0-myd-y6ull14x14-20171011084447.tg
z -
rw-r--r-- 2
kevinchen kevinchen 294 Oct 11 17:01 README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot.imx -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot.imx-nand -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 24 Oct 11 16:01 u-boot.imx-sd -> u-boot-sd-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot-myd-y6ull14x14.imx -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 26 Oct 11 16:01 u-boot-myd-y6ull14x14.imx-nand -> u-boot-nand-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 24 Oct 11 16:01 u-boot-myd-y6ull14x14.imx-sd -> u-boot-sd-2016.03-r0.imx
-rwxr-xr-x 2 kevinchen kevinchen 395K Oct 11 16:01 u-boot-nand-2016.03-r0.imx
-rwxr-xr-x 2 kevinchen kevinchen 343K Oct 11 16:01 u-boot-sd-2016.03-r0.imx
lrwxrwxrwx 1 kevinchen kevinchen 51 Oct 11 16:47 zImage -> zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin
-rw-r--r-- 2 kevinchen kevinchen 6.2M Oct 11 16:47 zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin
-rw-r--r-- 2 kevinchen kevinchen 37K Oct 11 16:47 zImage--4.1.15-r0-myd-y6ull-gpmi-weim-20171011084447.dtb
lrwxrwxrwx 1 kevinchen kevinchen 51 Oct 11 16:47 zImage-myd-y6ull14x14.bin -> zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin
lrwxrwxrwx 1 kevinchen kevinchen 56 Oct 11 16:47 zImage-myd-y6ull-gpmi-weim.dtb -> zImage--4.1.15-r0-myd-y6ull-gpmi-weim-201710110
84447.dtb
生成的文件中,有一些是鏈接文件,下面是不同文件的用途:


Bitbake常用命令


Yocto構建SDK工具
Yocto提供可構建出SDK工具的功能,用於底層或上層應用開發者使用的工具鏈和相關的頭文件或庫文件,免去用戶手動製做或編譯依賴庫。SDK工具有兩種,一種是適合底層開發的工具鏈,用於編譯u-boot和linux內核代碼,另外一種是應用開發工具鏈,附帶目標系統的頭文件和庫文件,方便應用開發者移植應用在目標設備上。兩種SDK工具都是shell自解壓文件,執行後,默認安裝在/opt目錄下。
構建底層工具連
bitbake meta-toolchain
構建完成後,在"tmp/deploy/sdk"目錄下有三個文件:
ls tmp/deploy/sdk/ -lh
myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest
myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest

這裏有兩個manifest文件,host.manifest是工具鏈中包含主機端的軟件包的列表,target.manifest是包含目標設備端的軟件包列表。
構建應用層工具鏈
應用層工具鏈是和Image名稱是統一的,這裏可以使用"fsl-image-qt5"和"core-iamge-base"兩種參數。
bitbake -c populate_sdk <image name>
構建完成後,同樣在"tmp/deploy/sdk/"目錄下有六個文件:
ls tmp/deploy/sdk/ -lh
myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest
myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest
myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest
myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh
myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest

".host.manifest"文件表示工具鏈中包含主機端的軟件包列表,".target.manifest"表示工具鏈中包含目標設德端的軟件包列表。"myir-imx-fb-glibcx86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"文件是構建出的fsl-image-qt5鏡像對應的SDK工具鏈,"myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"文件是構建出的core-image-base鏡像對應的SDK工具鏈。可以直接安裝在其他Linux系統中,開發和編譯目標端設備的二進制程序。

此章結束,下一章將介紹i.MX6UL開發板的Linux應用開發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章