|
硬件:米爾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等。 構建系統 本章主要介紹MYD-Y6ULX開發板上, Linux操作系統相關部件的編譯和使用。 MYD-Y6ULX的Linux系統包含以下部件: U-Boot: 引導程序,支持不同方式啟動內核。 Linux Kernel: 適用于MYD-Y6ULX開發板的Linux 4.1.15內核,同時包含支持板載外設的驅動。 Yocto: 一個開源協作項目,提供豐富的模板、 工具和方法來支持構建出面向嵌入式產品的自定義Linux系統。 本章中用到的代碼存放在資源包04-Source目錄下,編譯u-boot和Linux內核代碼前,請先安裝meta-toolchain并加載環境變量到當前shell。 編譯U-Boot 進入Bootloader目錄,解壓U-boot源碼: cd $DEV_ROOT/04-Source/ tar -xvf MYiR-iMX-uboot.tar.gz cd MYiR-iMX-uboot 開始編譯: make distclean make make 這里的是配置選項名稱,不同的啟動模式需使用不同的配置選項,MYD-Y6ULX開發板有兩種選項:
u-boot SD卡方式啟動時默認會先檢測"boot.scr"文件,這是u-boot上的腳本鏡像文件,用于臨時改變啟動設備順序。 以下是從TFTP下載zImage和dtb 文件并啟動的腳本例子。 使用mkimage工具"myd-y6ull-boot-mmc0-tftp.txt"文件制做成"boot.scr"文件,mkimage工具是在u-boot的tools目錄下,uboot編譯完成后,mkimage也會被編譯出來,直接使用即可。 cat myd-y6ull-boot-mmc0-tftp.txt setenv mmcroot '/dev/mmcblk0p2 rootwait rw rootdelay=5 mem=256M' run mmcargs tftpboot 0x83000000 zImage tftpboot 0x84000000 myd-y6ull-gpmi-weim.dtb bootz 0x83000000 - 0x84000000 ./tool/mkimage -A arm -T script -O linux -d myd-y6ull-boot-mmc0-tftp.txt boot.scr Linux Kernel 進入Kernel目錄,解壓內核源碼: cd $DEV_ROOT/04-Source tar -xvf MYiR-iMX-Linux.tar.gz cd MYiR-iMX-Linux 開始編譯: make distclean make myd_y6ulx_defconfig make zImage dtbs 編譯完成后在"arch/arm/boot"目錄會生成內核鏡像文件zImage,在"arch/arm/boot/dts"目錄會生成DTB文件。
MYD-Y6ULX板上的Micro SD卡槽是連接mmc0控制器,所有的dtb文件都是默認啟用mmc0控制器。 SD卡方式啟動時,U-Boot默認查找的文件是myd-imx6ull-14x14-evk-gpmi-weim.dtb文件。 更新kernel后,由于版本標識改變,若驅勸是以模塊方式加載,需要重新編譯驅動模塊: make modules 編譯后,可以安裝在指定位置: mkdir ../target-kernel make INSTALL_MOD_PATH=../target-kernel modules_install 這樣就可以把target-kernel目錄打包后,解壓在MYD-Y6ULX開發板的/lib目錄下使用。 構建文件系統 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還提供了豐富的開發文檔資源,讓開發者學習并定制自己的系統。 由于篇幅有限,不能完整介紹Yocto的使用方法,建議開發者先閱讀以下文 檔后,再開始動手構建。 Yocto Project Quick start Bitback User Manual Yocto Project Reference Manual Yocto Project Development Manual Yocto Project Complete Documentation Set 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 -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 zrw-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使用方法,請參考NXP官方Yocto使用文檔《i.MX Yocto Project User's Guide》 。 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 構建完成后,同樣在"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系 統中,開發和編譯目標端設備的二進制程序。 |