<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          1. 概要


          這是嵌入式PowerPC, ARM和MIPS系統(tǒng)中使用DENX U-Boot和Linux的指導(dǎo)手冊。

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

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

          2. 緒論


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

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

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

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

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

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

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

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

          本文檔的側(cè)重點(diǎn)是針對TQM8xxL開發(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開發(fā)工具套件


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

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

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

          3.1 獲取ELDK


          可以通過以下方式獲得ELDK。

          ·DENX計算機(jī)系統(tǒng)光盤


          ·從以下服務(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目錄樹根目錄下的安裝工具。安裝工具使用語法如下;


          $ ./install [-d


          -d 確定ELDK安裝在哪個目錄。如果省略ELDK會安裝在當(dāng)前目錄。


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

          你也可以把ELDK安裝到任何空目錄下,這么做的唯一條件是你有那個目錄的寫和執(zhí)行權(quán)限。安裝過程并不需要超級用戶的特權(quán)。

          由安裝時的參數(shù)決定安裝幾個目標(biāo)組件集合。ELDT包是肯定會安裝的。

          4. 系統(tǒng)設(shè)置


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

          4.1 設(shè)置串口


          為了更好地使用U-Boot和Linux,你需要通過串口將目標(biāo)板和你的主機(jī)連接。U-Boot和Linux可以配置成自動執(zhí)行而不需要任何用戶的干涉。

          通過串口有很多種方法來控制你的目標(biāo)板,比如說使用終端服務(wù)器。不過最常見的做法是使用你本機(jī)的串口,這時,你主機(jī)需要安裝一個終端程序,如cu或者kermit。

          4.2 配置“kermit”


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

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

          ~/.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



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

          然后你可以連接目標(biāo)板了:

          $ 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這個軟件時,你會發(fā)現(xiàn)有兩個kermit包。你只需要安裝ckermit。其中g(shù)kermit僅僅是實(shí)現(xiàn)kermit傳輸協(xié)議的一個命令行工具。

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

          4.3 使用minicom


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

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

          4.4 配置TFTP服務(wù)器


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

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

          $ rpm -q tftp-server

          如果沒有安裝,請從你的Linux安裝盤或者其它媒介安裝。

          大多數(shù)的Linux發(fā)行版都默認(rèn)關(guān)閉TFTP服務(wù)。以RedHat系統(tǒng)為例,如果要使能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目錄存在,而且有訪問權(quán)限(至少應(yīng)該dr-xr-xr-x)。



          5. Das U-Boot


          5.1 當(dāng)前版本


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

          U-Boot最新版的源代碼可以在Sourcefoge通過匿名CVS得到。當(dāng)要求輸入匿名用戶anonymous的密碼時只需要直接按下回車鍵。

          $ 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也可以通過FTP方式獲取。你可以到

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

          下載tar形式的壓縮包。

          5.2 源代碼包的解壓


          如果你是通過CVS得到的U-Boot源代碼,你可以跳過這一步,因?yàn)槟愕玫降囊呀?jīng)是解壓后的目錄樹了。如果你是從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)清除以前編譯的結(jié)果:

          $ make distclean

          下一步是為TQM8xxL板配置U-Boot:

          $ make tqm8xxl_config

          (譯者注:應(yīng)該根據(jù)你自己的具體開發(fā)板配置,如

          $ make yourboard>_config,如果沒有相應(yīng)的開發(fā)板,應(yīng)該自己照著建立相應(yīng)的目錄和配置文件。)

          最后我們可以開始編譯U-Boot了:

          $ make all


          5.4 安裝


          5.4.1 動手之前


          5.4.1.1 安裝所需

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

          5.4.1.2 開發(fā)板識別數(shù)據(jù)


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

          5.4.2 使用BDM/JTAG調(diào)試器安裝U-Boot.bin


          把數(shù)據(jù)燒入flash中的一個簡單而又快速的辦法是通過BDM或者JTAG接口的調(diào)試器或者flash燒寫器。當(dāng)flash中沒有任何數(shù)據(jù)(比如說一塊新的開發(fā)板),這種方法是唯一的選擇。

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

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

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

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


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

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

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

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

          過程如下:

          => 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內(nèi)核、Ramdisk或者其它映像時使用一種特殊的映像格式。這種格式包含了一些信息,如創(chuàng)建時間、操作系統(tǒng)、壓縮格式、映像類型、映像名和CRC32校驗(yàn)和。

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

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

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

          5.6 初始化


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

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

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

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

          5.7 開始的步驟... 9


          5.8 首次上電... 11


          5.7 開始的步驟


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

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

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

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

          =>

          大多數(shù)命令可以縮寫,只要字符串的內(nèi)容仍然可以被確定:

          => 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 首次上電


          注意:如果你購買的TQM8xxL板已經(jīng)安裝了U-Boot,你可以跳過這節(jié),因?yàn)橹圃焐桃呀?jīng)完成這些步驟了。

          把主機(jī)指定的串口和在TQM8xxL板上標(biāo)有“COM.1(X.18)”的端口連接,運(yùn)行終端程序,給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

          =>

          你可以按下任意鍵來中止倒計數(shù)。如果你不那么做,你可能會看到一些(無關(guān)緊要的)錯誤,因?yàn)橄到y(tǒng)沒有初始化。

          有時你可能會看到一種信息:

          *** Warning - bad CRC, using default environment

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

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

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

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

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

          => printenv serial# ethaddr

          serial#=TQM860LDDBA3-P50.203 10226122 4

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

          =>

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

          => 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命令介紹


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

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

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

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

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

          5.9.1 信息類命令

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

          => help bdinfo

          bdinfo - No help available.

          =>

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

          => 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 – 顯示控制臺設(shè)備和信息

          => help conin

          coninfo

          =>

          coninfo命令 (簡寫為conin) 顯示可用的控制I/O設(shè)備信息。

          => conin

          List of available devices:

          serial 80000003 SIO stdin stdout stderr

          =>

          輸出包括了設(shè)備名、標(biāo)識和當(dāng)前使用情況。以此為例:

          serial 80000003 SIO stdin stdout stderr

          這個輸出結(jié)果意為串口設(shè)備是一個系統(tǒng)設(shè)備(標(biāo)志‘S’),它提供輸入(標(biāo)志‘I’)和輸出(標(biāo)志‘O’)功能,而且當(dāng)前已經(jīng)指派給3個標(biāo)準(zhǔn)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命令 (簡寫為fli) 用于獲取可用的flash存儲信息(參見后面的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 (簡寫為imi) 用于顯示像Linux內(nèi)核或者ramdisk之類的映像文件的頭部信息。 它顯示映像名、類型、大小以及CRC32校驗(yàn)和以驗(yà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)。參見后面的詳細(xì)介紹。

          5.9.1.5 help – 顯示在線幫助


          => 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指令(簡寫為h或者?)顯示在線幫助。如果不加任何參數(shù),它會打印出所有當(dāng)前U-Boot可用命令列表。你可以把某一指令名作為help的參數(shù)來獲得這一命令的具體信息。比如:

          => 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 存儲類指令


          5.9.2.1 base – 顯示或者設(shè)置地址偏移


          => help base

          base

          - print address offset for memory commands

          base off

          - set address offset for memory commands to 'off'

          =>

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

          => 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 – 校驗(yàn)和計算


          crc32(簡寫為crc)用來計算在某一范圍內(nèi)存儲區(qū)域的CRC32校驗(yàn)和。

          => crc 100004 3FC

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

          =>

          當(dāng)后面加了3個參數(shù)時,此命令會把計算結(jié)果保存在給定存儲地址內(nèi)。

          => crc 100004 3FC 100000

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

          => md 100000 4

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

          =>

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

          5.9.2.3 cmp – 存儲單元比較


          => help cmp

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

          - compare memory

          =>

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

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


          =>


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

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

          => 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用來復(fù)制存儲單元。

          => cp 40000000 100000 10000

          =>

          cp 可以使用類型標(biāo)識符 .l , .w和.b。

          5.9.2.5 md – 顯示存儲單元內(nèi)容


          => help md

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

          - memory display

          =>

          md采用十六進(jìn)制和ASCII碼兩種形式來顯示存儲單元的內(nè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 ................


          =>


          這條命令同樣可以采用類型標(biāo)識符 .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 ................


          =>


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

          => 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 – 存儲單元修正(自動增長)


          => help md

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

          - memory display

          =>

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

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

          =>

          同樣,這條命令也可以加上類型標(biāo)識符.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 – 簡單地RAM測試


          => help mtest

          mtest [start [end [pattern]]]

          - simple RAM read/write test

          =>

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

          => mtest 100000 200000

          Testing 00100000 ... 00200000:

          Pattern 0000000F Writing... Reading...

          =>

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

          如果測試的存儲范圍包括U-Boot使用的區(qū)域(如中斷向量表,或者內(nèi)部程序代碼,堆棧或者堆存放的單元),此命令可能會使系統(tǒng)崩潰。

          5.9.2.8 mw – 寫存儲器


          => help mw

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

          - write memory

          =>

          mw是一種往存儲器填寫某些數(shù)據(jù)的方法。如果調(diào)用時沒加計數(shù)參數(shù),值將僅僅被寫到某一給定的地址。當(dāng)使用了計數(shù)參數(shù)時,整個存儲區(qū)域都會寫入該值。

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

          =>

          它又是一條可以加標(biāo)識符.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命令用于互動地往某個相同的地址寫入不同的數(shù)據(jù)。在訪問和修改設(shè)備寄存器的時候,這將會非常有用。

          => 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同樣可以加上標(biāo)識符 .l, .w和.b。

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


          => help loop

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

          - loop on a set of addresses

          =>

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

          這個命令永遠(yuǎn)不會結(jié)束。除了重啟開發(fā)板,沒有其它辦法可以停止它!

          => loop 100000 8

          本文引用地址:http://www.ex-cimer.com/article/258210.htm


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();