<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > DENX U-Boot及Linux使用手冊(全)

DENX U-Boot及Linux使用手冊(全)

作者: 時(shí)間:2007-04-26 來(lái)源:網(wǎng)絡(luò ) 收藏

1. 概要


這是嵌入式PowerPC, ARM和MIPS系統中使用DENX U-Boot和Linux的指導手冊。

文檔中描述了如何在嵌入式PowerPC, ARM和MIPS系統上配置、編譯、使用Das U-Boot(常??s寫(xiě)為“U-Boot”)和Linux操作系統。

本文檔寫(xiě)于2005年一月至四月四日十四點(diǎn)十五分。

2. 緒論


本文檔描述了如何在嵌入式PowerPC, ARM和MIPS系統上配置、編譯、使用U-Boot和Linux操作系統。

在這些過(guò)程中有太多的步驟,不可能面面俱到、非常深入,但我們會(huì )盡力提供所有必需的信息,能夠讓一個(gè)嵌入式系統運行。文檔中涵蓋了所有你可能需要的用于配置、編譯、運行U-Boot和Linux的工具。

首先,我們介紹如何安裝交叉編譯開(kāi)發(fā)工具Embedded Linux Development Kit(ELDK),這個(gè)開(kāi)發(fā)套件你很有可能會(huì )用到——至少當你在標準的x86 PC上使用Linux或者Sun Solaris系統作為開(kāi)發(fā)環(huán)境的時(shí)候,你會(huì )需要它的。

然后,我們會(huì )闡述通過(guò)串口與你的目標板連接:你需要配置一個(gè)終端控制程序,如cu或者kermit。

你常常需要通過(guò)網(wǎng)線(xiàn)把映像文件下載到你的目標板上。為了實(shí)現這個(gè)目的,你需要TFTP和DHCP/BOOTP服務(wù)器。文檔中提供了簡(jiǎn)要的相關(guān)配置說(shuō)明。

接下來(lái)則是描述如何配置和編譯U-Boot使之適用于某個(gè)特定的平臺,以及如何安裝和在該硬件平臺上運行。

下一步的工作是配置、建立和安裝Linux。我們使用SELF(Simple Embedded Linux Framework)來(lái)展示如何建立一個(gè)開(kāi)發(fā)環(huán)境(包括通過(guò)NFS掛載的根文件系統)和一個(gè)嵌入式目標板配置(從基于busybox的ramdisk映像文件中運行)。

本文檔不會(huì )給出如何把U-Boot或者Linux移植到一個(gè)新的硬件平臺,而是默認你的開(kāi)發(fā)板已經(jīng)被U-Boot和Linux所支持。

本文檔的側重點(diǎn)是針對TQM8xxL開(kāi)發(fā)板。

本手冊各種文檔格式的最新版本可以從以下網(wǎng)址獲?。?

HTML http://www.denx.de/twiki/publish/DULG/DULG-tqm8xxl.html

PDF http://www.denx.de/twiki/publish/DULG/DULG-tqm8xxl.pdf


3. 嵌入式Linux開(kāi)發(fā)工具套件


嵌入式Linux開(kāi)發(fā)工具套件(ELDK)包括GNU交叉開(kāi)發(fā)工具,如編譯器、binutils、gdb等工具,和一些已經(jīng)編譯好的目標工具以及負責提供在目標平臺上函數調用的庫文件。

還免費提供了所有的源代碼,包括全部補丁、擴展文件、以及用于編譯開(kāi)發(fā)工具使用的程序和腳本。

安裝包都是基于RPM包管理器。

3.1 獲取ELDK


可以通過(guò)以下方式獲得ELDK。

·DENX計算機系統光盤(pán)


·從以下服務(wù)器中下載


FTP方式

ftp://mirror.switch.ch/mirror/eldk/eldk/

ftp://sunsite.utk.edu/pub/linux/eldk/ ftp://ftp.sunet.se/pub/Linux/distributions/eldk/

ftp://ftp.leo.org/pub/eldk/

HTTP方式

http://mirror.switch.ch/ftp/mirror/eldk/eldk/

http://ftp.sunet.se/pub/Linux/distributions/eldk/

http://archiv.leo.org/pub/comp/os/unix/linux/eldk/

3.2 初始安裝


初始安裝可以使用放在ELDK目錄樹(shù)根目錄下的安裝工具。安裝工具使用語(yǔ)法如下;


$ ./install [-d


-d 確定ELDK安裝在哪個(gè)目錄。如果省略ELDK會(huì )安裝在當前目錄。


cpu_family> 確定目標平臺的CPU。如果此項設置了一項以上的參數,則會(huì )將這些CPU的支持都安裝。如果省略將會(huì )安裝所有CPU的支持。

你也可以把ELDK安裝到任何空目錄下,這么做的唯一條件是你有那個(gè)目錄的寫(xiě)和執行權限。安裝過(guò)程并不需要超級用戶(hù)的特權。

由安裝時(shí)的參數決定安裝幾個(gè)目標組件集合。ELDT包是肯定會(huì )安裝的。

4. 系統設置


在目標平臺上安裝和配置U-Boot和Linux需要一些工具。特別是在開(kāi)發(fā)過(guò)程中,你需要和目標平臺保持聯(lián)系。這一節將告訴你如何配置你的主機以達到上述目的。

4.1 設置串口


為了更好地使用U-Boot和Linux,你需要通過(guò)串口將目標板和你的主機連接。U-Boot和Linux可以配置成自動(dòng)執行而不需要任何用戶(hù)的干涉。

通過(guò)串口有很多種方法來(lái)控制你的目標板,比如說(shuō)使用終端服務(wù)器。不過(guò)最常見(jiàn)的做法是使用你本機的串口,這時(shí),你主機需要安裝一個(gè)終端程序,如cu或者kermit。

4.2 配置“kermit”


kermit這個(gè)名字就代表了它是連接串口和網(wǎng)絡(luò )的通信軟件。事實(shí)上在很多計算機和操作系統上使用它,能夠很好地滿(mǎn)足我們的目的。

kermit在執行其它命令之前,會(huì )執行你的用戶(hù)目錄下的初始文件.kermrc,所以可以非常簡(jiǎn)單的通過(guò)初始化命令來(lái)定制kermit。下面是使用U-Boot和Linux時(shí)推薦配置:

~/.kermrc:

set line /dev/ttyS0

set speed 115200

set carrier-watch off

set handshake none

set flow-control none

robust

set file type bin

set file name lit

set rec pack 1000

set send pack 1000

set window 5



這個(gè)設置假定你使用的是主機第一個(gè)串口(/dev/ttyS0),以115200這個(gè)波特率與目標板的串口連接。

然后你可以連接目標板了:

$ kermit -c

Connecting to /dev/ttyS0, speed 115200.

The escape character is Ctrl- (ASCII 28, FS)

Type the escape character followed by C to get back,

or followed by ? to see other options.

----------------------------------------------------



下載kermit這個(gè)軟件時(shí),你會(huì )發(fā)現有兩個(gè)kermit包。你只需要安裝ckermit。其中g(shù)kermit僅僅是實(shí)現kermit傳輸協(xié)議的一個(gè)命令行工具。

如果你主機上的Linux系統沒(méi)有安裝kermit,你可以到kerimt的官方網(wǎng)站 http://www.columbia.edu/kermit/ 下載。

4.3 使用minicom


minicom是另外一種非常流行的串口通信終端。很遺憾的是,很多用戶(hù)發(fā)現在使用U-Boot和Linux時(shí),minicom有很多問(wèn)題,尤其是試圖使用它來(lái)下載image的時(shí)候。因此,不推薦大家使用minicom。

(譯者注:我使用minicom也工作的很好,沒(méi)有碰到什么問(wèn)題。)

4.4 配置TFTP服務(wù)器


使用U-Boot下載Linux內核或者應用程序的最快捷的方法是通過(guò)網(wǎng)絡(luò )傳輸。為了這一目的,U-Boot實(shí)現了TFTP協(xié)議(參見(jiàn)U-Boot中的tftpboot命令)。

為了使主機支持TFTP,你必須確保TFTP后臺程序/usr/sbin/in.tftpd已經(jīng)安裝。在RedHat系統中,你可以運行下面的命令來(lái)確認:

$ rpm -q tftp-server

如果沒(méi)有安裝,請從你的Linux安裝盤(pán)或者其它媒介安裝。

大多數的Linux發(fā)行版都默認關(guān)閉TFTP服務(wù)。以RedHat系統為例,如果要使能TFTP服務(wù),編輯文件/etc/xinetd.d/tftp,移除這一行:

disable = yes

或者注釋掉它:

# default: off

# description: The tftp server serves files using the trivial file transfer

# protocol. The tftp protocol is often used to boot diskless

# workstations, download configuration files to network-aware printers,

# and to start the installation process for some operating systems.

service tftp

{

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = -s /tftpboot

# disable = yes

per_source = 11

cps = 100 2

}



此外,確保/tftpboot目錄存在,而且有訪(fǎng)問(wèn)權限(至少應該dr-xr-xr-x)。



5. Das U-Boot


5.1 當前版本


Das U-Boot(或者簡(jiǎn)稱(chēng)“U-Boot”)是針對嵌入式PowerPC, ARM, MIPS和x86處理器的開(kāi)放源代碼軟件。U-Boot項目已經(jīng)在Sourceforge設立,你可以訪(fǎng)問(wèn)這個(gè)官方網(wǎng)站:http://sourceforge.net/projects/u-boot

U-Boot最新版的源代碼可以在Sourcefoge通過(guò)匿名CVS得到。當要求輸入匿名用戶(hù)anonymous的密碼時(shí)只需要直接按下回車(chē)鍵。

$ cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/u-boot login

$ cvs -z6 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/u-boot

co -P u-boot

官方發(fā)布的U-Boot也可以通過(guò)FTP方式獲取。你可以到

ftp://ftp.denx.de/pub/u-boot/

下載tar形式的壓縮包。

5.2 源代碼包的解壓


如果你是通過(guò)CVS得到的U-Boot源代碼,你可以跳過(guò)這一步,因為你得到的已經(jīng)是解壓后的目錄樹(shù)了。如果你是從FTP服務(wù)器上下載的tar壓縮包,那么你需要按照以下步驟解壓:

$ cd /opt/eldk/usr/src

$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-0.4.5.tar.bz2

$ rm -f u-boot

$ bunzip2 u-boot-0.4.5.tar.bz2 | tar xf -

$ ln -s u-boot-0.4.5 u-boot

$ cd u-boot


5.3 配置


進(jìn)入U-Boot源代碼根目錄后,可以先使用如下命令確保已經(jīng)清除以前編譯的結果:

$ make distclean

下一步是為T(mén)QM8xxL板配置U-Boot:

$ make tqm8xxl_config

(譯者注:應該根據你自己的具體開(kāi)發(fā)板配置,如

$ make yourboard>_config,如果沒(méi)有相應的開(kāi)發(fā)板,應該自己照著(zhù)建立相應的目錄和配置文件。)

最后我們可以開(kāi)始編譯U-Boot了:

$ make all


5.4 安裝


5.4.1 動(dòng)手之前


5.4.1.1 安裝所需

以下的章節假定你的開(kāi)發(fā)板使用flash作為存儲設備。如果不是,則以下的指令不會(huì )工作。如果你想使用U-Boot,需要換掉存儲設備。

5.4.1.2 開(kāi)發(fā)板識別數據


所有的TQM8xxL開(kāi)發(fā)板使用一個(gè)序列號加以識別。而且開(kāi)發(fā)板需要分配一個(gè)以太網(wǎng)MAC地址。如果這些數據丟失,你可能會(huì )失去授權。在安裝U-Boot或者改變開(kāi)發(fā)板的配置之前,你需要搜集足夠的信息。

5.4.2 使用BDM/JTAG調試器安裝U-Boot.bin


把數據燒入flash中的一個(gè)簡(jiǎn)單而又快速的辦法是通過(guò)BDM或者JTAG接口的調試器或者flash燒寫(xiě)器。當flash中沒(méi)有任何數據(比如說(shuō)一塊新的開(kāi)發(fā)板),這種方法是唯一的選擇。

我們(強烈推薦)使用Abatron公司的BDI2000(見(jiàn)http://www.abatron.ch/BDI/bdiGDB.html )。

其它的BDM/JTAG調試器也可以使用,但是如何操作它們不是本文檔要討論的范圍。如果你想使用別的工具請參照它們的說(shuō)明文檔。

( 譯者注:我沒(méi)有使用BDI2000,故略去操作BDI2000的方法。我燒寫(xiě)u-boot.bin就是簡(jiǎn)單地通過(guò)JTAG口。甚至我燒寫(xiě)800多k的Linux內核都是用JTAG,只要你不嫌慢。)

5.4.3 使用U-Boot安裝U-Boot.bin


如果U-Boot已經(jīng)在你的板子上安裝運行,你可以使用這些命令來(lái)下載新的U-Boot映像來(lái)代替當前的。

警告:在你安裝新的映像之前,你必須擦除當前的u-boot.bin。如果出現什么差錯,你的開(kāi)發(fā)板將不能運行。因此強烈建議:

做一個(gè)能工作的U-Boot映像文件的備份;

你清楚如何在一個(gè)新的開(kāi)發(fā)板上安裝u-boot.bin。

過(guò)程如下:

=> tftp 100000 /tftpboot/uboot.bin

ARP broadcast 1

TFTP from server 10.0.0.2; our IP address is 10.0.0.100

Filename '/tftpboot/uboot.bin'.

Load address: 0x100000

Loading: ###############################

done

Bytes transferred = 155376 (25ef0 hex)

=> protect off 40000000 4003FFFF

Un-Protected 5 sectors

=> era 40000000 4003FFFF

Erase Flash from 0x40000000 to 0x4003ffff

......... done

Erased 5 sectors

=> cp.b 100000 40000000 $(filesize)

Copy to Flash... done

=> setenv filesize

=> saveenv

Saving Enviroment to Flash...

Un-Protected 1 sectors

Erasing Flash...

.. done

Erased 1 sectors

Writing to Flash... done

Protected 1 sectors

=> reset

5.5 工具的安裝


U-Boot加載Linux內核、Ramdisk或者其它映像時(shí)使用一種特殊的映像格式。這種格式包含了一些信息,如創(chuàng )建時(shí)間、操作系統、壓縮格式、映像類(lèi)型、映像名和CRC32校驗和。

mkimage用來(lái)創(chuàng )建這種格式的映像文件或者顯示它包含的信息。如果使用ELDK,那么mkimage這個(gè)命令已經(jīng)包含在ELDK中。

如果你不想使用ELDK,你應該把mkimage安裝在某個(gè)能夠直接執行的目錄里,比如:

$ cp tools/mkimage /usr/local/bin/

5.6 初始化


初始化你的TQM8xxL板上的U-Boot,你需要通過(guò)終端連接板子的串口。

TQM8xxL板的串口默認配置是波特率為115200/8N1(115200bps,每個(gè)字符8bit,無(wú)奇偶校驗,1bit停止位,無(wú)握手)。

如果你的主機是Linux操作系統,我們建議你用kermit或者cu作為終端控制程序。

確定硬件和軟件控制流都已經(jīng)關(guān)閉。

5.7 開(kāi)始的步驟... 9


5.8 首次上電... 11


5.7 開(kāi)始的步驟


在默認配置中,U-Boot運行在一種互動(dòng)模式,它通過(guò)串口“COM.1(X.18)”提供命令行形式的用戶(hù)接口。

這意味著(zhù)U-Boot顯示一個(gè)提示符(默認是:=>),等待著(zhù)接受用戶(hù)的輸入。然后你輸入一個(gè)命令,按下回車(chē)鍵。U-Boot將運行這個(gè)命令,然后又出現提示符等待下一條命令。

你可以使用help(或者簡(jiǎn)單地一個(gè)?)來(lái)查看所有的U-Boot命令。它將會(huì )列出在你當前配置下所有支持的命令。[請注意到盡管U-Boot提供了很多配置選項,并不是所有選項都支持各種處理器和開(kāi)發(fā)板,有些選項可能在你的配置中并沒(méi)有被選上。]

=> help

askenv - get environment variables from stdin

autoscr - run script from memory

base - print or set address offset

bdinfo - print Board Info structure

bootm - boot application image from memory

bootp - boot image via network using BootP/TFTP protocol

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

cmp - memory compare

coninfo - print console devices and informations

cp - memory copy

crc32 - checksum calculation

date - get/set/reset date time

dhcp - invoke DHCP client to obtain IP/boot params

diskboot- boot from IDE device

echo - echo args to console

erase - erase FLASH memory

flinfo - print FLASH memory information

go - start application at address 'addr'

help - print online help

ide - IDE sub-system

iminfo - print header information for application image

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)

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

and env variables ipaddr and serverip

version - print monitor version

? - alias for 'help'

=>

使用help 你可以得到更多的命令信息:

=> help tftpboot

tftpboot [loadAddress] [bootfilename]

=> help setenv printenv

setenv name value ...

- set environment variable 'name' to 'value ...'

setenv name

- delete environment variable 'name'

printenv

- print values of all environment variables

printenv name ...

- print value of environment variable 'name'

=>

大多數命令可以縮寫(xiě),只要字符串的內容仍然可以被確定:

=> help fli tftp

flinfo

- print information for all FLASH memory banks

flinfo N

- print information for FLASH memory bank # N

tftpboot [loadAddress] [bootfilename]

=>

5.8 首次上電


注意:如果你購買(mǎi)的TQM8xxL板已經(jīng)安裝了U-Boot,你可以跳過(guò)這節,因為制造商已經(jīng)完成這些步驟了。

把主機指定的串口和在TQM8xxL板上標有“COM.1(X.18)”的端口連接,運行終端程序,給TQM8xxL板接上電源。你可以看到如下信息:

Connecting to /dev/ttyS1, speed 115200.

The escape character is Ctrl- (ASCII 28, FS)

Type the escape character followed by C to get back,

or followed by ? to see other options.

----------------------------------------------------

PPCBoot 1.1.5 (Mar 21 2002 - 19:55:04)

CPU: XPC860xxZPnnD3 at 50 MHz: 16 kB I-Cache 8 kB D-Cache FEC present

Board: TQM860LDDBA3-P50.203

DRAM: 64 MB

FLASH: 8 MB

In: serial

Out: serial

Err: serial

PCMCIA: No Card found

Type run flash_nfs to mount root filesystem over NFS

Hit any key to stop autoboot: 0

=>

你可以按下任意鍵來(lái)中止倒計數。如果你不那么做,你可能會(huì )看到一些(無(wú)關(guān)緊要的)錯誤,因為系統沒(méi)有初始化。

有時(shí)你可能會(huì )看到一種信息:

*** Warning - bad CRC, using default environment

這條信息沒(méi)有害處,只要你初始化和保存環(huán)境變量之后,它就不會(huì )出現了。

首先,你必須輸入你的開(kāi)發(fā)板的序列號和網(wǎng)卡地址。需要特別注意的是,這些參數是寫(xiě)保護的,一旦保存了就無(wú)法改變(通常制造商已經(jīng)設置好了)。使用U-Boot的setenv命令可以輸入數據,命令后面跟上變量名和值,參數之間用空格(或者Tab符)隔開(kāi)。例如,使用變量名serial#設置開(kāi)發(fā)板的ID或者說(shuō)序列號,變量名ethaddr用于設置以太網(wǎng)地址:

=> setenv serial# TQM860LDB0A3-P.200 10061684 4

=> setenv ethaddr 00:D0:93:00:05:B5

使用printenv確認你已經(jīng)輸入正確的值:

=> printenv serial# ethaddr

serial#=TQM860LDDBA3-P50.203 10226122 4

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

=>

請仔細核查顯示值是否正確!等保存之后你將不能更正任何錯誤。如果發(fā)現錯誤,請重新啟動(dòng)開(kāi)發(fā)板。如果檢查無(wú)誤,你可以使用saveenv命令永久保存這些參數。

=> saveenv

Saving Enviroment to Flash...

Un-Protected 1 sectors

Erasing Flash...

. done

Erased 1 sectors

Writing to Flash... done

Protected 1 sectors

=>

5.9 U-Boot命令介紹


這一節將介紹U-Boot中最重要的指令。U-Boot可配置性非常強,所以并不是所有的命令都已經(jīng)在你的硬件平臺上安裝,此外可能也有這兒沒(méi)提到的命令。你可以使用help命令來(lái)顯示根據你的配置所有可用的命令列表。

對于大多數命令,你不必打全這些命令,只需輸入一些字符足以。比如,help可以簡(jiǎn)寫(xiě)為h。

一些命令的執行依賴(lài)于U-Boot的配置以及U-Boot中一些環(huán)境變量的定義。

所有的U-Boot命令都把輸入的數字當作十六進(jìn)制的格式。

不要使用除了退格鍵之外的其它編輯鍵,因為在諸如環(huán)境變量中隱藏的字符是很難被發(fā)現的。

5.9.1 信息類(lèi)命令

5.9.1.1 bdinfo – 顯示開(kāi)發(fā)板信息

=> help bdinfo

bdinfo - No help available.

=>

bdinfo命令(簡(jiǎn)寫(xiě)為bdi)將在終端顯示諸如內存地址和大小、時(shí)鐘頻率、MAC地址等信息。這些信息在傳遞給Linux內核一些參數時(shí)會(huì )用到。

=> 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


=>

5.9.1.2 coninfo – 顯示控制臺設備和信息

=> help conin

coninfo

=>

coninfo命令 (簡(jiǎn)寫(xiě)為conin) 顯示可用的控制I/O設備信息。

=> conin

List of available devices:

serial 80000003 SIO stdin stdout stderr

=>

輸出包括了設備名、標識和當前使用情況。以此為例:

serial 80000003 SIO stdin stdout stderr

這個(gè)輸出結果意為串口設備是一個(gè)系統設備(標志‘S’),它提供輸入(標志‘I’)和輸出(標志‘O’)功能,而且當前已經(jīng)指派給3個(gè)標準I/O流:tdin,stdout 和stderr。

5.9.1.3 flinfo – 顯示Flash存儲信息

=> help flinfo

flinfo

- print information for all FLASH memory banks

flinfo N

- print information for FLASH memory bank # N

=>

flinfo命令 (簡(jiǎn)寫(xiě)為fli) 用于獲取可用的flash存儲信息(參見(jiàn)后面的Flash存儲命令)。

=> fli

Bank # 1: FUJITSU AM29LV160B (16 Mbit, bottom boot sect)


Size: 4 MB in 35 Sectors


Sector Start Addresses:


40000000 (RO) 40008000 (RO) 4000C000 (RO) 40010000 (RO) 40020000 (RO)


40040000 40060000 40080000 400A0000 400C0000


400E0000 40100000 40120000 40140000 40160000


40180000 401A0000 401C0000 401E0000 40200000


40220000 40240000 40260000 40280000 402A0000


402C0000 402E0000 40300000 40320000 40340000


40360000 40380000 403A0000 403C0000 403E0000


Bank # 2: FUJITSU AM29LV160B (16 Mbit, bottom boot sect)


Size: 4 MB in 35 Sectors


Sector Start Addresses:


40400000 40408000 4040C000 40410000 40420000


40440000 40460000 40480000 404A0000 404C0000


404E0000 40500000 40520000 40540000 40560000


40580000 405A0000 405C0000 405E0000 40600000


40620000 40640000 40660000 40680000 406A0000


406C0000 406E0000 40700000 40720000 40740000


40760000 40780000 407A0000 407C0000 407E0000


=>

5.9.1.4 iminfo – 顯示映像文件頭部信息


=> help iminfo

iminfo addr [addr ...]

- print header information for application image starting at

address 'addr' in memory; this includes verification of the

image contents (magic number, header and payload checksums)

=>

iminfo (簡(jiǎn)寫(xiě)為imi) 用于顯示像Linux內核或者ramdisk之類(lèi)的映像文件的頭部信息。 它顯示映像名、類(lèi)型、大小以及CRC32校驗和以驗證文件沒(méi)問(wèn)題。

=> imi 100000

## Checking Image at 00100000 ...


Image Name: Linux-2.4.4


Created: 2002-04-07 21:31:59 UTC


Image Type: PowerPC Linux Kernel Image (gzip compressed)


Data Size: 605429 Bytes = 591 kB = 0 MB


Load Address: 00000000


Entry Point: 00000000


Verifying Checksum ... OK


=>


跟其它很多命令一樣,imi命令的精確操作可由U-Boot的一些環(huán)境變量控制(這兒的是變量verify)。參見(jiàn)后面的詳細介紹。

5.9.1.5 help – 顯示在線(xiàn)幫助


=> help help

help [command ...]

- show help information (for 'command')

'help' prints online help for the monitor commands.

Without arguments, it prints a short usage message for all commands.

To get detailed help information for specific commands you can type

'help' with one or more command names as arguments.

=>

help指令(簡(jiǎn)寫(xiě)為h或者?)顯示在線(xiàn)幫助。如果不加任何參數,它會(huì )打印出所有當前U-Boot可用命令列表。你可以把某一指令名作為help的參數來(lái)獲得這一命令的具體信息。比如:

=> help protect

protect on start end

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

protect on N:SF[-SL]

- protect sectors SF-SL in FLASH bank # N

protect on bank N

- protect FLASH bank # N

protect on all

- protect all FLASH banks

protect off start end

- make FLASH from addr 'start' to addr 'end' writable

protect off N:SF[-SL]

- make sectors SF-SL writable in FLASH bank # N

protect off bank N

- make FLASH bank # N writable

protect off all

- make all FLASH banks writable

=>

5.9.2 存儲類(lèi)指令


5.9.2.1 base – 顯示或者設置地址偏移


=> help base

base

- print address offset for memory commands

base off

- set address offset for memory commands to 'off'

=>

你可以使用base命令(簡(jiǎn)寫(xiě)為ba)來(lái)顯示或者設置一個(gè)“基地址”作為所有存儲類(lèi)命令的地址偏移值。默認的基址是0,所以你輸入的所有地址都是實(shí)地址。但是,當你重復訪(fǎng)問(wèn)某一特定存儲區域(如一些嵌入式PowerPc處理器的內存)時(shí),如果設置此區域的開(kāi)始地址作為基址,只需使用偏移地址,這將非常簡(jiǎn)便:

=> 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)......


=>


5.9.2.2 crc32 – 校驗和計算


crc32(簡(jiǎn)寫(xiě)為crc)用來(lái)計算在某一范圍內存儲區域的CRC32校驗和。

=> crc 100004 3FC

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

=>

當后面加了3個(gè)參數時(shí),此命令會(huì )把計算結果保存在給定存儲地址內。

=> crc 100004 3FC 100000

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

=> md 100000 4

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

=>

可以看到,CRC32的校驗和不僅顯示出來(lái)了,還存儲在地址為0x10000000的存儲單元里。

5.9.2.3 cmp – 存儲單元比較


=> help cmp

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

- compare memory

=>

使用cmp命令你可以比較兩個(gè)存儲區域的內容是否一致。這個(gè)命令不僅可以測試由第3個(gè)參數確定的整個(gè)區域,還可以在第一個(gè)不同的地方停下來(lái)。

=> cmp 100000 40000000 400

word at 0x00100004 (0x50ff4342) != word at 0x40000004 (0x50504342)

Total of 1 word were the same

=> md 100000 C

00100000: 27051956 50ff4342 6f6f7420 312e312e '..VP.CBoot 1.1.


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


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


=> md 40000000 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)......


=>


跟很多的存儲類(lèi)命令一樣,cmp可以采用不同的長(cháng)度訪(fǎng)問(wèn)存儲器:可以是32bit(長(cháng)字),16bit(字)或者8bit(字節)數據。默認使用32bit,或者使用cmp.l代替,結果是一樣的。如果你想以16bit或者字數據訪(fǎng)問(wèn)存儲器,你可以用cmp.w代替;如果是8bit或者字節數據,請用cmp.b。

必須注意到計數參數確定了需要被處理的數據的總長(cháng)度,也就是有多少長(cháng)字、字或者字節需要被比較。

=> cmp.l 100000 40000000 400

word at 0x00100004 (0x50ff4342) != word at 0x40000004 (0x50504342)

Total of 1 word were the same

=> cmp.w 100000 40000000 800

halfword at 0x00100004 (0x50ff) != halfword at 0x40000004 (0x5050)

Total of 2 halfwords were the same

=> cmp.b 100000 40000000 1000

byte at 0x00100005 (0xff) != byte at 0x40000005 (0x50)

Total of 5 bytes were the same

=>

5.9.2.4 cp – 存儲器拷貝


=> help cp

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

- copy memory

=>

cp用來(lái)復制存儲單元。

=> cp 40000000 100000 10000

=>

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

5.9.2.5 md – 顯示存儲單元內容


=> help md

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

- memory display

=>

md采用十六進(jìn)制和ASCII碼兩種形式來(lái)顯示存儲單元的內容。

=> 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 ................


001000f0: 00000000 00000000 00000000 00000000 ................


=>


00100100: 3c60fff0 7c7e9ba6 3aa00001 4800000c `..|~..:...H...


00100110: 3aa00002 48000004 38601002 7c600124 :...H...8`..|`.$


00100120: 7c7b03a6 7c7422a6 7c000278 7c1c23a6 |{..|t.|..x|.#.


00100130: 7c1d23a6 7c1623a6 7c1723a6 7c708aa6 |.#.|.#.|.#.|p..


00100140: 7c788aa6 3c600a00 7c708ba6 7c788ba6 |x..`..|p..|x..


00100150: 3c600c00 7c708ba6 7c788ba6 3c600400 `..|p..|x..`..


00100160: 7c788ba6 3c600200 7c708ba6 7c0002e4 |x..`..|p..|...


00100170: 4c00012c 3c604000 60630000 38630188 L..,`@.`c..8c..


00100180: 7c6803a6 4e800020 3c60fff0 60612ec0 |h..N.. `..`a..


00100190: 9401fffc 9401fffc 38400007 7c5e23a6 ........8@..|^#.


001001a0: 3c400000 60420000 7c5523a6 48000005 @..`B..|U#.H...


001001b0: 7dc802a6 800e22bc 7dc07214 48019d41 }......}.r.H..A


001001c0: 7ea3ab78 4800c05d 00000000 00000000 ~..xH..]........


001001d0: 00000000 00000000 00000000 00000000 ................


001001e0: 00000000 00000000 00000000 00000000 ................


001001f0: 00000000 00000000 00000000 00000000 ................


=>


這條命令同樣可以采用類(lèi)型標識符 .l, .w和.b :

=> md.w 100000


00100000: 2705 1956 5050 4342 6f6f 7420 312e 312e '..VPPCBoot 1.1.


00100010: 3520 284d 6172 2032 3120 3230 3032 202d 5 (Mar 21 2002 -


00100020: 2031 393a 3535 3a30 3429 0000 0000 0000 19:55:04)......


00100030: 0000 0000 0000 0000 0000 0000 0000 0000 ................


00100040: 0000 0000 0000 0000 0000 0000 0000 0000 ................


00100050: 0000 0000 0000 0000 0000 0000 0000 0000 ................


00100060: 0000 0000 0000 0000 0000 0000 0000 0000 ................


00100070: 0000 0000 0000 0000 0000 0000 0000 0000 ................


=> md.b 100000


00100000: 27 05 19 56 50 50 43 42 6f 6f 74 20 31 2e 31 2e '..VPPCBoot 1.1.


00100010: 35 20 28 4d 61 72 20 32 31 20 32 30 30 32 20 2d 5 (Mar 21 2002 -


00100020: 20 31 39 3a 35 35 3a 30 34 29 00 00 00 00 00 00 19:55:04)......


00100030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................


=>


上次顯示的存儲單元地址和計數參數值會(huì )被記憶,所以你可以不加任何參數僅僅輸入md,它將會(huì )自動(dòng)地顯示下一個(gè)地址,使用相同的計數參數:

=> md.b 100000 20


00100000: 27 05 19 56 50 50 43 42 6f 6f 74 20 31 2e 31 2e '..VPPCBoot 1.1.


00100010: 35 20 28 4d 61 72 20 32 31 20 32 30 30 32 20 2d 5 (Mar 21 2002 -


=> md.w 100000


00100000: 2705 1956 5050 4342 6f6f 7420 312e 312e '..VPPCBoot 1.1.


00100010: 3520 284d 6172 2032 3120 3230 3032 202d 5 (Mar 21 2002 -


00100020: 2031 393a 3535 3a30 3429 0000 0000 0000 19:55:04)......


00100030: 0000 0000 0000 0000 0000 0000 0000 0000 ................


=> 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 ................


=>


5.9.2.6 mm – 存儲單元修正(自動(dòng)增長(cháng))


=> help md

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

- memory display

=>

mm提供了一種互動(dòng)修改存儲器內容的方法。它將會(huì )顯示地址和當前值,然后提示用戶(hù)輸入。如果你輸入了一個(gè)合法的十六進(jìn)制數,這個(gè)新的值將會(huì )被寫(xiě)入該地址。然后提示下一個(gè)地址。如果你沒(méi)有輸入任何值,只是按了一下回車(chē),那么該地址的內容保持不變。只要你輸入任意非十六進(jìn)制的數據(比如說(shuō).),此命令就立刻結束。

=> 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èi)型標識符.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 ................

=>

5.9.2.7 mtest – 簡(jiǎn)單地RAM測試


=> help mtest

mtest [start [end [pattern]]]

- simple RAM read/write test

=>

mtest提供一個(gè)簡(jiǎn)單地存儲器測試。

=> mtest 100000 200000

Testing 00100000 ... 00200000:

Pattern 0000000F Writing... Reading...

=>

它往存儲器寫(xiě)入數據,這樣會(huì )修改存儲單元。如果遇到ROM或者flash存儲單元,它會(huì )寫(xiě)入失敗。

如果測試的存儲范圍包括U-Boot使用的區域(如中斷向量表,或者內部程序代碼,堆?;蛘叨汛娣诺膯卧?,此命令可能會(huì )使系統崩潰。

5.9.2.8 mw – 寫(xiě)存儲器


=> help mw

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

- write memory

=>

mw是一種往存儲器填寫(xiě)某些數據的方法。如果調用時(shí)沒(méi)加計數參數,值將僅僅被寫(xiě)到某一給定的地址。當使用了計數參數時(shí),整個(gè)存儲區域都會(huì )寫(xiě)入該值。

=> 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 ................

=>

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


=> help nm

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

- memory modify, read and keep address

=>

nm命令用于互動(dòng)地往某個(gè)相同的地址寫(xiě)入不同的數據。在訪(fǎng)問(wèn)和修改設備寄存器的時(shí)候,這將會(huì )非常有用。

=> 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 ................

=>

nm同樣可以加上標識符 .l, .w和.b。

5.9.2.10 loop – 在地址范圍內無(wú)限循環(huán)


=> help loop

loop [.b, .w, .l] address number_of_objects

- loop on a set of addresses

=>

loop命令非??焖俚刈x某個(gè)存儲范圍。因為這個(gè)命令力圖最快速地讀取存儲單元,所以被用作一種特殊的存儲器測試。

這個(gè)命令永遠不會(huì )結束。除了重啟開(kāi)發(fā)板,沒(méi)有其它辦法可以停止它!

=> loop 100000 8

本文引用地址:http://dyxdggzs.com/article/258210.htm


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>