天天看點

向Flash中燒寫uboot和linux作業系統

向Flash中燒寫uboot和linux作業系統

2011年03月28日

  向Flash中燒寫uboot和linux作業系統

  ================================================================================

  from:http://www.diybl.com/course/6_system/linux/Linuxjs/20090428/165769.html

  一、片内啟動

  1、用Xmodem協定,發送loader.bin和uboot.bin檔案,此時uboot.bin被發送到系統的

  SDRAM中,發送完後uboot開始運作,如果這時斷電或退出,則一切将從頭開始,因為SDRAM記憶體儲的資料會在斷電或退出後消失

  2、擦除 Flash

  在對Flash進行燒寫之前,需要将其擦除:

  Uboot>protect off all 去掉Flash的扇區寫保護

  Uboot>erase all 擦除Flash的所有扇區

  (注:

  如果隻是要擦除某塊區域的Flash,比如0x10000000到0x10060000之間的區域,則可用指令:

  1)protect off 10000000

  2)erase 10000000 1006ffff

  如果是要對某塊區域加上寫保護,比如0x10000000到0x10060000之間的區域,則可用指令:

  1)protect on 10000000 1006ffff

  可用flinfo指令來檢視那些區域是受保護的,那些區域不是受保護的。

  3、燒寫boot.bin到Flash

  在Uboot提示符下鍵入指令:

  Uboot>loadb 21000000

  (下完之後會顯示boot.bin的大小,然後在後面用指令cp.b燒寫時将其後4位變成f,假如檔案大小為5e33a,則在燒寫時将其變為5ffff) 将檔案發送到系統的SDRAM中然後在超級終端使用Kermit協定,發送檔案boot.bin,發送完畢後,鍵入以下指令:

  Uboot>cp.b 21000000 10000000 5ffff 将發送到SDRAM中的資料寫入Flash

  Uboot>protect on 10000000 10005ffff 對寫入Flash的内容進行寫保護

  注:

  此處還可以用tftp或bootp協定來完成,不過要先設定網絡變量,即設定本機和目标機的IP位址,還有目标機的Mac位址。

  網絡環境變量:

  Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000

  ramdisk_size=15360

  console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr [目标闆 ip 位址] 目标闆 ip 位址

  Uboot>setenv serverip [主機 ip 位址] 主機 ip 位址

  tftp協定:

  1)tftp 21000000 lb/boot.bin

  2)cp.b 21000000 10000000 5ffff

  3)protect on 10000000

  bootp協定:

  1)bootp 21000000 lb/boot.bin

  2)cp.b 21000000 10000000 5ffff

  3)protect on 10000000 10005fff

  4、燒寫 Uboot.gz 到 Flash

  在Uboot提示符下鍵入指令:裝入Uboot.gz6

  Uboot>loadb 20000000 将檔案發送到系統的SDRAM中.

  然後在超級終端使用Kermit協定,發送檔案Uboot.gz,發送完畢後,鍵入以下指令:

  Uboot>cp.b 20000000 10010000 ffff 将發送到SDRAM中的資料寫入Flash

  Uboot>protect on 10000000 1001ffff 對寫入Flash的内容進行寫保護

  (注:此處也可以用tftp或bootp協定)

  二、片外啟動

  如何在uboot内運作自己的程式

  1、手動運作(隻是将程式下載下傳到SDRAM中運作,僅做測試之用,斷電或退出後就會消失)

  1)loadb 20000000 下載下傳使用者程式(*.bin)

  2)go 20000000 程式就會運作

  2、自動運作(将程式寫入Flash,uboot啟動之後程式自動運作

  1)設定環境變量

  Uboot>setenv usr_prg cp.b 10300000 20000000 ffff(程式的大小)

  Uboot>setenv run_prg go 20000000

  Uboot>setenv bootcmd run usr_prg\;run run_prg

  Uboot>saveenv

  2)寫入程式,即将其燒入Flash

  protect off all

  erase 10300000 103fffff

  loadb 20000000 下載下傳*.bin

  cp.b 20000000 10300000 ffff(使用者程式的大小)

  3)reset之後程式就會自動運作"T1X$m

  二、燒寫linux程式開

  1、下載下傳linux到系統的SDRAM運作(僅做測試之用,斷電或退出後就會消失)程

  1)運作Uboot,設定環境變量

  Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000

  ramdisk_size=15360

  console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr [目标闆 ip 位址] 目标闆 ip 位址

  Uboot>setenv serverip [主機 ip 位址] 主機 ip 位址

  2)下載下傳linux核心,檔案系統

  打開tftpserver應用程式,設定根目錄路徑,将核心、檔案系統等拷貝到所設定的根目錄下。

  Uboot>tftp 21100000 ramdisk.gz 下載下傳檔案系統

  Uboot>tftp 21000000 uImage 下載下傳 linux 核心

  Uboot>bootm 21000000 啟動 linux

  然後linux作業系統就開始運作。

  2、燒寫 Linux 到系統的 Flash 運作

  1)設定運作Linux的環境變量

  Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000

  ramdisk_size=15360 console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv image cp.b 10020000 21000000 b0000 拷貝核心到sdram

  Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷貝檔案系統到sdram

  Uboot>setenv boot bootm 設定變量

  Uboot>setenv bootcmd run ramdisk\;run image\;run boot 設定預設變量bootcmd

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr 目标闆 ip 位址 目标闆 ip 位址,由你自己決定

  Uboot>setenv serverip 主機ip位址 主機ip位址,就是你的PC的ip程式開

  Uboot>saveenv 儲存環境變量

  2)燒寫Linux核心到Flash

  Uboot>tftp 21100000 ramdisk.gz

  Uboot>cp.b 21100000 100d0000 226000

  Uboot>tftp 21000000 uImage

  Uboot>cp.b 21000000 10020000 b0000

  reset之linux作業系統就開始運作。

  ================================================================================

  ================================================================================

  from: http://www.91linux.com/html/article/qianrushiyingyong/20081227/15061.html

  u-boot指令介紹及燒寫程式執行個體

  bootdelay

  定義執行自動啟動的等候秒數

  baudrate

  定義序列槽控制台的波特率

  netmask

  定義以太網接口的掩碼

  ethaddr

  定義以太網接口的MAC位址

  bootfile

  定義預設的下載下傳檔案

  bootargs

  定義傳遞給Linux核心的指令行參數

  bootcmd

  定義自動啟動時執行的幾條指令

  serverip

  定義tftp伺服器端的IP位址

  ipaddr

  定義本地的IP位址

  stdin

  定義标準輸入裝置,一般是序列槽

  stdout

  定義标準輸出裝置,一般是序列槽

  stderr

  定義标準出錯資訊輸出裝置,一般是序列槽

  u-boot指令介紹及燒寫程式執行個體zz

  Printenv 列印環境變量。

  Uboot> printenv

  baudrate=115200

  ipaddr=192.168.1.1

  ethaddr=12:34:56:78:9A:BC

  serverip=192.168.1.5

  Environment size: 80/8188 bytes

  Setenv 設定新的變量

  Uboot> setenv myboard AT91RM9200DK

  Uboot> printenv

  baudrate=115200

  ipaddr=192.168.1.1

  ethaddr=12:34:56:78:9A:BC

  serverip=192.168.1.5

  myboard=AT91RM9200DK

  Environment size: 102/8188 bytes

  Saveenv 儲存變量

  指令将目前定義的所有的變量及其值存入flash中。用來存儲變量及其值的空間隻有8k位元組,應不要超過。

  Loadb 通過序列槽Kermit協定下載下傳二進制資料。

  Tftp 通過網絡下載下傳程式,需要先設定好網絡配置

  Uboot> setenv ipaddr 192.168.0.1

  Uboot> setenv serverip 192.168.1.115 (tftp伺服器的位址)

  下載下傳bin檔案到位址0x20000000處。

  Uboot> tftp 20000000 u-bo.bin (u-boot.bin應位于tftp服務程式的目錄)

  Uboot> tftp 32000000 vmlinux

  把server(IP=環境變量中設定的serverip)中/tftpdroot/ 下的vmlinux通過TFTP讀入到實體記憶體32000000處。

  Md 顯示記憶體區的内容。

  Mm 修改記憶體,位址自動遞增。

  Nm 修改記憶體,位址不自動遞增。

  Mw 用模型填充記憶體

  mw 32000000 ff 10000(把記憶體0x32000000開始的0x10000位元組設為0xFF)

  Cp 拷貝一塊記憶體到另一塊

  Cmp 比較兩塊記憶體區

  這些記憶體操作指令後都可加一個字尾表示操作資料的大小,比如cp.b表示按位元組拷貝。

  Protect 寫保護操作

  protect on 1:0-3(就是對第一塊FLASH的0-3扇區進行保護)

  protect off 1:0-3取消寫保護

  Erase 擦除扇區。

  erase: 删除FLASH的扇區

  erase 1:0-2(就是對每一塊FLASH的0-2扇區進行删除)

  對DataFlash的操作

  U-Boot在引導時如果發現NPCS0和NPCS3上連有DataFlash,就會配置設定虛拟的位址給它,具體為 :

  0xC0000000---NPCS0

  0xD0000000---NPCS3

  run 執行設定好的腳本

  Uboot> setenv flashit tftp 20000000 mycode.bin\; erase 10020000 1002FFFF\;

  cp.b 20000000 10020000 8000

  Uboot> saveenv

  Uboot> run flashit

  bootcmd 保留的環境變量,也是一種腳本

  如果定義了該變量,在autoboot模式下,将會執行該腳本的内容。

  Go 執行記憶體中的二進制代碼,一個簡單的跳轉到指定位址

  Bootm 執行記憶體中的二進制代碼

  要求二進制代碼為制定格式的。通常為mkimage處理過的二進制檔案。

  起動UBOOT TOOLS制作的壓縮LINUX核心, bootm 3200000

  Bootp 通過網絡啟動,需要提前設定好硬體位址。

  ? 得到所有指令清單

  help help usb, 列出USB功能的使用說明

  ping 注:隻能開發闆PING别的機器

  usb

  usb start: 起動usb 功能

  usb info: 列出裝置

  usb scan: 掃描usb storage(u 盤)裝置

  kgo 起動沒有壓縮的linux核心

  kgo 32000000

  fatls 列出DOS FAT檔案系統

  fatls usb 0列出第一塊U盤中的檔案

  fatload 讀入FAT中的一個檔案

  fatload usb 0:

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  0 32000000

  

   u-boot.bin 把USB中的u-boot.bin 讀到實體記憶體0x32000000處!

  flinfo 列出flash的資訊

  nfs

  nfs 32000000 192.168.0.115:u-boot.bin

  把192.168.0.115(LINUX 的NFS檔案系統)中的NFS檔案系統中的u-boot.bin讀入記憶體0x32000000處。

   例:通過序列槽更新u-boot程式

  [

  [email protected]

  ]# loadb

  ## Ready for binary (kermit) download to 0x33000000 at 115200 bps...

  loadb這個指令以kermit協定從序列槽下載下傳二進制檔案到開發闆的記憶體中,預設下載下傳到0x33000000。當然你可以改在别的位址,例如:loadb 30000000

  就是下載下傳到0x30000000。這時候選擇超級終端菜單上:傳送〉發送檔案,檔案名選擇編譯好的U-Boot.bin,協定選擇Kermit,點發送。可以看到發

  送進度。

  發送結束出現提示:

  ## Total Size = 0x0001d73c = 120636 Bytes

  ## Start Addr = 0x33000000

  這時可以測試新的修改好不好使:

  [

  [email protected]

  ]# go 33000000

  ## Starting application at 0x33000000 ...

  go指令可以直接執行記憶體位址上的程式,

  然後燒寫在NOR Flash中的U-boot。先看看NOR Flash的情況:

  [

  [email protected]

  ]# flinfo

  Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)

  Size: 1 MB in 19 Sectors

  Sector Start Addresses:

  00000000 (RO) 00004000 (RO) 00006000 (RO) 00008000 (RO) 00010000 (RO)

  00020000 00030000 00040000 00050000 00060000

  00070000 00080000 00090000 000A0000 000B0000

  000C0000 000D0000 000E0000 000F0000 (RO)

  一共有19個sector,其中前5個總計128kb的sector有U-Boot程式。要燒寫首先要去掉寫保護:

  [

  [email protected]

  ]# protect off 0 1ffff

  [

  [email protected]

  ]# flinfo

  Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)

  Size: 1 MB in 19 Sectors

  Sector Start Addresses:

  00000000 00004000 00006000 00008000 00010000

  00020000 00030000 00040000 00050000 00060000

  00070000 00080000 00090000 000A0000 000B0000

  000C0000 000D0000 000E0000 000F0000 (RO)

  可以看到寫保護已經去掉,然後擦除:

  [

  [email protected]

  ]# erase 0 1ffff

  Erasing sector 0 ... ok.

  Erasing sector 1 ... ok.

  Erasing sector 2 ... ok.

  Erasing sector 3 ... ok.

  Erasing sector 4 ... ok.

  Erased 5 sectors

  燒寫:(33000000下載下傳位址 0 Nor起始位址 1d73c 檔案長度)

  [

  [email protected]

  ]# cp.b 33000000 0 1d73c

  Copy to Flash... done

  重新開機開發闆,U-Boot的燒寫就完成了。當然,一個更好的下載下傳方法是利用tftp指令

  http://hi.baidu.com/vcmfc_linux/blog/item/9d07dfef11001c36acafd5d0.html

  ================================================================================

  ================================================================================

  from: http://www.ubuntuchina.com/viewthread.php?tid=3492

  uboot 下載下傳核心和檔案系統的步驟http://hi.baidu.com/xuhailong330 ... aa9bdc8d1029ab.html

  1)下載下傳linux到系統的SDRAM運作(僅做測試之用,斷電或退出後就會消失)

  1>運作Uboot,設定環境變量

  Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360

  console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr [目标闆 ip 位址] 目标闆 ip 位址

  Uboot>setenv serverip [主機 ip 位址] 主機 ip 位址

  2>下載下傳linux核心,檔案系統

  打開tftpserver應用程式,設定根目錄路徑,将核心、檔案系統等拷貝到所設定的根目錄下。

  Uboot>tftp 21100000 ramdisk.gz 下載下傳檔案系統

  Uboot>tftp 21000000 uImage 下載下傳 linux 核心

  Uboot>bootm 21000000 啟動 linux

  然後linux作業系統就開始運作。

  2)燒寫 Linux 到系統的 Flash 運作

  1>設定運作Linux的環境變量

  Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv image cp.b 10020000 21000000 b0000 拷貝核心到sdram

  Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷貝檔案系統到sdram

  Uboot>setenv boot bootm 設定變量boot

  Uboot>setenv bootcmd run ramdisk\;run image\;run boot 設定預設變量bootcmd

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr 目标闆 ip 位址 目标闆 ip 位址,由你自己決定

  Uboot>setenv serverip 主機ip位址 主機ip位址,就是你的PC的ip

  Uboot>saveenv 儲存環境變量

  2>燒寫Linux核心到Flash

  Uboot>tftp 21100000 ramdisk.gz

  Uboot>cp.b 21100000 100d0000 226000

  Uboot>tftp 21000000 uImage

  Uboot>cp.b 21000000 10020000 b0000

  reset之linux作業系統就開始運作。

  一、片内啟動

  1、用Xmodem協定,發送loader.bin和uboot.bin檔案,此時uboot.bin被發送到系統的SDRAM中,發送完後uboot開始運作,如果這時斷電或退出,則一切将從頭開始,因為SDRAM記憶體儲的資料會在斷電或退出後消失。

  2、擦除 Flash

  在對Flash進行燒寫之前,需要将其擦除:

  Uboot>protect off all 去掉Flash的扇區寫保護

  Uboot>erase all 擦除Flash的所有扇區

  (注:

  如果隻是要擦除某塊區域的Flash,比如0x10000000到0x10060000之間的區域,則可用指令:

  1)protect off 10000000 1006ffff

  2)erase 10000000 1006ffff

  如果是要對某塊區域加上寫保護,比如0x10000000到0x10060000之間的區域,則可用指令:

  1)protect on 10000000 1006ffff

  可用flinfo指令來檢視那些區域是受保護的,那些區域不是受保護的。

  )

  3、燒寫boot.bin到Flash

  在Uboot提示符下鍵入指令:

  Uboot>loadb 21000000 (下完之後會顯示boot.bin的大小,然後在後面用指令cp.b燒寫時将其後4位變成f,假如檔案大小為5e33a,則在燒寫時将其變為5ffff) 将檔案發送到系統的SDRAM中

  然後在超級終端使用Kermit協定,發送檔案boot.bin,發送完畢後,鍵入以下指令:

  Uboot>cp.b 21000000 10000000 5ffff 将發送到SDRAM中的資料寫入Flash

  Uboot>protect on 10000000 10005ffff 對寫入Flash的内容進行寫保護

  (注:

  此處還可以用tftp或bootp協定來完成,不過要先設定網絡變量,即設定本機和目标機的IP位址,還有目标機的Mac位址。

  網絡環境變量:

  Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360

  console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr [目标闆 ip 位址] 目标闆 ip 位址

  Uboot>setenv serverip [主機 ip 位址] 主機 ip 位址

  tftp協定:

  1)tftp 21000000 lb/boot.bin

  2)cp.b 21000000 10000000 5ffff

  3)protect on 10000000 10005fff

  bootp協定:

  1)bootp 21000000 lb/boot.bin

  2)cp.b 21000000 10000000 5ffff

  3)protect on 10000000 10005fff

  )

  4、燒寫 Uboot.gz 到 Flash

  在Uboot提示符下鍵入指令:裝入Uboot.gz

  Uboot>loadb 20000000 将檔案發送到系統的SDRAM中

  然後在超級終端使用Kermit協定,發送檔案Uboot.gz,發送完畢後,鍵入以下指令:

  Uboot>cp.b 20000000 10010000 ffff 将發送到SDRAM中的資料寫入Flash

  Uboot>protect on 10000000 1001ffff 對寫入Flash的内容進行寫保護

  (注:此處也可以用tftp或bootp協定)

  二、片外啟動

  一)如何在uboot内運作自己的程式

  1、手動運作(隻是将程式下載下傳到SDRAM中運作,僅做測試之用,斷電或退出後就會消失)

  1)loadb 20000000 下載下傳使用者程式(*.bin)

  2)go 20000000 程式就會運作

  2、自動運作(将程式寫入Flash,uboot啟動之後程式自動運作)

  1)設定環境變量

  Uboot>setenv usr_prg cp.b 10300000 20000000 ffff(程式的大小)

  Uboot>setenv run_prg go 20000000

  Uboot>setenv bootcmd run usr_prg\;run run_prg

  Uboot>saveenv

  2)寫入程式,即将其燒入Flash

  protect off all

  erase 10300000 103fffff

  loadb 20000000 下載下傳*.bin

  cp.b 20000000 10300000 ffff(使用者程式的大小)

  3)reset之後程式就會自動運作

  二、燒寫linux

  1、下載下傳linux到系統的SDRAM運作(僅做測試之用,斷電或退出後就會消失)

  1)運作Uboot,設定環境變量

  Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360

  console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr [目标闆 ip 位址] 目标闆 ip 位址

  Uboot>setenv serverip [主機 ip 位址] 主機 ip 位址

  2)下載下傳linux核心,檔案系統

  打開tftpserver應用程式,設定根目錄路徑,将核心、檔案系統等拷貝到所設定的根目錄下。

  Uboot>tftp 21100000 ramdisk.gz 下載下傳檔案系統

  Uboot>tftp 21000000 uImage 下載下傳 linux 核心

  Uboot>bootm 21000000 啟動 linux

  然後linux作業系統就開始運作。

  2、燒寫 Linux 到系統的 Flash 運作

  1)設定運作Linux的環境變量

  Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 啟動系統環境變量

  Uboot>setenv image cp.b 10020000 21000000 b0000 拷貝核心到sdram

  Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷貝檔案系統到sdram

  Uboot>setenv boot bootm 設定變量boot

  Uboot>setenv bootcmd run ramdisk\;run image\;run boot 設定預設變量bootcmd

  Uboot>setenv ethaddr 12:34:56:78:99:aa mac 位址

  Uboot>setenv ipaddr 目标闆 ip 位址 目标闆 ip 位址,由你自己決定

  Uboot>setenv serverip 主機ip位址 主機ip位址,就是你的PC的ip

  Uboot>saveenv 儲存環境變量

  2)燒寫Linux核心到Flash

  Uboot>tftp 21100000 ramdisk.gz

  Uboot>cp.b 21100000 100d0000 226000

  Uboot>tftp 21000000 uImage

  Uboot>cp.b 21000000 10020000 b0000

  reset之linux作業系統就開始運作。

  ================================================================================

  ================================================================================

  from: http://blog.21ic.com/user1/5165/archives/2008/50377.html

   u-boot指令解釋

  lanxch 發表于 2008-9-4 13:42:00

  0

  推薦

  U-Boot上電啟動後,敲任意鍵能夠退出自動啟動狀态,進入指令行。

  U-Boot 1.1.2 (Apr 26 2005 - 12:27:13)

  U-Boot code: 11080000 -> 1109614C BSS: -> 1109A91C

  RAM Configuration:

  Bank #0:

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  10000000 32

  

   MB

  Micron StrataFlash MT28F128J3 device initialized

  Flash: 32 MB

  In: serial

  Out: serial

  Err: serial

  Hit any key to stop autoboot: 0

  U-Boot>

  在指令行提示符下,能夠輸入U-Boot的指令并執行。U-Boot能夠支援幾十個常用指令,通過這些指令,能夠對研發闆進行調試,能夠引導Linux核心,還能夠擦寫Flash完成系統部署等功能。掌控這些指令的使用,才能夠順利地進行嵌入式系統的研發。

  輸入help指令,能夠得到目前U-Boot的任何指令清單。每一條指令後面是簡單的指令說明。

  => help

  ? - alias for 'help'

  autoscr - run from memory

  base - print or set address offset

  bdinfo - print Board Info structure

  boot - boot default, i.e., run 'bootcmd'

  bootd - boot default, i.e., run 'bootcmd'

  bootm - boot application image from memory

  bootp - boot image via network using BootP/TFTP protocol

  cmp - memory compare

  coninfo - print console devices and information

  cp - memory copy

  crc32 - checksum calculation

  dhcp - invoke DHCP client to obtain IP/boot params

  echo - echo args to console

  erase - erase FLASH memory

  flinfo - print FLASH memory information

  go - start application at address 'addr'

  help - print online help

  iminfo - print header information for application image

  imls - list all images found in flash

  itest - return true/false on integer compare

  loadb - load binary file over serial line (kermit mode)

  loads - load S-Record file over serial line

  loop - infinite loop on address range

  md - memory display

  mm - memory modify (auto-incrementing)

  mtest - simple RAM test

  mw - memory write (fill)

  nfs - boot image via network using NFS protocol

  nm - memory modify (constant address)

  printenv - print environment variables

  protect - enable or disable FLASH write protection

  rarpboot - boot image via network using RARP/TFTP protocol

  reset - Perform RESET of the CPU

  run - run commands in an environment variable

  saveenv - save environment variables to persistent storage

  setenv - set environment variables

  sleep - delay execution for some time

  tftpboot - boot image via network using TFTP protocol

  version - print monitor version

  =>

  U-Boot還提供了更加周詳的指令幫助,通過help指令還能夠檢視每個指令的參數說明。由于研發過程的需要,有必要先把U-Boot指令的用法弄清楚。接下來,根據每一條指令的幫助資訊,解釋一下這些指令的功能和參數。

  => help bootm

  bootm [addr [arg ...]]

  - boot application image stored in memory

  passing arguments 'arg ...'; when booting a Linux kernel,

  'arg' can be the address of an initrd image

  bootm指令能夠引導啟動存儲在記憶體中的程式映像。這些記憶體包括RAM和能夠永久儲存的Flash。

  第1個參數addr是程式映像的位址,這個程式映像必須轉換成U-Boot的格式。

  第2個參數對于引導Linux核心有用,通常作為U-Boot格式的RAMDISK映像存儲位址;也能夠是傳遞給Linux核心的參數(預設情況下傳遞bootargs環境變量給核心)。

  => help bootp

  bootp [loadAddress] [bootfilename]

  bootp指令通過bootp請求,需要DHCP伺服器配置設定IP位址,然後通過TFTP協定下載下傳指定的文檔到記憶體。

  第1個參數是下載下傳文檔存放的記憶體位址。

  第2個參數是要下載下傳的文檔名稱,這個文檔應該在研發主機上準備好。

  => help cmp

  cmp [.b, .w, .l] addr1 addr2 count

  - compare memory

  cmp指令能夠比較2塊記憶體中的内容。.b以位元組為機關;.w以字為機關;.l以長字為機關。注意:cmp.b中間不能保留白格,需要連續敲入指令。

  第1個參數addr1是第一塊記憶體的起始位址。

  第2個參數addr2是第二塊記憶體的起始位址。

  第3個參數count是要比較的數目,機關按照位元組、字或長字。

  => help cp

  cp [.b, .w, .l] source target count

  - copy memory

  cp指令能夠在記憶體中複制資料塊,包括對Flash的讀寫操作。

  第1個參數source是要複制的資料塊起始位址。

  第2個參數target是資料塊要複制到的位址。這個位址假如在Flash中,那麼會直接調用寫Flash的函數操作。是以U-Boot寫Flash就使用這個指令,當然需要先把對應Flash區域擦幹淨。

  第3個參數count是要複制的數目,根據cp.b cp.w cp.l分别以位元組、字、長字為機關。

  => help crc32

  crc32 address count [addr]

  - compute CRC32 checksum [save at addr]

  crc32指令能夠計算存儲資料的校驗和。

  第1個參數address是需要校驗的資料起始位址。

  第2個參數count是要校驗的資料位元組數。

  第3個參數addr用來指定儲存結果的位址。

  => help echo

  echo [args..]

  - echo args to console; \c suppresses newline

  echo指令回顯參數。

  => help erase

  erase start end

  - erase FLASH from addr 'start' to addr 'end'

  erase N:SF[-SL]

  - erase sectors SF-SL in FLASH bank # N

  erase bank N

  - erase FLASH bank # N

  erase all

  - erase all FLASH banks

  erase指令能夠擦Flash。

  參數必須指定Flash擦除的範圍。

  按照起始位址和結束位址,start必須是擦除塊的起始位址;end必須是擦除末尾塊的結束位址。這種方式最常用。舉例說明:擦除0x20000