U-boot 命令使用詳解[轉載]

來源:互聯網
上載者:User

 

U-boot是一個通用的bootloader,提供了很多有用的指令,可以用於程式的調試,非常方便.但程式運行時輸出的協助資訊不是很詳細,不是很清楚,而README檔案中說得也不很詳細,下在是記錄了在調試過程中使用這些命令的一些總結,希望對初學者有所協助,有些不知道怎麼用,試了很多次,甚至仔細看了代碼才知道怎麼用的,通過本文,希望初學u-boot的朋友和使用u-boot偵錯工具的朋友學習起來更輕鬆.

u-boot的指令解析有模糊比對功能,要使用某一條指令可以用任意長的前幾個字母即可,如tftpboot命令可以略寫為tftp,但必須沒有重複,否則提示沒有該指令,如saves,saveenv都是save開頭,如果去掉saves指令,即去不支援saves指令時就可以通過save指令儲存環境變數,如果u-boot中同時包含saves, saveenv指令,則發源再加長,可以使用savee命令執行saveenv

bdinfo– 顯示或者設定地址位移

=> help base

base

    - print address offset for memory commands

base off

    - set address offset for memory commands to ''''off''''

=>

   你可以使用base命令(簡寫為ba)來顯示或者設定一個“基地址”作為所有儲存類命令的地址位移值。預設的基址是0,所以你輸入的所有地址都是真實位址。但是,當你重複訪問某一特定儲存地區(如一些嵌入式PowerPc處理器的記憶體)時,如果設定此地區的開始地址作為基址,只需使用位移地址,這將非常簡便:

=> base

Base Address: 0x00000000

=> md 0 c

00000000: feffffff 00000000 7cbd2b78 7cdc3378    ........|.+x|.3x

00000010: 3cfb3b78 3b000000 7c0002e4 39000000    <.;x;...|...9...

00000020: 7d1043a6 3d000400 7918c3a6 3d00c000    }.C.=...y...=...

=> base 40000000

Base Address: 0x40000000

=> md 0 c

40000000: 27051956 50504342 6f6f7420 312e312e    ''''..VPPCBoot 1.1.

40000010: 3520284d 61722032 31203230 3032202d    5 (Mar 21 2002 -

40000020: 2031393a 35353a30 34290000 00000000     19:55:04)......

 

bdinfo 

=> help bdinfo

bdinfo - No help available.

 =>

     bdinfo命令(簡寫為bdi)將在終端顯示諸如記憶體位址和大小、時鐘頻率、MAC地址等資訊。這些資訊在傳遞給Linux核心一些參數時會用到。

=> bdi

memstart    = 0x00000000

memsize     = 0x04000000

flashstart  = 0x40000000

flashsize   = 0x00800000

flashoffset = 0x00030000

sramstart   = 0x00000000

sramsize    = 0x00000000

immr_base   = 0xFFF00000

bootflags   = 0x00000001

intfreq     =     50 MHz

busfreq     =     50 MHz

ethaddr     = 00:D0:93:00:28:81

IP addr     = 10.0.0.99

baudrate    = 115200 bps

=>

coninfo 列印環境變數,無需任何參數。

=> help conin

coninfo

=>

coninfo命令 (簡寫為conin) 顯示可用的控制I/O裝置資訊。

=> conin

List of available devices:

serial   80000003 SIO stdin stdout stderr

=>

    輸出包括了裝置名稱、標識和當前使用方式。以此為例:

serial   80000003 SIO stdin stdout stderr

 

crc32– 校正和計算

crc32(簡寫為crc)用來計算在某一範圍記憶體儲地區的CRC32校正和。

=> crc 100004 3FC

CRC32 for 00100004 ... 001003ff ==> d433b05b

=>

    當後面加了3個參數時,此命令會把計算結果儲存在給定儲存地址內。

=> crc 100004 3FC 100000

CRC32 for 00100004 ... 001003ff ==> d433b05b

=> md 100000 4

00100000: d433b05b ec3827e4 3cb0bacf 00093cf5    .3.[.8''''.<.....<.

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 設定新的變數,命令格式為:

setenv env_var_name value

env_var_name 為要改變的變數名,value為其值,中間用空格開

 

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 儲存變數,使用setenv命令修改了參數以後要執行此命令儲存在Flash或EEPROM中,在使用這些指令的時候可以用縮寫,即用指令的前幾個字母,只要不與其它指令重複就行,u-boot便執行匹配的指令.saveenv可以運行save亦可執行該指令.

Loadb 通過串口Kermit協議下載位元據。指令格式

loadb address, address用十六進位格式,執行該指令後,可以用超級終端通過kermit協議向u-boot發送二進位檔案,即可以通過該指令將程式下載到RAM中,然後通過go指令運行下載的程式.

go 跳轉指令,跳轉到目標地址執行程式,指令格式為:

go address.

address為程式所在地址,與loadb, tftpd等指令配合進行程式調試.

Tftp 通過網路下載程式,需要先設定好網路設定

 

Uboot> setenv ethaddr 12:34:56:78:9A:BC

Uboot> setenv ipaddr 192.168.1.1

Uboot> setenv serverip 192.168.1.254     (tftp伺服器的地址)

下載bin檔案到地址0x20000000處。

Uboot> tftp 20000000 application.bin (application.bin應位於tftp服務程式的目錄)

Uboot> tftp 32000000 vmlinux

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

 

md 顯示記憶體區的內容。

mtest– 簡單地RAM測試

=> help mtest

mtest [start [end [pattern]]]

    - simple RAM read/write test

 =>

mtest提供一個簡單地儲存空間測試。

=> mtest 100000 200000

Testing 00100000 ... 00200000:

Pattern 0000000F  Writing...  Reading...

mm 修改記憶體,地址自動遞增。

儲存單元修正(自動成長)

=> help md

md [.b, .w, .l] address [# of objects]

    - memory display

 =>

    mm提供了一種互動修改儲存空間內容的方法。它將會顯示地址和當前值,然後提示使用者輸入。如果你輸入了一個合法的十六進位數,這個新的值將會被寫入該地址。然後提示下一個地址。如果你沒有輸入任何值,只是按了一下斷行符號,那麼該地址的內容保持不變。只要你輸入任意非十六進位的資料(比如說.),此命令就立刻結束。

=> mm 100000

00100000: 27051956 ? 0

00100004: 50504342 ? AABBCCDD

00100008: 6f6f7420 ? 01234567

0010000c: 312e312e ? .

=> md 100000 10

00100000: 00000000 aabbccdd 01234567 312e312e    .........#Eg1.1.

00100010: 3520284d 61722032 31203230 3032202d    5 (Mar 21 2002 -

00100020: 2031393a 35353a30 34290000 00000000     19:55:04)......

00100030: 00000000 00000000 00000000 00000000    ................

=>

   同樣,這條命令也可以加上類型標識符.l, .w 和 .b :

=> mm.w 100000

00100000: 0000 ? 0101

00100002: 0000 ? 0202

00100004: aabb ? 4321

00100006: ccdd ? 8765

00100008: 0123 ? .

=> md 100000 10

00100000: 01010202 43218765 01234567 312e312e    ....C!.e.#Eg1.1.

00100010: 3520284d 61722032 31203230 3032202d    5 (Mar 21 2002 -

00100020: 2031393a 35353a30 34290000 00000000     19:55:04)......

00100030: 00000000 00000000 00000000 00000000    ................

=>

=> mm.b 100000

00100000: 01 ? 48

00100001: 01 ? 61

00100002: 02 ? 6c

00100003: 02 ? 6c

00100004: 43 ? 6f

00100005: 21 ? 20

00100006: 87 ? 20

00100007: 65 ? 20

00100008: 01 ? .

=> md 100000 10

00100000: 48616c6c 6f202020 01234567 312e312e    Hallo   .#Eg1.1.

00100010: 3520284d 61722032 31203230 3032202d    5 (Mar 21 2002 -

00100020: 2031393a 35353a30 34290000 00000000     19:55:04)......

00100030: 00000000 00000000 00000000 00000000    ................

nm 修改記憶體,地址不自動遞增。

儲存單元修正(恒定地址)

=> help nm

nm [.b, .w, .l] address

    - memory modify, read and keep address

 =>

    nm命令用於互動地往某個相同的地址寫入不同的資料。在訪問和修改裝置寄存器的時候,這將會非常有用。

=> nm.b 100000

00100000: 00 ? 48

00100000: 48 ? 61

00100000: 61 ? 6c

00100000: 6c ? 6c

00100000: 6c ? 6f

00100000: 6f ? .

=> md 100000 8

00100000: 6f000000 115511ff ffffffff ffff1155    o....U.........U

00100010: 00000000 00000000 00000015 00000016    ................

Mw 用模型填充記憶體

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

=> help mw

mw [.b, .w, .l] address value [count]

    - write memory

=>

   mw是一種往儲存空間填寫某些資料的方法。如果調用時沒加計數參數,值將僅僅被寫到某一給定的地址。當使用了計數參數時,整個儲存地區都會寫入該值。

  => md 100000 10

00100000: 0000000f 00000010 00000011 00000012    ................

00100010: 00000013 00000014 00000015 00000016    ................

00100020: 00000017 00000018 00000019 0000001a    ................

00100030: 0000001b 0000001c 0000001d 0000001e    ................

=> mw 100000 aabbccdd

=> md 100000 10

00100000: aabbccdd 00000010 00000011 00000012    ................

00100010: 00000013 00000014 00000015 00000016    ................

00100020: 00000017 00000018 00000019 0000001a    ................

00100030: 0000001b 0000001c 0000001d 0000001e    ................

=> mw 100000 0 6

=> md 100000 10

00100000: 00000000 00000000 00000000 00000000    ................

00100010: 00000000 00000000 00000015 00000016    ................

00100020: 00000017 00000018 00000019 0000001a    ................

00100030: 0000001b 0000001c 0000001d 0000001e    ................

=>

它又是一條可以加標識符.l, .w和.b的命令:

=> mw.w 100004 1155 6

=> md 100000 10

00100000: 00000000 11551155 11551155 11551155    .....U.U.U.U.U.U

00100010: 00000000 00000000 00000015 00000016    ................

00100020: 00000017 00000018 00000019 0000001a    ................

00100030: 0000001b 0000001c 0000001d 0000001e    ................

=> mw.b 100007 ff 7

=> md 100000 10

00100000: 00000000 115511ff ffffffff ffff1155    .....U.........U

00100010: 00000000 00000000 00000015 00000016    ................

00100020: 00000017 00000018 00000019 0000001a    ................

00100030: 0000001b 0000001c 0000001d 0000001e    ................

=>

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

=> help cp

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

    - copy memory

 =>

    cp用來複製儲存單元。

=> cp 40000000 100000 10000

=>

    cp 可以使用類型標識符 .l , .w和.b。

md– 顯示儲存單元內容

=> help md

md [.b, .w, .l] address [# of objects]

    - memory display

 =>

    md採用十六進位和ASCII碼兩種形式來顯示儲存單元的內容。

=> md 100000

00100000: 27051956 50504342 6f6f7420 312e312e    ''''..VPPCBoot 1.1.

00100010: 3520284d 61722032 31203230 3032202d    5 (Mar 21 2002 -

00100020: 2031393a 35353a30 34290000 00000000     19:55:04)......

00100030: 00000000 00000000 00000000 00000000    ................

00100040: 00000000 00000000 00000000 00000000    ................

00100050: 00000000 00000000 00000000 00000000    ................

00100060: 00000000 00000000 00000000 00000000    ................

00100070: 00000000 00000000 00000000 00000000    ................

00100080: 00000000 00000000 00000000 00000000    ................

00100090: 00000000 00000000 00000000 00000000    ................

001000a0: 00000000 00000000 00000000 00000000    ................

001000b0: 00000000 00000000 00000000 00000000    ................

001000c0: 00000000 00000000 00000000 00000000    ................

001000d0: 00000000 00000000 00000000 00000000    ................

001000e0: 00000000 00000000 00000000 00000000

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.