1. 程式人生 > >【imx6ul】從頭搭建imx6ul開發環境(uboot、核心編譯及燒入、mfgtools詳細使用方法)

【imx6ul】從頭搭建imx6ul開發環境(uboot、核心編譯及燒入、mfgtools詳細使用方法)

歡迎掃碼關注微信公眾號:柒零玖嵌入式,更多嵌入式軟硬體相關分享!

  • 系統:linux-4.1.15
  • 檔案系統:busybox-1.22.1.tar.bz2
  • 編譯器: gcc version 4.9.1 20140710 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07) 
I.MX6ULL 系列是基於高效能、超低功率ARM Cortex-A7核心 處理器,處理器執行速度高達528 MHz。取代三星2440,慢慢成為國內流行的低端嵌入式linux產品的首選。本文主要記錄,拿到一款imx6如何重燒系統,搭建起開發環境。及mfgtools使用原理。


一、編譯所需檔案

(1)更新交叉編譯工具鏈、
tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux  -C  /opt
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin"
(2)編譯uboot
tar xvf MYS-IMX6UL-uboot.tar.bz2
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mys_imx6ull_14x14_nand_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
uboot使用網路前:
setenv ipaddr 192.168.1.17
setenv ethaddr 00:0c:29:4d:e4:f4
setenv  gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.102
saveenv
(3)編譯核心及裝置樹
tar -xvf MYS-IMX6UL-Linux.tar.gz
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
(4)製作檔案系統imx6支援Yocto來構建我們所需的檔案系統,這裡我們使用網路檔案系統即可。
setenv  bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.102:/work/new_work/rootfs_2440  ip=192.168.1.17:192.168.1.102:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttymxc0,115200
此時我們準備好了:u-boot.imx  、zImage、zImage-imx6ul-14x14-evk.dtb、檔案系統等。如何燒寫呢?此時就需要用到NXP提供的一個工具。這裡重點介紹一下這個工具的操作細節。

二、mfgtools軟體的使用方法

MFGTools 是  NXP 官方推薦的一個使用  OTG 來升級映象的軟體。此軟體功能很輕大,而且可塑性非常高:可以用來升級  Linux,升級  Android;單獨刷寫某一系統分割槽,如  android 的  boot.img 分割槽等;獨立地刷寫  spi nor,emmc 等等;
1、幾個重要的檔案(1)開啟.vbs檔案:如mfgtool2-yocto-mx-evk-nand.vbs內容如下:
Set wshShell = CreateObject("WScript.shell")
wshShell.run "mfgtool2.exe -c ""linux"" -l ""NAND Flash""  -s ""board=sabreauto"" -s ""lite=l"" -s ""6uluboot=14x14evk"" -s ""nand=nand"" -s ""6uldtb=14x14-evk"" -s ""nanddtb=gpmi-weim"" -s ""part_uboot=0"" -s ""part_kernel=1"" -s ""part_dtb=2"" -s ""part_rootfs=3""   "
Set wshShell = Nothing
我們看到,這裡相當於定義了一些變數。後面會用到這裡定義的東西,如""lite=l"" -s ""6uluboot=14x14evk"" -s ""nand=nand"。一會會用到
(2)MfgTool.log記錄燒寫過程中的資訊,出錯可以來檢視(3)重點關心的目錄:工具目錄下有如下目錄:Profiles\Linux\OS Firmware目錄裡面存放著的是映象檔案,映象檔案分為兩種:第一種是作為媒介用途的映象(可以啟動的 linux 的 uboot 和 dtb 以及 zImage),存放於 mfgtools\Profiles\Linux\OS Firmware\firmware 目錄;第二種是真正燒錄到  emmc 或者 nand 的映象檔案,存放於mfgtools\Profiles\Linux\OS Firmware\files 目錄。之所以存著這兩種映象,是因為 s MFGTools 的燒寫原理是先將媒介映象下載到到 ddr3記憶體裡面,然後啟動linux,再通過這個啟動的linux把目標映象固化到 emmc或者 nand裡。
(4)Profiles\Linux\OS Firmware\ucl2.xml升級時候的操作檔案,s MFGtools 會根據檔案裡面 t list 的內容進行相應的升級。檔案以
<CMD state="BootStrap"type="jump" > Jumping to OS image. </CMD>
為界限,可以分為上階段跟下階段,上階段是把“媒介映象”燒錄到  ddr3 3  記憶體裡並執行起來,下階段是燒錄“ file”
資料夾裡面的檔案到  emmc 裡面。對於第二階段,關注以下注釋:
<!- -- create partition - --> >
<!- -- burn uboot - --> >
<!- -- burn uImage - --> >
<!- -- burn dtb - --> >
<!- -- burn rootfs - --> >
註釋下的內容嚴格規定了 s MFGTools 的燒錄過程,分割槽-->燒寫  uboot- --> >燒寫  uImage- --> >燒寫  dtb- --> >燒寫  rootfs。
ucl2.xml是很重要的檔案,但是裡面內容很簡單,用到了最初定義的那個,這裡就不嘮叨了。很顯然,這個軟體配置好了,功能是很強大的。2、燒寫過程(注意順序不要改變)(1)調節撥碼開關(改變SOC模式)(2)上電(3)連線OTG與開發板和PC(4)雙擊:mfgtool2-yocto-mx6ul-evk-nand.vbs啟動燒入軟體(5)點選MfgTool界上的"Start"按鈕,此時會安裝目錄中配置檔案的資訊,開始燒入。三、tftp燒寫拋開這些花哨的軟體,使用最原始的方法燒寫核心、裝置樹、檔案系統等:核心啟動有如下分割槽:
0x000000000000-0x000000500000 : "boot"
0x000000500000-0x000000f00000 : "kernel"
0x000000f00000-0x000001000000 : "dtb"
0x000001000000-0x000010000000 : "rootfs"
//燒寫核心
nand erase 0x500000 0xa00000   
tftp zImage  
nand write 0x80800000 0x500000 $filesize       
//燒寫裝置樹
nand erase 0xf00000 0x100000   
tftp zImage-imx6ull-14x14-evk-gpmi-weim.dtb   
nand write  0x80800000  0xf00000 $filesize

總結:

到此我們可以實現mfgtools來燒寫uboot及核心了。本人還是傾向於拋開這些工具,使用最通用的方法來燒寫。我們可以修改工具內的配置,使用這個工具只來更新uboot。之後我們可以通過nfs tftp等多種通用的方式來更新核心、裝置樹、及檔案系統。