天天看點

Exynos4412 Uboot 的使用與燒寫

Uboot版本:u-boot-2013.01

開發闆:Exynos4412

      本文主要是熟悉U-boot 的使用以及如何将Uboot 燒入Exynos4412。當然在這之前首先必須保證開發闆上已經有了U-boot。如果沒有,請先燒入一個已經編譯好的Uboot.bin,可以利用JTAG或DNW。

一、環境搭建

        為了友善開發,這裡利用網絡傳輸資料,主要用到 tftp 與 nfs。tftp用于資料傳輸,nfs用于挂載根檔案系統。

1、tftp模式設定

      具體配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50319877,這裡使用tftp有兩種模式:a、互動模式(手動)b、自動模式。

a -- 互動模式

       在Uboot界面輸入以下指令:

       tftp 41000000 uImage  // 将tftp主機端uImage 拷貝到4412記憶體位址41000000處

       tftp 42000000 exynos4412-fs4412.dtb

       bootm 41000000 - 420000000

b-- 自動模式:

      設定bootcmd,這樣Uboot 加載成功後,會執行bootcmd指令,自動下載下傳檔案,并引導核心

      setenv bootcmd tftp 41000000 uImage \; tftp 42000000     exynos4412-fs4412.dtb\; bootm 41000000 - 42000000

      saveenv

bootcmd每條指令間要用到 '\' ,用于多條指令的輸入。

2、通過NFS挂載根檔案系統

1)配置nfs

     a -- 下載下傳

             sudo apt-get install nfs-kernel-server

     b -- 配置

            sudo vi /etc/exports

            在最後一行添加你的nfs共享目錄

            /nfsboot *(rw,sync,no_subtree_check)     note:保證此目錄已存在(權限:777)

     c -- 重新開機nfs服務

            sudo  /etc/init.d/nfs-kernel-server restart

     d -- 測試 

            第一種方法)showmount -e

            第二種方法)自己挂載

                                   mount -t nfs 127.0.0.1:/nfsboot  /mnt/xxx

具體配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50337933

2) 拷貝解壓已制作好的根檔案系統

      cp xxx/rootfs.tar.xz  /nfsboot

      tar xvf rootfs.tar.xz

3) 設定開發闆bootargs

     setenv bootargs root=/dev/nfs nfsroot=虛拟機ip:/nfsboot/rootfs rw console=ttySAC2,115200 ip=開發闆ip  init=/linuxrc

     saveenv

注:root=/dev/nfs 表示根檔案系統在/dev/nfs 上;nfsroot=虛拟機ip:/nfsboot/rootfs 為虛拟機檔案系統所在位置;init=/linuxrc 為開機後啟動的第一個程序;

4) 測試

     寫程式在開發闆運作

二、常用Uboot指令詳解

1、環境設定指令

a -- 檢視目前環境變量

      printenv

b -- 增加環境變量

      setenv

例: set ipaddr 192.168.1.1 ====>ipaddr=192.168.1.1

c -- 修改環境變量

      setenv  變量名  值

d -- 删除環境變量

      setenv 變量名

e--常用環境變量作用

   ipaddr:設定開發平台ip

   serverip:tftp伺服器ip

   netmask:子網路遮罩

   gatewayip:網關

   bootcmd:啟動核心變量(自動啟動時執行的指令)

   bootargs:傳輸給核心的參數(到核心階段,原環境變量已經不起作用)

   bootdelay:設定互動延時

2、資料傳輸指令

a -- 網絡

       tftp 記憶體位址 檔案名 (利用TFTP協定傳輸檔案)

b -- 序列槽 

       loadb  記憶體位址 (利用Kermit 傳輸協定)

3、存儲器通路指令

a -- 記憶體:

      md 顯示記憶體内容

      格式:md 41000000

      mm 修改記憶體值(位址自動加一)

      格式:mm  41000000   

            以 . 結束

           mm.w (2B)  mm.l(4B,預設)

       mw 用指定的資料填充記憶體

       格式:mw 41000000 12345678 10

       向0x41000000起始位址寫0x10次 0x12345678

b-- 外存:

1) -- nand:

    nand write 20008000 0 40000

    nand read 20008000 0 40000

    nand erase 0 40000

2) -- emmc:

    movi  write kernel 41000000

    将記憶體41000000 資料寫入到emmc的kernel分區

    movi  read kernel 41000000

    将emmc的kernel分區中的内容載入到記憶體41000000位址

注:Exynos4412 用的外存都是emmc,沒有nand flash、nor flash.

4、運作

a -- bootm 

       bootm指令是專門用于啟動在SDRAM中用U-boot 的mkimage工具處理過的記憶體映像(将pc指針指向記憶體位址,還有其它操作)

b -- go

       将pc指針指向記憶體位址

c -- boot

       重新開機開發闆

5、其它

 run:運作指定環境變量的内容

 help:檢視所有指令

三、下載下傳與燒寫

1、産品模式:

産品模式指Uboot、Kernel、rootfs已經移植制作成功,可以燒入外存中直接使用.

下面主要是将uboot,kernel,dtb,rootfs燒寫到emmc的方法,這裡将uboot,kernel,dtb,rootfs加載到記憶體中的方法都是用的tftp,當然還有其他方法,nfs 、SD卡都可以

1) -- uboot 燒寫:

      a) -- emmc中已經存在uboot

         通過網絡 :

                         tftp 41000000 u-bootxxx.bin

                         movi write u 41000000

         重新開機生效。

      b) -- emmc為空

         通過sd卡燒錄:

               一:開關拔到1000 (sd卡啟動)

                       輸入指令: sdfuse flashall

               二:開關拔回到0110 (emmc啟動)

        重新開機生效

 2)-- kernel及dtb燒寫

         通過網絡 tftp 41000000  uImage

                         movi write k 41000000

         通過網絡 tftp 41000000  exynos4412-fs4412.dtb

                         movi write d 41000000

3) -- ramdisk燒寫(rootfs的鏡像)

        通過網絡 tftp 41000000 ramdisk.img

                        movi write r 41000000 300000

4) -- 設定啟動參數bootcmd

          setenv bootcmd movi read k 41000000\; movi read d 42000000\;movi read r 43000000 300000\; bootm 41000000 43000000 42000000  

          NOTE:bootm中間的資料如是'-',說明從nfs挂載[參考bootargs],如是記憶體位址,則從位址處加載檔案系統

繼續閱讀