1. 程式人生 > >ARM開發板編譯----MYS-6ULX

ARM開發板編譯----MYS-6ULX

記錄一下之前燒ARM板的經歷,本人第一次燒ARM板,歡迎大家評論探討

剛畢業,一進公司就被安排的明明白白。望著手中嶄新的板子,慢慢摸索唄

首先說一個慘痛的經歷,由於沒有經驗,對Linux核心、系統等不熟悉,一開始就是自己在PC上裝了一個虛擬機器,分配了1G記憶體和50G硬碟(好吧,在學校的時候這種配置夠我用了),然而多次耗時耗力的編譯失敗,讓我開始懷疑人生。。。

重點!保證基本的軟硬體環境要求:

強烈建議記憶體要2G以上(注意不包括2G,因為記憶體太小編譯可能有問題),磁碟空間至少要80G以上,推薦120G,CPU至少雙核。強烈不推薦虛擬機器方式,直接在硬碟上安裝Ubuntu,除非你的磁碟效能很高。

最後,我是在公司的伺服器上編譯完成的(分配了8G記憶體和足夠的磁碟空間)

參照開發手冊《MYS-6ULX-LinuxDevelopmentGuide_zh.pdf》

1、部署開發環境

新開一個視窗,安裝必備軟體包

sudo apt-get install build-essential git-core libncurses5-dev flex bison texinfo zip unzip zlib1g-dev gettext u-boot-tools g++ xz-utils mtd-utils gawk diffstat gcc-multilib python git make gcc g++ diffstat bzip2 gawk chrpath wget cpio texinfo

2、建立工作目錄

建立工作目錄,方便設定統一的環境變數路徑。下載原始碼到工作目錄下,同時設定DEV_ROOT變數,方便後續步驟的路徑訪問。

mkdir -p ~/MYS6ULx-devel

export DEV_ROOT=~/MYS6ULx-devel    //配置到/etc/profile檔案中,使永久生效

在當前目錄下解壓檔案,得到四個資料夾,並複製到工作目錄下。

cp -r 01-Document $DEV_ROOT

cp -r 02-Images $DEV_ROOT

cp -r 03-Tools $DEV_ROOT

cp -r 04-Source $DEV_ROOT

3、配置編譯工具

3.1 Linaro編譯器

cd $DEV_ROOT

tar -xvf 03-Tools/Toolchain/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

在/etc/profile檔案中新增如下換環境

執行完上述命令後輸入"arm-linux-gnueabihf-gcc -v",若有輸出版本資訊如下圖,說明設定成功,以上設定只對當前終端有效。

3.2 Yocto編譯工具鏈

Yocto提供的工具鏈有兩種,一種是底層開發的meta-toolchain,另一種是用於應用開發的工具鏈。前者和Linaro類似,後者包含應用開發中的相關庫,可以直接使用pkg-config工具來解決標頭檔案或庫檔案的依賴關係。MYS-6ULX的資源包中有提供兩種工具鏈。

包含Qt5相關庫的應用工具鏈:

myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

不包含Qt5的應用工具鏈:

myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

meta-toolchain:

myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

Yocto編譯器是以SDK工具包方式來提供,需要先安裝SDK包後,才可以使用。安裝方法如下:

以普通使用者許可權執行shell指令碼,執行中會提示安裝路徑,預設在/opt目錄下(自行建立目錄,如下圖),同時會提示輸入使用者密碼以便有寫入目錄的許可權。安裝完成後,可以使用"source"或"."命令載入工具鏈環境到當前終端。

此處應先執行:

chmod +x myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

chmod +x myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

使兩個檔案擁有可執行許可權。

驗證SDK工具鏈是否安裝正確,先使用"source"命令載入Yocto的環境配置檔案,然後檢視編譯器版本。

source /opt/myir-imx6ulx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-poky-linux-gnueabi  //載入環境

arm-poky-linux-gnueabi-gcc –v //顯示版本如下圖

同樣方法安裝底層開發的工具鏈meta-toolchain。安裝兩個工具鏈,需指定不同目錄,請勿使用相同目錄,出現檔案相互覆蓋情形。

執行:

source /opt/myir-imx6ulx-fb/meta-toolchain/environment-setup-cortexa7hf-neon-poky-linux-gnueabi       //載入環境

arm-poky-linux-gnueabi-gcc –v     //顯示版本如下圖

4、構建系統

主要介紹MYS-6ULX開發板上, Linux作業系統相關部件的編譯和使用。MYS-6ULX的Linux系統包含以下部件:

U-Boot: 載入程式,支援不同方式啟動核心。

Linux Kernel: 適用於MYS-6ULX開發板的Linux 4.1.15核心,同時包含支援板載外設的驅動。

Yocto: 一個開源協作專案,提供豐富的模板、工具和方法來支援構建出面向嵌入式產品的自定義Linux系統。

本部分中用到的程式碼存放在資源包04-Source目錄下,部分軟體包的檔名中有標識號。

編前u-boot和Linux核心程式碼前,請先安裝meta-toolchain並載入環境變數到當前shell。

4.1 編譯U-Boot

進入Bootloader目錄,解壓U-boot原始碼:

cd $DEV_ROOT/04-Source/

tar -xvf MYiR-iMX-uboot.tar.gz

cd MYiR-iMX-uboot

開始編譯:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- <config>

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

這裡的是配置選項名稱,不同的啟動模式需使用不同的配置選項,MYS-6ULX開發板四種選項:

啟動模式                               編譯選項

MYS-6ULX-IND NAND Flash        mys_imx6ul_14x14_nand_defconfig

MYS-6ULX-IND eMMC Flash        mys_imx6ul_14x14_emmc_defconfig

MYS-6ULX-IoT NAND Flash        mys_imx6ull_14x14_nand_defconfig

MYS-6ULX-IoT eMMC Flash        mys_imx6ull_14x14_emmc_defconfig

此處選擇mys_imx6ul_14x14_nand_defconfig。

mkimage工具是在u-boot的tools目錄下,u-boot編譯完成後,mkimage也會被編譯出來,直接使用即可。

4.2 Linux Kernel

進入04-Source目錄,解壓核心原始碼:

cd $DEV_ROOT/ 04-Source

tar -xvf MYiR-iMX-Linux.tar.gz

cd MYiR-iMX-Linux

開始編譯:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mys_imx6_defconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules

編譯完成後在"arch/arm/boot"目錄會生成核心映象檔案zImage,在"arch/arm/boot/dts"目錄會生成DTB檔案。

mys-imx6ul-14x14-evk-emmc.dtb        

mys-imx6ul-14x14-evk-gpmi-weim.dtb       

mys-imx6ul-14x14-evk-emmc-myb6ulx.dtb    

mys-imx6ul-14x14-evk-gpmi-weim-myb6ulx.dtb  

mys-imx6ull-14x14-evk-emmc.dtb           

mys-imx6ull-14x14-evk-gpmi-weim.dtb         

mys-imx6ull-14x14-evk-emmc-myb6ulx.dtb      

mys-imx6ull-14x14-evk-gpmi-weim-myb6ulx.dtb 

5、構建檔案系統

Linux系統平臺上有許多開源的系統構建框架,這些框架方便了開發者進行嵌入式系統的構建和定製化開發,目前比較常見的有Buildroot, Yocto,OpenEmbedded等等。其中Yocto專案使用更強大和系統化的方法,來構建出適合嵌入式產品的Linux系統。

Yocto不僅僅是一個製做檔案系統工具,同時提供整套的基於Linux的開發和維護工作流程,使底層嵌入式開發者和上層應用開發者在統一的框架下開發,解決了傳統開發方式下零散和無管理的開發形態。

Yocto是一個開源的“umbrella”專案,意指它下面有很多個子專案,Yocto只是把所有的專案整合在一起,同時提供一個參考構建專案Poky,來指導開發人員如何應用這些專案,構建出嵌入式Linux系統。它包含Bitbake,OpenEmbedded-Core, 板級支援包,各種軟體包的配置檔案。通過Poky,可以構建出不同類需求的系統,如最小的系統core-image-minimal、帶GUI的圖形系統fsl-image-gui、帶Qt5圖形庫的fsl-image-qt5。

NXP i.MX6UL/i.MX6ULL晶片提供符合Yocto的構建配置檔案,通過這些檔案可以構建出NXP定製的映象檔案。我們提供了符合MYS-6ULX的配置檔案,幫助開發者構建出可燒寫在MYS-6ULX板上的Linux系統映象。

5.1 Yocto構建Linux系統

本節適合需要對檔案系統進行深度定製的開發者,希望從Yocto構建出符合MYS-6ULX系列開發板的檔案系統,同時基於它的定製需求。初次體驗使用或無特殊需要的開發者可以直接使用MYS-6ULX已經提供的檔案系統。

由於Yocto構建前需要下載檔案系統中所有軟體包到本地,為了快速構建,MYS-6ULX已經把相關的軟體打包好,可以直接解壓使用,減少重複下載的時間。

這裡提供了兩種方式使用Yocto:

使用由MYS-6ULX資源包中的Yocto和相關檔案

從NXP官網下載Yocto

初次使用Yocto的使用者,推薦使用第一種方式。

注意:構建Yocto不需要載入工具鏈環境變數,請建立新shell或開啟新的終端視窗。

MYS-6ULX提供的Yocto:

解壓Yocto原始碼包,同時解壓Yocto-downloads.tar.xz軟體包至Yocto目錄下。

cd $DEV_ROOT

tar xvf 04-Source/fsl-release-yocto.tar.gz

tar xvf 04-Source/Yocto-downloads.tar.xz -C fsl-release-bsp

cd fsl-release-bsp

還需要將Linux核心和U-Boot程式碼放在使用者家目錄下,方便開發和Yocto編譯。

cd $DEV_ROOT

tar xvf $DEV_ROOT/04-Source/ MYiR-iMX-Linux.tar.gz -C ~/

tar xvf $DEV_ROOT/04-Source/ MYiR-iMX-uboot.tar.gz -C ~/

6、初始化Yocto構建目錄

進入/home/ieslab-ubuntu/MYS6ULx-devel/fsl-release-yocto目錄,使用NXP提供的fsl-setup-release.sh指令碼,會建立一個工作空間,然後在此空間下構建映象。執行指令碼後會先要求閱讀並同意版權聲明後才會進入構盡過目錄。同時,指令碼會預設建立並進入build目錄。如果需要特定目錄名稱,可以使用-b引數,如"-b myir"。 這裡的MACHINE引數有兩種裝置,"mys6ull14x14"對應於MYS-6ULX-IoT和"mys6ul14x14"對應於MYS-6ULX-IND版本。

DISTRO=myir-imx-fb MACHINE=mys6ul14x14 source fsl-setup-release.sh -b build

tree conf/

build/conf目錄下是當前構建的配置檔案。

7、構建GUI Qt5版的系統

在build目錄下執行:

bitbake fsl-image-qt5

第一次構建時,會需要很長時間,而且一般會有幾十個警告,請耐心等待。8G的記憶體大概花了6小時。

構建完成後會在"tmp/deploy/images/mys6ul14x14/"目錄下生成不同的檔案。

8、構建非GUI版的系統

此處不做描述。

9、Yocto構建SDK工具

Yocto提供可構建出SDK工具的功能,用於底層或上層應用開發者使用的工具鏈和相關的標頭檔案或庫檔案,免去使用者手動製做或編譯依賴庫。SDK工具有兩種,一種是適合底層開發的工具鏈,用於編譯u-boot和linux核心程式碼,另外一種是應用開發工具鏈,附帶目標系統的標頭檔案和庫檔案,方便應用開發者移植應用在目標裝置上。兩種SDK工具都是shell自解壓檔案,執行後,預設安裝在/opt目錄下。

9.1 構建底層工具連

bitbake meta-toolchain

構建完成後,在"tmp/deploy/sdk"目錄下有三個檔案:

這裡有兩個manifest檔案,host.manifest是工具鏈中包含主機端的軟體包的列表,target.manifest是包含目標裝置端的軟體包列表。

9.2 構建應用層工具鏈

應用層工具鏈是和Image名稱是統一的,這裡可以使用"fsl-image-qt5"和"core-iamge-base"兩種引數。

bitbake -c populate_sdk <image name>,此處我選擇了"fsl-image-qt5"。

構建完成後,同樣在"tmp/deploy/sdk/"目錄下有三個檔案:

".host.manifest"檔案表示工具鏈中包含主機端的軟體包列表,".target.manifest"表示工具鏈中包含目標設德端的軟體包列表。"myir-imx6ulx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"檔案是構建出的SDK工具鏈,可以直接安裝在其他Linux系統中,開發和編譯目標端裝置的二進位制程式。

 

到此,所需要燒寫的Uboot、Linux核心、基於QT的檔案系統、裝置樹以及交叉開發的工具鏈均完成了。

一定要注意環境的載入

歡迎探討指正