常用的命令筆記1

一.  用戶系統相關命令
            Linux 是一個多用戶的操作系統,每個用戶又可以屬於不同的用戶組,下面,首先來熟悉一下Linux 中的用戶切換和用戶管理的相關命令。

 

           1.用戶切換(su)
          (1)作用
變更爲其它使用者的身份,主要用於將普通用戶身份轉變爲超級用戶,而且需輸入相應用戶密碼。
           (2)格式
su [選項] [使用者]
其中的使用者爲要變更的對應使用者。
          (3)常見參數
-,-l,--login 爲該使用者重新登錄,大部分環境變量(如HOME、SHELL和USER等)和錄都是以該使用者(USER)爲主。若沒有指定USER,缺省情況是root
-m,-p  執行su時不改變環境變量
-c,--command  變更賬號爲USER的使用者,並執行指令(command)後再變回原來使用者

         (4)使用示例
 
[sunq@www sunq]$ su - root
Password: 
[root@www root]#  
 示例通過su命令將普通用戶變更爲 root用戶,並使用選項“-”攜帶root環境變量。
         (5)使用說明 
          在將普通用戶變更爲 root用戶時建議使用”-”選項,這樣可以將root的環境變量和工作目錄同時帶入,否則在以後的使用中可能會由於環境變量的原因而出錯。在轉變爲root權限後,提示符變爲#。
 

          2.用戶管理(useradd和passwd)
 
           Linux中常見用戶管理命令:

useradd                 添加用戶賬號                                                            useradd [選項]  用戶名
usermod               設置用戶賬號屬性                                                     usermod [選項]  屬性值
userdel                  刪除對應用戶賬號                                                     userdel [選項]  用戶名
groupadd              添加組賬號                                                                 groupadd [選項]  組賬號
groupmod            設置組賬號屬性                                                          groupmod [選項]  屬性值
groupdel               刪除對應組賬號                                                          groupdel [選項]  組賬號
passwd                 設置賬號密碼                                                              passwd [對應賬號]
id                            顯示用戶ID、組 ID和用戶所屬的組列表                id [用戶名]
groups                   顯示用戶所屬的組                                                     groups [組賬號]
who                        顯示登錄到系統的所有用戶                                      who

            (1)作用
①  useradd:添加用戶賬號。
②  passwd:更改對應用戶賬號密碼。
            (2)格式
①  useradd:useradd [選項]  用戶名。
②  passwd:passwd [選項] [用戶名]。
其中的用戶名爲修改賬號密碼的用戶, 若不帶用戶名,缺省爲更改當前使用者賬號密碼。  
           (3)常用參數
-g  指定用戶所屬的羣組
-m  自動建立用戶的登入目錄
-n  取消建立以用戶名稱爲名的羣組

②  passwd:一般很少使用選項參數。
           (4)使用實例
 
[root@www root]# useradd yul
[root@www root]# passwd yul
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully
[root@www root]# su - yul
[yul@www yul]$
[yul@www yul]$ pwd(查看當前目錄)
/home/yul
 
實例中先添加了用戶名爲yul的用戶,接着又爲該用戶設置了賬號密碼。並從 su的命令可以看出,該用戶添加成功,其工作目錄爲”/home/yul” 。

       (5)使用說明 
        在使用添加用戶時,這兩個命令是一起使用的,其中,useradd 必須用 root 的權限。而且useradd指令所建立的賬號,實際上是保存在“/etc/passwd”文本文件中,文件中每一行包含一個賬號信息。  在缺省情況下,useradd所做的初始化操作包括在“/home”目錄下爲對應賬號建立一個名爲同名的主目錄,並且還爲該用戶單獨建立一個與用戶名同名的組。  adduser 只是 useradd的符號鏈接(關於符號鏈接的概念在本節後面會有介紹),兩者是相同的。 passwd還可用於普通用戶修改賬號密碼, Linux並不採用類似windows的密碼回顯 (顯示爲*號) ,所以輸入的這些字符用戶是看不見的。密碼最好包括字母、數字和特殊符號,並且設成6 位以上。

          3.系統管理命令(ps和kill)
          Linux 中常見的系統管理命令如 ps和 kill爲例進行講解。

命 令                        命 令 含 義                                                                                    格     式
ps                            顯示當前系統中由該用戶運行的進程列表                                   ps [選項]
top                            動態顯示系統中運行的程序(一般爲每隔5s)                           top
kill                            輸出特定的信號給指定PID(進程號)的進程                             kill [選項]  進程號(PID)

uname                  顯示系統的信息(可加選項-a)                                                      uname [選項]
setup                     系統圖形化界面配置                                                                         setup
crontab                  循環執行例行性命令                                                                        crontab [選項]
shutdown             關閉或重啓Linux系統                                                                       shutdown [選項
uptime                  顯示系統已經運行了多長時間                                                         uptime
clear                      清除屏幕上的信息                                                                             clear

            (1)作用
①  ps:顯示當前系統中由該用戶運行的進程列表。
②  kill:輸出特定的信號給指定 PID(進程號)的進程,並根據該信號而完成指定的行爲。其中可能的信號有進程掛起、進程等待、進程終止等。
           (2)格式
①  ps:ps [選項]。
②  kill:kill [選項]  進程號(PID)。
        kill 命令中的進程號爲信號輸出的指定進程的進程號,當選項是缺省時爲輸出終止信號給該進程。
           (3)常見參數

         選     項                                                                 參 數 含 義
          -ef                            查看所有進程及其PID(進程號)、系統時間、命令詳細目錄、執行者等
          -aux                         除可顯示-ef所有內容外,還可顯示CPU及內存佔用率、進程狀態 
          -w                            顯示加寬並且可以顯示較多的信息

②  kill主要選項參數

                   選     項                         參 數 含 義
                    -s                        根據指定信號發送給進程
                    -p                        打印出進程號(PID),但並不送出信號
                     -l                        列出所有可用的信號名稱

         4.磁盤相關命令(fdisk)
        Linux 中與磁盤相關的命令如表2.7 所示,本書僅以 fdisk爲例進行講解。 
        Linux常見系統管理命令
            選  項                 參 數 含 義                                                      格     式
            free                    查看當前系統內存的使用情況                        free [選項]
            df                        查看文件系統的磁盤空間佔用情況               df [選項]
            du                      統計目錄(或文件)所佔磁盤空間的大小    du [選項]
           fdisk                   查看硬盤分區情況及對硬盤進行分區管理    fdisk [-l]
 
          (1)作用
          fdisk可以查看硬盤分區情況,並可對硬盤進行分區管理,這裏主要向讀者介紹查看硬盤分區情況,另外,fdisk也是一個非常好的硬盤分區工具,感興趣的讀者可以另外查找資料學習使用fdisk進行硬盤分區。
         (2)格式
fdisk [-l]

         (3)使用說明
         使用fdisk必須擁有root權限。IDE 硬盤對應的設備名稱分別爲 hda、hdb、hdc和hdd,SCSI硬盤對應的設備名稱則爲sda、sdb、…此外,hda1代表hda的第一個硬盤分區,hda2代表hda的第二個分區,依此類推。通過查看/var/log/messages文件,可以找到 Linux 系統已辨認出來的設備代號。

                 選                    項  參 數 含 義
                 -a                    依照/etc/fstab的內容裝載所有相關的硬盤
                  -l                    列出當前已掛載的設備、文件系統名稱和掛載點
                  -t                    類型
         將後面的設備以指定類型的文件格式裝載到掛載點上。常見的類型有前面介紹過的幾種:vfat、ext3、ext2、iso9660、nfs等
-f   通常用於除錯。它會使mount不執行實際掛上的動作,而是模擬整個掛上的過程,通常會和-v一起使用
 
           (4)使用實例
           使用mount命令主要通過以下幾個步驟。
① 確認是否爲Linux可以識別的文件系統,Linux 可識別的文件系統只要是以下幾種。

·   Windows95/98常用的FAT32文件系統:vfat。
·   WinNT/2000的文件系統:ntfs。
·   OS/2 用的文件系統:hpfs。
·   Linux用的文件系統:ext2、ext3、nfs。
·   CD-ROM光盤用的文件系統:iso9660。
② 確定設備的名稱,確定設備名稱可通過使用命令“fdisk -l”查看。
③ 查找掛接點。 
        必須確定掛載點已經存在, 也就是在 “/mnt” 下的相應子目錄已經存在, 一般建議在 “/mnt”下新建幾個如 “/mnt/windows” , “/mnt/usb” 的子目錄, 現在有些版本的 Linux (如紅旗 Linux、中軟Linux、MandrakeLinux)都可自動掛載文件系統,Red Hat僅可自動掛載光驅。

④ 掛載文件系統如下所示。
[root@sunq mnt]# mount -t vfat /dev/hda1 /mnt/c

⑤ 在使用完該設備文件後可使用命令 umount將其卸載。 
[root@sunq mnt]# umount /mnt/c

 
小知識
·  在Linux下如何使用U盤呢?
一般U盤爲SCSI格式的硬盤,其格式爲vfat格式,其設備號可通過“fdisk –l”進行查看,假若設備名爲“/dev/sda1” ,則可用如下命令就可將其掛載:
mount -t vfat /dev/sda1 /mnt/u
·  若想設置在開機時自動掛載,可在文件“/etc/fstab”中加入相應的設置行即可。

 
          2.1.2  文件目錄相關命令
由於 Linux 中有關文件目錄的操作非常重要,也非常常用,因此在本節中,作者將基本所有的文件操作命令都進行了講解。
         1.cd
         (1)作用
改變工作目錄。
         (2)格式

cd [路徑]
其中的路徑爲要改變的工作目錄,可爲相對路徑或絕對路徑。

         (3)使用說明
·  該命令將當前目錄改變至指定路徑的目錄。若沒有指定路徑,則回到用戶的主目錄。爲了改變到指定目錄,用戶必須擁有對指定目錄的執行和讀權限。
·  該命令可以使用通配符。
·  可使用“cd –”可以回到前次工作目錄。
·  “./”代表當前目錄, “../”代表上級目錄。

 

          2.ls
         (1)作用
          列出目錄的內容。
         (2)格式:ls [選項] [文件]
         其中文件選項爲指定查看指定文件的相關內容,若未指定文件,默認查看當前目錄下的所有文件。
         (3)常見參數

                         選     項                                                                           參 數 含 義
                         -1,--format=single-column                         一行輸出一個文件(單列輸出)
                         -a,-all                                                             列出目錄中所有文件,包括以“.”開頭的文件
                         -d                                                                      將目錄名和其他文件一樣列出,而不是列出目錄的內容
                         -l,--format=long, 
                        --format=verbose                                           除每個文件名外,增加顯示文件類型、權限、硬鏈接數、所有者名、組名、大小(Byte)及時間信息(如未指明是其他時間即指修改時間)
                         -f                                                                      不排序目錄內容,按它們在磁盤上存儲的順序列出

         (4)使用說明 
          在ls的常見參數中,-l(長文件名顯示格式)的選項是最爲常見的。可以詳細顯示出各種信息。若想顯示出所有“.”開頭的文件,可以使用-a,這在嵌入式的開發中很常用。 

         3.mkdir
        (1)作用
創建一個目錄。
        (2)格式
mkdir [選項]  路徑
        (3)常見參數

選     項  參 數 含 義
                       -m                            對新建目錄設置存取權限,也可以用chmod命令(在本節後會有詳細說明)設置 
                       -p                              可以是一個路徑名稱。此時若此路徑中的某些目錄尚不存在,在加上此選項後,系統將自動建立好那些尚不存在的目錄,即一次可以建立多個目錄

         (4)使用實例
[root@www sunq]# mkdir -p ./hello/my
[root@www my]# pwd(查看當前目錄命令)
/home/sunq/hello/my
 
該實例使用選項“-p”一次創建了./hello/my多級目錄。
 
[root@www my]# mkdir -m 777 ./why
[root@www my]# ls -l
total 4
drwxrwxrwx    2 root     root         4096 Jan 14 09:24 why
 
          該實例使用改選項“-m”創建了相應權限的目錄。對於“777”的權限在本節後面會有詳細的說明。
        (5)使用說明 
          該命令要求創建目錄的用戶在創建路徑的上級目錄中具有寫權限,並且路徑名不能是當前目錄中已有的目錄或文件名稱。

           4.cat
          (1)作用 連接並顯示指定的一個和多個文件的有關信息。
           (2)格式
            cat[選項]文件1文件2… 其中的文件1、文件2爲要顯示的多個文件。
           (3)常見參數

                 選                     項  參 數 含 義
                -n                      由第一行開始對所有輸出的行數編號
                -b                      和-n相似,只不過對於空白行不編號
 
            (4)使用實例
 
[yul@www yul]$ cat -n hello1.c hello2.c
     1  #include <stdio.h>
     2  void main()
     3  {
     4          printf("Hello!This is my home!\n");
     5  }
     6  #include <stdio.h>
     7  void main()
     8  {
     9          printf("Hello!This is your home!\n");
    10  }
 
在該實例中,指定對hello1.c和 hello2.c進行輸出,並指定行號。

 

             5.cp、mv 和rm
            (1)作用
①  cp:將給出的文件或目錄複製到另一文件或目錄中。
②  mv:爲文件或目錄改名或將文件由一個目錄移入另一個目錄中。
③  rm:刪除一個目錄中的一個或多個文件或目錄。
           (2)格式
①  cp:cp [選項]  源文件或目錄 目標文件或目錄。
②  mv:mv [選項]  源文件或目錄 目標文件或目錄。
③  rm:rm [選項]  文件或目錄。
           (3)常見參數

            選                  項  參 數 含 義
            -a                  保留鏈接、文件屬性,並複製其子目錄,其作用等於dpr選項的組合

           -d                  拷貝時保留鏈接
            -f                  刪除已經存在的目標文件而不提示
            -i                 在覆蓋目標文件之前將給出提示要求用戶確認。回答y時目標文件將被覆蓋,而且是交互式拷貝
            -p               此時cp除複製源文件的內容外,還將把其修改時間和訪問權限也複製到新文件中
            -r                若給出的源文件是一目錄文件,此時 cp 將遞歸複製該目錄下所有的子目錄和文件。此時目標文件必須爲一個目錄名

              
                 -選     項                       參 數 含 義
                 -i                                  若 mv操作將導致對已存在的目標文件的覆蓋,此時系統詢問是否重寫,並要求用戶回答 y或n,這樣可以避免誤覆蓋文件 
                 -f                                 禁止交互操作。在 mv 操作要覆蓋某已有的目標文件時不給任何指示,在指定此選項後,i選項將不再起作用

               ③  rm主要選項參數

             選     項                                  參 數 含 義
             -i                                            進行交互式刪除
             -f                                            忽略不存在的文件,但從不給出提示
             -r                                           指示rm將參數中列出的全部目錄和子目錄均遞歸地刪除

 

          (4)使用實例
①  cp
 
[root@www hello]# cp -a ./my/why/ ./  
[root@www hello]# ls
my  why
 
該實例使用-a 選項將“/my/why”目錄下的所有文件複製到當前目錄下。而此時在原先目錄下還有原有的文件。
②  mv
 
[root@www hello]# mv -i ./my/why/ ./
[root@www hello]# ls
my  why
 
該實例中把“/my/why”目錄下的所有文件移至當前目錄,則原目錄下文件被自動刪除。 
③  rm
 
[root@www hello]# rm –r -i ./why
rm: descend into directory './why'? y
rm: remove './why/my.c'? y

rm: remove directory './why'? y
 
            該實例使用“-r”選項刪除“./why”目錄下所有內容,系統會進行確認是否刪除。
           (5)使用說明
①  cp:該命令把指定的源文件複製到目標文件或把多個源文件複製到目標目錄中。
②  mv:
·          該命令根據命令中第二個參數類型的不同(是目標文件還是目標目錄)來判斷是重命名還是移動文件,當第二個參數類型是文件時,mv 命令完成文件重命名,此時,它將所給的源文件或目錄重命名爲給定的目標文件名;  當第二個參數是已存在的目錄名稱時,mv命令將各參數指定的源文件均移至目標目錄中;   在跨文件系統移動文件時,mv先複製,再將原有文件刪除,而鏈至該文件的鏈接也將丟失。
③  rm:
·  如果沒有使用- r 選項,則rm不會刪除目錄;
·  使用該命令時一旦文件被刪除,它是不能被恢復的,所以最好使用-i參數。

 

          6.chown和chgrp
         (1)作用
①  chown:修改文件所有者和組別。
②  chgrp:改變文件的組所有權。
          (2)格式
①  chown:chown [選項]...文件所有者[所有者組名] 文件
其中的文件所有者爲修改後的文件所有者。
②  chgrp:chgrp [選項]... 文件所有組 文件
其中的文件所有組爲改變後的文件組擁有者。
        (3)常見參數

                     選     項                                                    參 數 含 義
                  -c,-changes                     詳盡地描述每個file實際改變了哪些所有權
                   -f,--silent,--quiet            不打印文件所有權就不能修改的報錯信息

 

        (4)使用實例
在筆者的系統中一個文件的所有者原先是這樣的。
 
[root@www sunq]# ls -l
-rwxr-xr-x   15 apectel  sunq         4096  6月  4  2005 uClinux-dist.tar 
 
         可以看出,這是一個文件,它的文件擁有者是apectel,具有可讀寫和執行的權限,它所屬的用戶組是sunq,具有可讀和執行的權限,但沒有可寫的全權,同樣,系統其他用戶對其也只有可讀和執行的權限。

首先使用chown將文件所有者改爲 root。
 
[root@www sunq]# chown root uClinux-dist.tar
[root@www sunq]# ls –l
-rwxr-xr-x   15 root     sunq         4096  6月  4  2005 uClinux-dist.tar
 
可以看出,此時,該文件擁有者變爲了root,它所屬文件用戶組不變。 接着使用chgrp將文件用戶組變爲 root。
 
[root@www sunq]# chgrp root uClinux-dist.tar
[root@www sunq]# ls –l
-rwxr-xr-x   15 root     root         4096  6月  4  2005 uClinux-dist.tar
 
         (5)使用說明
       ·  使用chown和chgrp必須擁有 root權限。

          7.chmod
          (1)作用
           改變文件的訪問權限。
          (2)格式 
           chmod 可使用符號標記進行更改和八進制數指定更改兩種方式,因此它的格式也有兩種不同的形式。
① 符號標記:chmod [選項]…符號權限[符號權限]…文件
 其中的符號權限可以指定爲多個,也就是說,可以指定多個用戶級別的權限,但它們中
間要用逗號分開表示,若沒有顯示指出則表示不作更改。
② 八進制數:chmod [選項]  …八進制權限 文件… 其中的八進制權限是指要更改後的文件權限。
       (3)選項參數

                選     項                                 參 數 含 義
                -c                  若該文件權限確實已經更改,才顯示其更改動作
                -f                   若該文件權限無法被更改也不要顯示錯誤信息
                -v                  顯示權限變更的詳細資料
 
      (4)使用實例
            chmod涉及文件的訪問權限,在此對相關的概念進行簡單的回顧。 在1.3.1節中已經提到,文件的訪問權限可表示成:-  rwx  rwx  rwx。在此設有三種不同的訪問權限:讀(r)、寫(w)和運行(x)。三個不同的用戶級別:文件擁有(u) 、所屬的用戶組(g)和系統裏的其他用戶(o) 。在此,可增加一個用戶級別 a(all)來表示所有這
三個不同的用戶級別。
① 對於第一種符號連接方式的 chmod命令中,用加號“+”代表增加權限,用減號“−”刪除權限,等於號“=”設置權限。 例如原先筆者系統中有文uClinux20031103.tgz,其權限如下所示。
 
[root@www sunq]# ls –l
-rw-r--r--    1 root     root     79708616 Mar 24  2005 uClinux20031103.tgz
[root@www sunq]# chmod a+rx,u+w uClinux20031103.tgz
[root@www sunq]# ls –l
-rwxr-xr-x    1 root     root     79708616 Mar 24  2005 uClinux20031103.tgz
 
         可見,在執行了chmod之後,文件擁有者除擁有所有用戶都有的可讀和執行的權限外,還有可寫的權限。
② 對於第二種八進制數指定的方式,將文件權限字符代表的有效位設爲“1” ,即“rw-” 、“rw-”和“r--”的八進制表示爲“110” 、 “110” 、 “100” ,把這個 2 進制串轉換成對應的 8 進制數就是6、6、4,也就是說該文件的權限爲 664(三位八進制數) 。這樣對於轉化後8 進制數、2進制及對應權限的關係。

 

 

這裏是在網上看到一個網友寫的命令,挺全,拿來留着:

 

U-boot發展到現在,他的命令行模式已經非常接近Linux下的shell了,命令行模式模式下支持“Tab”鍵的命令補全和命令的歷史記錄功能。而且如果你輸入的命令的前幾個字符和別的命令不重複,那麼你就只需要打這幾個字符即可,比如我想看這個U-boot的版本號,命令就是“ version”,但是在所有的命令中沒有其他任何一個的命令是由“v”開頭的,所以只需要輸入“v”即可。

[u-boot@MINI2440]# version

U-Boot 2009.11 ( 4月 04 2010 - 12:09:25)
[u-boot@MINI2440]# v

U-Boot 2009.11 ( 4月 04 2010 - 12:09:25)
[u-boot@MINI2440]# base
Base Address: 0x00000000
[u-boot@MINI2440]# ba
Base Address: 0x00000000


    由於U-boot支持的命令實在太多,一個一個細講不現實,也沒有必要。所以下面我挑一些燒寫和引導常用命令介紹一下,其他的命令大家就舉一反三,或者“help”吧!
(1)獲取幫助
命令:help 或 ?
功能:查看當前U-boot版本中支持的所有命令。

[u-boot@MINI2440]# help
? - alias for 'help'
askenv - get environment variables from stdin
base - print or set address offset
bdinfo - print Board Info structure
bmp - manipulate BMP image data
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootelf - Boot from an ELF image in memory
bootm - boot application image from memory
bootp - boot image via network using BOOTP/TFTP protocol
bootvx - Boot vxWorks from an ELF image
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
crc32 - checksum calculation
date - get/set/reset date & time
dcache - enable or disable data cache
dhcp - boot image via network using DHCP/TFTP protocol
echo - echo args to console
editenv - edit environment variable
eeprom - EEPROM sub-system
erase - erase FLASH memory
exit - exit script
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
flinfo - print FLASH memory information
fsinfo - print information about filesystems
fsload - load binary file from a filesystem image
go - start application at address 'addr'
help - print online help
i2c - I2C sub-system
icache - enable or disable instruction cache
iminfo - print header information for application image
imls - list all images found in flash
imxtract- extract a part of a multi-image
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loadx - load binary file over serial line (xmodem mode)
loady - load binary file over serial line (ymodem mode)
loop - infinite loop on address range
ls - list files in a directory (default /)
md - memory display
mm - memory modify (auto-incrementing address)
mmc - MMC sub-system
mtest - simple RAM read/write test
mw - memory write (fill)
nand - NAND sub-system
nboot - boot from NAND device
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reginfo - print register information
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
showvar - print local hushshell variables
sleep - delay execution for some time
source - run script from memory
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
unzip - unzip a memory region
usb - USB sub-system
usbboot - boot from USB device
version - print monitor version

如果你想獲取某條命令的更詳細的幫助,可以使用:
help <你想要查的指令>
或者 ? <你想要查的指令> ,
甚至 h <你想要查的指令縮寫>

以bmp指令爲例:

[u-boot@MINI2440]# help bmp
bmp - manipulate BMP image data

Usage:
bmp info <imageAddr> - display image info
bmp display <imageAddr> [x y] - display image at x,y
[u-boot@MINI2440]# ? bmp
bmp - manipulate BMP image data

Usage:
bmp info <imageAddr> - display image info
bmp display <imageAddr> [x y] - display image at x,y
[u-boot@MINI2440]# h bm
bmp - manipulate BMP image data

Usage:
bmp info <imageAddr> - display image info
bmp display <imageAddr> [x y] - display image at x,y


(2)環境變量(environment variables,簡稱ENV)與相關指令
和shell類似,U-Boot也有環境變量。一些U-boot默認的環境變量如下:


   

   

bootdelay 執行自動啓動(bootcmd中的命令)的等候秒數
baudrate 串口控制檯的波特率
netmask 以太網的網絡掩碼
ethaddr 以太網的MAC地址
bootfile 默認的下載文件名
bootargs 傳遞給Linux內核的啓動參數
bootcmd 自動啓動時執行命令
serverip TFTP服務器端的IP地址
ipaddr 本地的IP地址
stdin 標準輸入設備,一般是串口
stdout 標準輸出,一般是串口,也可是LCDVGA
stderr 標準出錯,一般是串口,也可是LCDVGA

要看到你的板上的ENV值可使用printenv命令,例如我的板子:
  
[u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
bootcmd=nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
ipaddr=192.168.0.2
serverip=192.168.0.1
gatewayip=192.168.0.1
netmask=255.255.255.0
tekkaman=bmp d 70000
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000

Environment size: 470/131068 bytes



      你會發現有些有的ENV我沒有,還有一個“tekkaman”的ENV。原因是如果你沒有設置這個環境變量就不會打印出,你也可以自己定義ENV,並在命令中使用${ENV}來調用它。同時你也可以刪除這個ENV。設置ENV的命令是setenv,格式爲:
setenv name value

第1個參數是環境變量的名稱。
第2個參數是要設置的值,如果沒有第2個參數,表示刪除這個環境變量。

例如:我先將”tekkaman”參數刪除,再設置,最後在一個命令串中調用。
[u-boot@MINI2440]# printenv tekkaman
tekkaman=bmp d 70000
[u-boot@MINI2440]# setenv tekkaman
[u-boot@MINI2440]# printenv tekkaman
## Error: "tekkaman" not defined
[u-boot@MINI2440]# setenv tekkaman echo "I am Tekkaman Ninja!"
[u-boot@MINI2440]# printenv tekkaman
tekkaman=echo I am Tekkaman 
[u-boot@MINI2440]# echo I Love Linux ;${tekkaman}
I Love Linux
I am Tekkaman 

當你設置了ENV,它只保存在內存中,如果你要它保存在存放ENV的固態存儲器中,請使用:saveenv。

[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 -- 0% complete.
Writing to Nand... done

如果在啓動的時候會看到U-boot打印出:“Warning - bad CRC, using default environment”,說明U-boot沒有在存放ENV的固態存儲器中找到有效的ENV,只好使用你在編譯的時候定義的默認ENV。如果U-boot存放ENV的固態存儲器的驅動是OK的,那麼只要運行 saveenv就可以把默認ENV寫入固態存儲器,下次啓動就不會有這個警告了。
       ENV可以放在許多固體存儲器中,對於mini2440來說Nor Flash、Nand Flash或EEPROM都可以,就看你如何配置了(include/configs下的配置文件)。例如:
      Nor Flash
#define CONFIG_ENV_IS_IN_FLASH 1
#define CONFIG_ENV_OFFSET 0X40000
#define CONFIG_ENV_SIZE            0x20000    /* Total Size of Environment Sector */
Nand Flash: 
#define CONFIG_ENV_IS_IN_NAND 1
#define CONFIG_ENV_OFFSET 0X40000
#define CONFIG_ENV_SIZE            0x20000    /* Total Size of Environment Sector */

EEPROM:
#define CONFIG_ENV_IS_IN_EEPROM 1 /* use EEPROM for environment vars */
#define CONFIG_ENV_OFFSET 0x000 /* environment starts at offset 0 */
#define CONFIG_ENV_SIZE     0x400 /* 1KB */


CONFIG_ENV_OFFSET是在整個存儲器中的偏移地址;
CONFIG_ENV_SIZE是指其使用的大小。

注意 CONFIG_ENV_OFFSET和 CONFIG_ENV_SIZE 的設置,不要覆蓋了其他分區。
四、U-boot的使用(二)

命令:
loadb   - load binary file over serial line (kermit mode)
loadx   - load binary file over serial line (xmodem mode)
loady   - load binary file over serial line (ymodem mode)


 

功能:以不同的協議從串口獲取文件.。
格式基本都爲:
load? [ off ] [ baud ]
第1個參數是下載到SDRAM的地址,如果不填,就是用默認配置:CONFIG_SYS_LOAD_ADDR
第2個參數是波特率,一般不填,用默認的115200.


 

    在windows下的超級終端可以用這些協議發送文件,但是在ubuntu下基本只能用kermit協議。一下使用C-kermit來發送一個文件到mini2440。

[u-boot@MINI2440]# loadb
## Ready for binary (kermit) download to 0x30008000 at 115200 bps...


 

    上面已經啓動了U-boot的kermit傳輸協議,這時按下 Ctrl + \ , 再按 c, 切換到C-kermit的命令行模式,輸入命令:send  <文件路徑>,回車。

[u-boot@MINI2440]# loadb
## Ready for binary (kermit) download to 0x30008000 at 115200 bps...

(Back at MAGI-Linux)
----------------------------------------------------
C-Kermit 8.0.211, 10 Apr 2004, for Linux
Copyright (C) 1985, 2004,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/tekkaman/桌面/) C-Kermit>send/home/tekkaman/development/share/zImage.img

C-kermit就開始傳送,並且顯示一個傳送界面,並動態顯示傳送進度。

C-Kermit 8.0.211, 10 Apr 2004, MAGI-Linux

   Current Directory: /home/tekkaman/&#65533;&#65533;~L&#65533;~]&#65533;
Communication Device: /dev/ttyUSB0
Communication Speed: 115200
              Parity: none
         RTT/Timeout: 01 / 02
             SENDING: /home/tekkaman/development/share/zImage.img => zImage.img
           File Type: BINARY
           File Size: 2277540
        Percent Done: 19 
/////////-

                          ...10...20...30...40...50...60...70...80...90..100
Estimated Time Left: 00:03:35
  Transfer Rate, CPS: 8536
        Window Slots: 1 of 1
         Packet Type: D
        Packet Count: 557
       Packet Length: 1000
         Error Count: 0
          Last Error:
        Last Message:

X to cancel file, Z to cancel group, <CR> to resend last packet,
E to send Error packet, ^C to quit immediately, ^L to refresh screen.

傳送完畢後,輸入c ,回到U-boot的串口界面。
[u-boot@MINI2440]# loadb
## Ready for binary (kermit) download to 0x30008000 at 115200 bps...

(Back at MAGI-Linux)
----------------------------------------------------
C-Kermit 8.0.211, 10 Apr 2004, for Linux
Copyright (C) 1985, 2004,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/tekkaman/桌面/) C-Kermit>send/home/tekkaman/development/share/zImage.img
(/home/tekkaman/桌面/) C-Kermit>c
Connecting to /dev/ttyUSB0, speed 115200
Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------
## Total Size = 0x0022c0a4 = 2277540 Bytes
## Start Addr = 0x30008000

(4)網絡命令

 

    只要你的網卡驅動沒問題,那麼你就可以通過網絡來傳輸文件到開發板,這可比串口快多了。你可以直接用交叉網線連接開發板和電腦,也可以用普通直連網線連接路由器,再連到電腦,不過記得配置好網絡,關閉防火牆哦。
   先測試網絡是否通了,現在開發板使用ping 命令,看看是否可以ping通電腦:

[u-boot@MINI2440]# ping 192.168.1.100 
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
host 192.168.1.100 is alive

如果出現:

[u-boot@MINI2440]# ping 192.168.1.100
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
ping failed; host 192.168.1.100 is not alive

這樣無法ping通的事,可能是:
1、U-boot網卡驅動有問題
2、U-boot網絡協議延時配置有問題
3、網絡參數配置問題,比如IP等,Host和Target都有可能有問題。Host最好關閉IPv6。
實在找不到原因,用Wireshark抓包看看。
如果網絡暢通,下面就可以使用下面的命令從tftp目錄或者nfs目錄下載文件到SDRAM了。
命令:
dhcp    - boot image via network using DHCP/TFTP protocol
rarpboot- boot image via network using RARP/TFTP protocol
nfs     - boot image via network using NFS protocol
tftpboot- boot image via network using TFTP protocol
bootp   - boot image via network using BOOTP/TFTP protocol
這幾個命令的格式都是:<指令> [目的SDRAM地址] [[主機IP:]文件名]
注意:
要使用dhcp、rarpboot或 bootp 等功能要路由器或Host的支持。
如果沒有輸入[目的SDRAM地址],系統就是用編譯時定義的CONFIG_SYS_LOAD_ADDR作爲目的SDRAM地址
如果tftpboot和nfs命令沒有定義[主機IP:],則使用ENV中的serverip
其它命令必需定義[主機IP:],否則會使用提供動態IP服務的主機IP作爲[主機IP:]。
使用範例:
[u-boot@MINI2440]# nfs 0x30008000192.168.1.100:/home/tekkaman/development/share/u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/u-boot.bin'.
Load address: 0x30008000
Loading: ###################################################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# tftp u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: T ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# dhcp 192.168.1.100:u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.1.101
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# bootp 192.168.1.100:u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.1.101
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# rarpboot 192.168.1.100:u-boot.bin

我的路由器沒有開rarp協議,所以rarpboot 無法使用,要使用dhcp或 bootp 也是要路由或Host支持的。 

(5)Nand Flash操作指令

常用的Nand Flash指令如下:

指令

功能

nand info 顯示可使用的Nand Flash
nand device [dev] 顯示或設定當前使用的Nand Flash
nand read
addr off
size
Nand Flash讀取命令,從Nand off 偏移地址處讀取size 字節的數據到SDRAM addr地址。
nand write
addr off
size
Nand Flash燒寫命令,將SDRAM addr地址處的size 字節的數據燒寫到Nand off 偏移地址。
nand write[.yaffs[1]]
addr off size
燒寫yaffs 映像專用的命令,.yaffs1 for 512+16 NAND
nand erase [clean] [off size] Nand Flash檫除命令,擦除Nand Flash off 偏移地址處的size 字節的數據
nand bad 顯示Nand Flash的壞塊
nand dump[.oob] off 顯示Nand Flash中的數據(16進制)
nand scrub 徹底擦除整塊Nand Flash中的數據,包括OOB。可以擦除軟件壞塊標誌。
nand markbad off 標示 Nand off 偏移地址處的塊爲壞塊

使用範例:
  
[u-boot@MINI2440]# nand info

Device 0: NAND 128MiB 3,3V 8-bit, sector size 128 KiB
[u-boot@MINI2440]# nand device 0
Device 0: NAND 128MiB 3,3V 8-bit... is now current device
[u-boot@MINI2440]# nand read 0x30008000 0x60000 200000

NAND read: device 0 offset 0x60000, size 0x200000
2097152 bytes read: OK
[u-boot@MINI2440]# nand bad

Device 0 bad blocks:
  030a0000
  030c0000
  030e0000
  07ee0000
[u-boot@MINI2440]# nand markbad 0x500000
block 0x00500000 successfully marked as bad
[u-boot@MINI2440]# nand bad 

Device 0 bad blocks:
  00500000
  030a0000
  030c0000
  030e0000
  07ee0000
[u-boot@MINI2440]# nand scrub

NAND scrub: device 0 whole chip
Warning: scrub option will erase all factory set bad 
         There is no reliable way to recover them.
         Use this command only for testing purposes if you
         are sure of what you are 

Really scrub this NAND flash? <y/N>
Erasing at 0x2f4000008000000 -- 0% complete.
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5

NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5

NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5
Erasing at 0x7ea000008000000 -- 0% complete.
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5
Erasing at 0x7fe000008000000 -- 0% complete.
OK
[u-boot@MINI2440]# nand bad

Device 0 bad blocks:
  030a0000
  030c0000
  030e0000
  07ee0000
[u-boot@MINI2440]# nand dump 0x8000
Page 00008000 dump:
    ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
         ()
OOB:
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
[u-boot@MINI2440]# tftp u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: T ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# nand write 0x30008000 0 40000

NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK
[u-boot@MINI2440]# nand dump 0x8000
Page 00008000 dump:
    00 00 53 e1 01 00 00 2a 15 40 e0 e3 19 00 00 ea
         ()
    60 30 97 e5 03 00 54 e1 f6 ff ff ba 00 40 a0 e3
OOB:
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    ff ff ff ff ff ff ff ff
    65 a9 6b f3 ff 33 fc 30
    f3 33 cf 33 0f f0 ff 00
    cc 0f 59 55 57 96 a5 5b


    nboot 指令也是一條Nand Flash 讀取指令,它是將Nand Flash 的 offset 偏移地址的內核映像讀取到SDRAM的loadAddr位置。它會自動讀取到內核映像(使用mkimage處理過的)的結束,所以不用給出讀取大小。
格式:nboot  loadAddr  dev  offset
使用範例:
[u-boot@MINI2440]# tftp 192.168.1.100:zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################
     #################################################################
     ##########################
done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# nand erase 0x100000 300000

NAND erase: device 0 offset 0x100000, size 0x300000
Erasing at 0x3e000001800000 -- 0% complete.
OK
[u-boot@MINI2440]# nand write 0x30008000 0x100000 300000

NAND write: device 0 offset 0x100000, size 0x300000
Writing at 0x3e000000020000 -- 100% is complete. 3145728 bytes written: OK
[u-boot@MINI2440]# nand device 0
Device 0: NAND 128MiB 3,3V 8-bit... is now current device
[u-boot@MINI2440]# nboot 30008000 0 0x100000

Loading from NAND 128MiB 3,3V 8-bit, offset 0x100000
   Image Name: tekkaman
   Created: 2010-03-29 12:59:51 UTC
   Image Type: ARM Linux Kernel Image (uncompressed)
   Data Size: 2277476 Bytes = 2.2 MB
   Load Address: 30008000
   Entry Point: 30008040

[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...
   Image Name: tekkaman
   Created: 2010-03-29 12:59:51 UTC
   Image Type: ARM Linux Kernel Image (uncompressed)
   Data Size: 2277476 Bytes = 2.2 MB
   Load Address: 30008000
   Entry Point: 30008040
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.(tekkaman@MAGI-Linux) (gcc version 4.3.2(crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)


四、U-boot的使用(三)

(6) 內存/寄存器操作指令

nm      修改內存值 (指定地址)    
格式: nm [.b, .w, .l] address


mm     修改內存值(地址自動加一)
格式:  mm [.b, .w, .l] address


md       顯示內存值
格式:  md [.b, .w, .l] address [# of objects]


mw     用指定的數據填充內存
格式:  mw [.b, .w, .l] address value [count]


cp      內存的拷貝(包括內存與Nor Flash間的數據拷貝)
格式:cp [.b, .w, .l] source target count


上面是查看和修改內存值的指令,可以查看和修改SDRAM和寄存器值。
[.b, .w, .l]代表了查看和修改形式:bit、word、long
使用範例:


[u-boot@MINI2440]# md.b 0x30008000 20
30008000: cc 33 fe 33 cc b3 4c 33 ac 33 de 33 5c 13 cc 33 .3.3..L3.3.3\..3
30008010: cc 32 cc 31 dc 33 cf 33 cc 33 4e 33 8f 13 cc 33 .2.1.3.3.3N3...3
[u-boot@MINI2440]# md.w 0x30008000 20
30008000: 33cc 33fe b3cc 334c 33ac 33de 135c 33cc .3.3..L3.3.3\..3
30008010: 32cc 31cc 33dc 33cf 33cc 334e 138f 33cc .2.1.3.3.3N3...3
30008020: 338c 33cd 33cc 7bcc 3bcc 33cc 135e 734c .3.3.3.{.;.3^.Ls
30008030: 7bdc 37cc 31dc 33c4 038c 33e8 77cc 13cc .{.7.1.3...3.w..
[u-boot@MINI2440]# md.l 0x30008000 20
30008000: 33fe33cc 334cb3cc 33de33ac 33cc135c .3.3..L3.3.3\..3
30008010: 31cc32cc 33cf33dc 334e33cc 33cc138f .2.1.3.3.3N3...3
30008020: 33cd338c 7bcc33cc 33cc3bcc 734c135e .3.3.3.{.;.3^.Ls
30008030: 37cc7bdc 33c431dc 33e8038c 13cc77cc .{.7.1.3...3.w..
30008040: 234c77ce 33dc339c 33ec3ece f3cc36ec .wL#.3.3.>.3.6..
30008050: 37dc33cc 73cc3f5c 17dd314c 33cc62e8 .3.7\?.sL1...b.3
30008060: b6cc33dc 33c233cc 33cc32cc 33cc3f68 .3...3.3.2.3h?.3
30008070: 73cc31cc b3cc33cc 33cc37c9 33df13cc .1.s.3...7.3...3
[u-boot@MINI2440]# nm 0x30008000
30008000: 33fe33cc ? 12345678
30008000: 12345678 ? 34567890
30008000: 34567890 ? q
[u-boot@MINI2440]# nm.b 0x30008000
30008000: 90 ? 11
30008000: 11 ? 12
30008000: 12 ? q
[u-boot@MINI2440]# mm 0x30008000
30008000: 34567812 ? 54321123
30008004: 334cb3cc ? 12345678
30008008: 33de33ac ? 21234543
3000800c: 33cc135c ? q
[u-boot@MINI2440]# md.b 0x30008000 20
30008000: 23 11 32 54 78 56 34 12 43 45 23 21 5c 13 cc 33 #.2TxV4.CE#!\..3
30008010: cc 32 cc 31 dc 33 cf 33 cc 33 4e 33 8f 13 cc 33 .2.1.3.3.3N3...3
[u-boot@MINI2440]# mw.b 0x30008000 aa 10
[u-boot@MINI2440]# mw.b 0x30008010 55 10
[u-boot@MINI2440]# md.b 0x30008000 20
30008000: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................
30008010: 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 UUUUUUUUUUUUUUUU
[u-boot@MINI2440]# cp.b 0x30008000 0x30008010 10
[u-boot@MINI2440]# md.b 0x30008000 20
30008000: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................
30008010: aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ................


你可以試着修改LED相連的GPIO寄存器的數據寄存器值,可以控制LED的點亮!
先熄滅後點亮LED1的範例:(這個實驗要結合芯片數據手冊和mini2440的原理圖來理解)
[u-boot@MINI2440]# md 0x56000014 1
56000014: 00000600 ....
[u-boot@MINI2440]# nm.w 0x56000014 
56000014: 0600 ? 620 (熄滅)
56000014: 0620 ? 600 (點亮)


(7) Nor Flash指令

Nor Flash 的命令經常用於燒寫數據到Nor Flash 。

flinfo  打印Flash存儲器的信息,並列出所有Sector。
flinfo  N 單獨打Flash存儲器N Block的信息。(在有多塊Nor Flash時使用)

使用範例:

[u-boot@MINI2440]# flinfo

Bank # 1: SST: 1x SST39VF1601 (2MB)
  Size: 2 MB in 32 Sectors
  Sector Start Addresses:
    00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
    00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
    000A0000 000B0000 000C0000 000D0000 000E0000
    000F0000 00100000 00110000 00120000 00130000
    00140000 00150000 00160000 00170000 00180000
    00190000 001A0000 001B0000 001C0000 001D0000
001E0000 001F0000
[u-boot@MINI2440]# flinfo 1

Bank # 1: SST: 1x SST39VF1601 (2MB)
  Size: 2 MB in 32 Sectors
  Sector Start Addresses:
    00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
    00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
    000A0000 000B0000 000C0000 000D0000 000E0000
    000F0000 00100000 00110000 00120000 00130000
    00140000 00150000 00160000 00170000 00180000
    00190000 001A0000 001B0000 001C0000 001D0000
    001E0000 001F0000
[u-boot@MINI2440]# flinfo 2
Only FLASH Banks # 1 ... # 1 supported


後面帶有(RO)的說明這個Sector已經寫保護了。

因爲Nor Flash的讀取接口和SDRAM是一樣的,所以Nor Flash的讀取也是使用md命令。範例如下:
[u-boot@MINI2440]# md.b 0x0 20
00000000: 12 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
00000010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
[u-boot@MINI2440]# md 0x0 20
00000000: ea000012 e59ff014 e59ff014 e59ff014 ................
00000010: e59ff014 e59ff014 e59ff014 e59ff014 ................
00000020: 33f80260 33f802c0 33f80320 33f80380 `..3.....3...3
00000030: 33f803e0 33f80440 33f804a0 deadbeef ...3@..3...3....
00000040: 33f80000 33f80000 33fbe8dc 3400374c ...3...3...3L7.4
00000050: e10f0000 e3c0001f e38000d3 e129f000 ..............).
00000060: e3a00453 e3a01000 e5801000 e3e01000 S...............
00000070: e59f0488 e5801000 e59f1484 e59f0484 ................



    但由於Nor Flash的燒寫時序和SDRAM的寫入不同,燒寫Nor  Flash 不能使用mm等命令,只能使用cp命令從內存拷貝到Nor Flash,而且燒寫之前必須解除保護並擦除!命令如下:

protect :對Flash 寫保護的操作,可以使能和解除寫保護。
格式:
protect on/off start end 
protect on/off start +end 
protect on/off N:SF[-SL] 
protect on/off bank N 
protect on/off all 


第1 個參數on 代表使能寫保護;off 代表解除寫保護。
第2 、3 參數是指定Flash 寫保護操作範圍


start end是照起始地址和結束地址定義範圍,start是擦除塊的起始地址;end 是擦除末尾塊的結束地址。
例如:擦除Sector 2和Sector 3區域命令爲erase 20000 3ffff 。 

start +end是照起始地址和操作字節數定義範圍,這種方式最常用。start是擦除塊的起始地址;end 是擦除的字節數。
例如:擦除Sector 2和Sector 3區域命令爲erase 20000  +20000

N:SF[-SL]是按照組和扇區,N 表示Flash 的Block號,SF 表示擦除起始Sector號,SL 表示擦除結束Sector號。
例如:擦除Block1 的Sector 2和Sector 3區域命令爲erase 1:2-3。

bank N是擦除整個Block,擦除Block號爲N 的整個Flash。

all是擦除全部Flash。

注意:Nor Flash擦除的最小單位是Sector,也就是0x10000字節,如果你定義的大小不滿1 Sector或超過Sector的邊界,那麼被定義到的Sector會被全部擦除。
erase  :擦除Flash的命令
格式:
erase start end 
erase start +end 
erase N:SF[-SL] 
erase bank N 
erase all 
參數是指定Flash 擦除操作範圍,跟寫保護的方式相同。


以下的範例將mini2440的Nor Flash的Sector 16寫保護,再解除保護,擦除數據,最後將起始的20字節拷貝到Sector 16。

[u-boot@MINI2440]# flinfo 1

Bank # 1: SST: 1x SST39VF1601 (2MB)
  Size: 2 MB in 32 Sectors
  Sector Start Addresses:
    00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
    00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
    000A0000 000B0000 000C0000 000D0000 000E0000
    000F0000 00100000 00110000 00120000 00130000
    00140000 00150000 00160000 00170000 00180000
    00190000 001A0000 001B0000 001C0000 001D0000
001E0000 001F0000
[u-boot@MINI2440]# protect on 1:16-16
Protect Flash Sectors 16-16 in Bank # 1
[u-boot@MINI2440]# flinfo 1

Bank # 1: SST: 1x SST39VF1601 (2MB)
  Size: 2 MB in 32 Sectors
  Sector Start Addresses:
    00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
    00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
    000A0000 000B0000 000C0000 000D0000 000E0000
    000F0000 00100000 (RO) 00110000 00120000 00130000
    00140000 00150000 00160000 00170000 00180000
    00190000 001A0000 001B0000 001C0000 001D0000
    001E0000 001F0000
[u-boot@MINI2440]# protect off 0x100000 0x10ffff
Un-Protect Flash Sectors 16-16 in Bank # 1
[u-boot@MINI2440]# flinfo 1

Bank # 1: SST: 1x SST39VF1601 (2MB)
  Size: 2 MB in 32 Sectors
  Sector Start Addresses:
    00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000
    00050000 00060000 (RO) 00070000 (RO) 00080000 00090000
    000A0000 000B0000 000C0000 000D0000 000E0000
    000F0000 00100000 00110000 00120000 00130000
    00140000 00150000 00160000 00170000 00180000
    00190000 001A0000 001B0000 001C0000 001D0000
    001E0000 001F0000
[u-boot@MINI2440]# erase 0x100000 +20
Erasing sector 16 ... ok.
Erased 1 sectors
[u-boot@MINI2440]# cp.b 0x0 0x100000 0x20
Copy to Flash... done
[u-boot@MINI2440]# md.b 100000 20
00100000: 12 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................
00100010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ................


(8) USB 操作指令


指令

功能

usb reset 初始化USB控制器
usb stop [f] 關閉USB控制器
usb tree 已連接的USB設備樹
usb info [dev] 顯示USB設備[dev]的信息
usb storage 顯示已連接的USB存儲設備
usb dev [dev] 顯示和設置當前USB存儲設備
usb part [dev] 顯示USB存儲設備[dev]的分區信息
usb read addr blk# cnt 讀取USB存儲設備數據


在所有的命令使用前,必須先插入USB設備,然後使用:usb reset,以初始化USB控制器,獲取設備信息。

我將一個4G的kingstonU盤(可引導盤)插入 mini2440,然後讀取他的頭512 字節(MBR): 
[u-boot@MINI2440]# usb reset
(Re)start USB...
USB: scanning bus for devices... 2 USB Device(s) found
       scanning bus for storage devices... 1 Storage Device(s) found
[u-boot@MINI2440]# usb tree

Device Tree:
  1 Hub (12 Mb/s, 0mA)
  | OHCI Root Hub
  |
  +-2 Mass Storage (12 Mb/s, 100mA)
       Kingston DT 101 II 0019E02CB6EB5B8B1B120051

[u-boot@MINI2440]# usb info
1: Hub, USB Revision 1.10
- OHCI Root Hub
- Class: Hub
- PacketSize: 8 Configurations: 1
- Vendor: 0x0000 Product 0x0000 Version 0.0
   Configuration: 1
   - Interfaces: 1 Self Powered 0mA
     Interface: 0
     - Alternate Setting 0, Endpoints: 1
     - Class Hub
     - Endpoint 1 In Interrupt MaxPacket 2 Interval 255ms

2: Mass Storage, USB Revision 2.0
- Kingston DT 101 II 0019E02CB6EB5B8B1B120051
- Class: (from Interface) Mass Storage
- PacketSize: 64 Configurations: 1
- Vendor: 0x0951 Product 0x1613 Version 1.0
   Configuration: 1
   - Interfaces: 1 Bus Powered 100mA
     Interface: 0
     - Alternate Setting 0, Endpoints: 2
     - Class Mass Storage, Transp. SCSI, Bulk only
     - Endpoint 1 In Bulk MaxPacket 64
     - Endpoint 2 Out Bulk MaxPacket 64

[u-boot@MINI2440]# usb storage
  Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II
            Type: Removable Hard Disk
            Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)
[u-boot@MINI2440]# usb dev 0

USB device 0:
    Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II
            Type: Removable Hard Disk
            Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)
... is now current device
[u-boot@MINI2440]# usb part 0
print_part of 0

Partition Map for USB device 0 -- Partition Type: DOS

Partition Start Sector Num Sectors Type
    4 63 7935937 c
[u-boot@MINI2440]# usb read 0x30008000 0 200

USB read: device 0 block # 0, count 512 ... .........................
512 blocks read: OK
[u-boot@MINI2440]# md.b 0x30008000 200

30008000: fa 31 c0 8e d8 8e c0 8e d0 bc 00 7c fb fc 89 e6
.1.........|....

30008010: bf 00 06 b9 00 01 f3 a5 ea dc 06 00 00 10 00 01
................

30008020: 00 00 7c 00 00 00 00 00 00 00 00 00 00 80 3f 00
..|...........?.

30008030: ff 00 ed 01 1e 0e 1f 3a 16 10 00 74 06 1f ea 36
.......:...t...6

30008040: e7 00 f0 3d fb 54 75 05 8c d8 fb eb 1d 80 fc 08
...=.Tu.........

30008050: 75 1b e8 81 00 8a 36 13 00 fe ce 8b 0e 15 00 86
u.....6.........

30008060: cd c0 e1 06 0a 0e 11 00 31 c0 f8 eb 65 80 fc 02
........1...e...

30008070: 72 cb 80 fc 04 77 c6 60 80 cc 40 50 be 00 00 c7
r....w.`..@P....

30008080: 04 10 00 30 e4 89 44 02 89 5c 04 8c 44 06 66 31
...0..D..\..D.f1

30008090: c0 66 89 44 0c 88 f0 f6 26 11 00 88 cf 88 eb c0
.f.D....&.......

300080a0: ef 06 81 e1 3f 00 01 c8 48 89 c7 a1 13 00 f7 26
....?...H......&

300080b0: 11 00 f7 e3 01 f8 81 d2 00 00 89 44 08 89 54 0a
...........D..T.

300080c0: 58 30 c0 8a 16 10 00 e8 0c 00 88 26 03 00 61 a1
X0.........&..a.

300080d0: 02 00 1f ca 02 00 9c ff 1e 22 00 c3 80 fa 8f 7f
........."......

300080e0: 04 88 16 2d 06 be 87 07 e8 8d 00 be be 07 31 c0
...-..........1.

300080f0: b9 04 00 f6 04 80 74 03 40 89 f5 81 c6 10 00 e2
......t.@.......

30008100: f2 48 74 02 cd 18 bf 05 00 be 1d 06 c7 44 02 01
.Ht..........D..

30008110: 00 66 8b 46 08 66 89 44 08 b8 00 42 8a 16 2d 06
.f.F.f.D...B..-.

30008120: cd 13 73 0d 4f 74 49 30 e4 8a 16 2d 06 cd 13 eb
..s.OtI0...-....

30008130: d8 a1 fe 7d 3d 55 aa 75 37 fa 66 a1 4c 00 66 a3
...}=U.u7.f.L.f.

30008140: 3f 06 be 13 04 8b 04 48 89 04 c1 e0 06 8e c0 31
?......H.......1

30008150: ff be 1d 06 b9 60 00 fc f3 a5 c7 06 4c 00 17 00
.....`......L...

30008160: a3 4e 00 fb 8a 16 2d 06 89 ee fa ea 00 7c 00 00
.N....-......|..

30008170: be aa 07 e8 02 00 eb fe ac 20 c0 74 09 b4 0e bb
......... .t....

30008180: 07 00 cd 10 eb f2 c3 53 74 61 72 74 20 62 6f 6f
.......Start boo

30008190: 74 69 6e 67 20 66 72 6f 6d 20 55 53 42 20 64 65
ting from USB de

300081a0: 76 69 63 65 2e 2e 2e 0d 0a 00 42 6f 6f 74 20 66
vice......Boot f

300081b0: 61 69 6c 65 64 00 00 00 ea eb d4 ca 00 00 00 00
ailed...........

300081c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................

300081d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................

300081e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01
................

300081f0: 01 00 0c fe 7f ec 3f 00 00 00 c1 17 79 00 55 aa
......?.....y.U.


(9) SD卡(MMC)指令


SD卡的使用命令比較簡單,只有初始化和設備信息的顯示,讀寫是通過文件系統命令實現的。
mmc init [dev] - 初始化MMC子系統
mmc device [dev] - 查看和設置當前設備
使用和USB類似,在所有的命令使用前,必須先插入SD卡,然後使用:mmc init,以初始化MMC 控制器,獲取設備信息。
我在mini2440中插入1GB SD卡:

[u-boot@MINI2440]# mmc init
mmc: Probing for SDHC ...
mmc: SD 2.or later card found
trying to detect SD Card...
Manufacturer: 0x00, OEM "roduct name: "
", revision 0.0

Serial number:
7864775

Manufacturing date: 11/2006
CRC:
0x4f, b0 = 1

READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095
size = 0
SD Card detected RCA: 0x2 type: SD
mmc1 is available
[u-boot@MINI2440]# mmc device
mmc1 is current device


(10) FAT文件系統指令

fatinfo:顯示文件系統的相關信息
格式:fatinfo <interface> <dev[:part]>
Interface:代表接口,如usb、mmc;
dev:代表設備編號,如0、1……;
part:代表存儲設備中的分區,如1、2……。

fatload:從FAT32文件系統中讀取二進制文件到SDRAM。
格式:fatload <interface> <dev[:part]>  <addr> <filename> [bytes]
Interface、dev和part同上;
addr:代表寫入SDRAM的地址;
filename:代表存儲設備中的文件名;
bytes:代表從存儲設備中讀取的文件大小,可不填;如果填的數據比文件小,就只讀取bytes字節,如果填的數據比文件大,也只讀取文件的大小。

fatls:列出FAT32文件系統中目錄裏的文件。
格式:fatls <interface> <dev[:part]> [directory]
Interface、dev和part同上;
directoryr:代表所要查看的目錄,可不填,默認爲/。

這些指令基本上要和U盤或者SD卡同時使用,主要用於讀取這些移動存儲器上的FAT32分區。
使用範例:

[u-boot@MINI2440]# usb part 0
print_part of 0

Partition Map for USB device 0 -- Partition Type: DOS

Partition Start Sector Num Sectors Type
    4 63 7935937 c
[u-boot@MINI2440]# fatinfo usb 0:4
Interface: USB
  Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II
            Type: Removable Hard Disk
            Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)
Partition 4: Filesystem: FAT32 "7600_16385_"
[u-boot@MINI2440]# fatls usb 0:4
            boot/
            efi/
            sources/
            support/
            upgrade/
       43 autorun.inf
   383562 bootmgr
   111880 setup.exe
   256220 u-boot.bin

file(s), 5 dir(s)

[u-boot@MINI2440]# fatls usb 0:/boot/
            ./
            ../
            fonts/
            zh-cn/
   262144 bcd
  3170304 boot.sdi
     1024 bootfix.bin
    97280 bootsect.exe
     4096 etfsboot.com
   485440 memtest.exe

file(s), 4 dir(s)
[u-boot@MINI2440]# fatload usb 0:4 0x30008000 u-boot.bin
reading u-boot.bin
........................

256220 bytes read
[u-boot@MINI2440]# fatload usb 0:4 0x30008000 u-boot.bin 200
reading u-boot.bin

512 bytes read

(11) 系統引導指令

boot  和bootd  都是運行ENV”bootcmd”中指定的指令。

bootm 指令是專門用於啓動在SDRAM中的用U-boot的mkimage工具處理過的內核映像。
格式:bootm [addr [arg ...]]
addr 是內核映像所在的SDRAM中的地址
當啓動的是Linux內核時,'arg' 可以使 initrd 的地址。

[u-boot@MINI2440]# setenv bootcmd tftp\;bootm
[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 -- 0% complete.
Writing to Nand... done
[u-boot@MINI2440]# boot
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################
     #################################################################
     ##########################
done
Bytes transferred = 2277540 (22c0a4 hex)
## Booting kernel from Legacy Image at 30008000 ...
   Image Name: tekkaman
   Created: 2010-03-29 12:59:51 UTC
   Image Type: ARM Linux Kernel Image (uncompressed)
   Data Size: 2277476 Bytes = 2.2 MB
   Load Address: 30008000
   Entry Point: 30008040
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.(tekkaman@MAGI-Linux) (gcc version 4.3.2(crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)


U-Boot 2009.11 ( 4月 04 2010 - 12:09:25)

modified by tekkamanninja (tekkamanninja@163.com)
Love Linux 

I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 128 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
Net: dm9000
U-Boot 2009.11 ( 4月 04 2010 - 12:09:25)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux 
Hit any key to stop autoboot: 0
[u-boot@MINI2440]# bootd
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################
     #################################################################
     ##########################
done
Bytes transferred = 2277540 (22c0a4 hex)
## Booting kernel from Legacy Image at 30008000 ...
   Image Name: tekkaman
   Created: 2010-03-29 12:59:51 UTC
   Image Type: ARM Linux Kernel Image (uncompressed)
   Data Size: 2277476 Bytes = 2.2 MB
   Load Address: 30008000
   Entry Point: 30008040
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK

Starting kernel ...
(略)


12)EEPROM 讀寫指令eeprom  - I2C 接口的EEPROM 讀寫指令
格式:
eeprom read  addr off cnt
eeprom write addr off cnt
第一個參數addr 是要寫入或讀出的數據在SDRAM中的存放地址;
第二個參數off 是在EEPROM中的偏移;
第三個參數cnt 是讀寫的數據字節數。
使用範例:
[u-boot@MINI2440]# md.b 0x30008000 2
30008000: aa aa ..
[u-boot@MINI2440]# eeprom read 0x30008000 10 2

EEPROM @0x50 read: addr 30008000 off 0010 count 2 ... done
[u-boot@MINI2440]# md.b 0x30008000 2
30008000: ff ff ..
[u-boot@MINI2440]# mm.b 0x30008000
30008000: ff ? aa
30008001: ff ? 55
30008002: aa ? q
[u-boot@MINI2440]# md.b 0x30008000 2
30008000: aa 55 .U
[u-boot@MINI2440]# eeprom write 0x30008000 10 2

EEPROM @0x50 write: addr 30008000 off 0010 count 2 ... done
[u-boot@MINI2440]# eeprom read 0x30008010 10 2

EEPROM @0x50 read: addr 30008010 off 0010 count 2 ... done
[u-boot@MINI2440]# md.b 0x30008010 2
30008010: aa 55 .U


(13)設置和讀取RTC指令

date    - 設置和讀取RTC
格式:
date [MMDDhhmm[[CC]YY][.ss]]
MM:月份
DD:日期
hh:小時
mm 分鐘
CC:年份的前兩個數字
YY:年份的後兩個數字
ss:秒數
使用範例:

[u-boot@MINI2440]# date
Date: 1980-00-06 (Thursday) Time: 20:30:25
[u-boot@MINI2440]# date 041100582010.20
Date: 2010-04-11 (Sunday) Time: 0:58:20

(14)腳本運行指令

run var [...]
var :ENV中的腳本名 
使用範例:

[u-boot@MINI2440]# setenv a_run_test echo $bootfile \; version
[u-boot@MINI2440]# run a_run_test
zImage.img

U-Boot 2009.11 ( 4&aelig;&#339;&#710; 04 2010 - 12:09:25)

(15)系統重啓指令

reset
重啓CPU

[u-boot@MINI2440]# reset
resetting ...


U-Boot 2009.11 ( 4&aelig;&#339;&#710; 04 2010 - 12:09:25)

modified by tekkamanninja (tekkamanninja@163.com)
Love Linux 

I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 128 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
Net: dm9000
U-Boot 2009.11 ( 4&aelig;&#339;&#710; 04 2010 - 12:09:25)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux 
Hit any key to stop autoboot: 0
[u-boot@MINI2440]#



四、U-boot的使用(四)

下載與燒寫

使用U-boot將映像文件燒寫到板上的Flash,一般步驟是:
(1)通過網絡、串口、U盤、SD卡等方式將文件傳輸到SDRAM;
(2)使用Nand Flash或Nor Flash相關的讀寫命令將SDRAM中的數據燒入Flash。

下面是燒寫範例:
如果使用 SD卡和U盤形式更新U-boot,那麼首先SD卡和U盤中必須有FAT32文件系統,並在裏面存放了u-boot.bin 文件。
1) 通過SD卡燒入Nand Flash:

[u-boot@MINI2440]# mmc init
mmc: Probing for SDHC ...
mmc: SD 2.0 or later card found
trying to detect SD Card...
Manufacturer:
0x00, OEM "roduct name:
"
", revision 0.0

Serial number:
7864775

Manufacturing date: 11/2006
CRC:
0x4f, b0 = 1

READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095
size = 0
SD Card detected RCA: 0x2 type: SD
mmc1 is available
[u-boot@MINI2440]# fatload mmc 1 0x30008000 u-boot.bin
reading u-boot.bin

256220 bytes read
[u-boot@MINI2440]# nand erase 0 0x40000

NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x2000000000004 --
0% complete.

OK
[u-boot@MINI2440]# nand write 0x30008000 0 0x40000

NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK

2) 通過U盤燒入Nor Flash:
[u-boot@MINI2440]# usb start
(Re)start USB...
USB:
scanning bus for devices... 2 USB Device(s) found


scanning bus for storage devices... 1 Storage Device(s) found

[u-boot@MINI2440]# usb storage

Device 0
: Vendor: Kingston Rev: PMAP Prod: DT 101 II


Type: Removable Hard Disk


Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)

[u-boot@MINI2440]# usb part 0
print_part of 0

Partition Map for USB device 0
--
Partition Type: DOS


Partition
Start Sector
Num Sectors
Type



4


63

7935937
c


[u-boot@MINI2440]# fatload usb 0:4 0x30008000 u-boot.bin

reading u-boot.bin
........................

256220 bytes read
[u-boot@MINI2440]# protect off all
Un-Protect Flash Bank # 1
[u-boot@MINI2440]# erase 0x0 0x3ffff
Erasing sector
0 ... ok.

Erasing sector
1 ... ok.

Erasing sector
2 ... ok.

Erasing sector
3 ... ok.

Erased 4 sectors
[u-boot@MINI2440]# cp.b 0x30008000 0x0
0x3ffff

Copy to Flash... done

3) 通過TFTP服務燒入Nand Flash:
[u-boot@MINI2440]# tftpboot 30008000 192.168.1.100:u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: T ##################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# nand erase 0 0x40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x2000000000004 --
0% complete.

OK
[u-boot@MINI2440]# nand write 0x30008000 0 0x40000

NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK

4) 通過NFS 服務燒入Nand Flash:

[u-boot@MINI2440]# nfs 30008000 192.168.1.100:/home/tekkaman/development/share/u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/u-boot.bin'.
Load address: 0x30008000
Loading: ###################################################
done
Bytes transferred = 256220 (3e8dc hex)
[u-boot@MINI2440]# nand erase 0 0x40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x2000000000004 --
0% complete.

OK
[u-boot@MINI2440]# nand write 0x30008000 0 0x40000

NAND write: device 0 offset 0x0, size 0x40000
Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK


內核引導

內核的引導步驟如下:
(1)用U-boot的mkimage工具處理內核映像zImage。
(2)通過網絡、串口、U盤、SD卡等方式將處理過的內核映像傳輸到SDRAM的一定位置(一般使用0x30008000)
(3)然後使用”bootm"等內核引導命令來啓動內核。


爲什麼要U-bootmkimage工具處理內核映像zImage
因爲在用bootm命令引導內核的時候,bootm需要讀取一個64字節的文件頭,來獲取這個內核映象所針對的CPU體系結構、OS、加載到內存中的位置、在內存中入口點的位置以及映象名等等信息。這樣bootm才能爲OS設置好啓動環境,並跳入內核映象的入口點。而mkimage就是添加這個文件頭的專用工具。具體的實現請看U-bootbootm的源碼和mkimage的源碼
mkimage工具的使用:

參數說明:
-A 指定CPU的體系結構,可用值有:alphaarm
x86ia64mipsmips64ppc s390shsparc sparc64m68k

-O 指定操作系統類型,可用值有:openbsdnetbsdfreebsd4_4bsdlinuxsvr4esixsolarisirixscodellncrlynxosvxworkspsosqnxu-bootrtemsartos
-T 指定映象類型,可用值有:standalonekernelramdiskmultifirmwarescriptfilesystem
-C 指定映象壓縮方式,可用值有:
none
不壓縮(一般使用這個,因爲zImage是已經被bzip2壓縮過的自解壓內核

gzip gzip的壓縮方式
bzip2 bzip2的壓縮方式
-a 指定映象在內存中的加載地址,映象下載到內存中時,要按照用mkimage製作映象時,這個參數所指定的地址值來下載
-e
指定映象運行的入口點地址,這個地址就是-a參數指定的值加上0x40(因爲前面有個mkimage添加的0x40個字節的頭)
-n
指定映象名
-d 指定製作映象的源文件

以下是製作內核映像的命令示例:
mkimage -n 'tekkaman' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img


以下是使用範例:
1) 通過SD卡引導內核:
首先SD卡中必須有FAT32文件系統,並在裏面存放了處理過的內核映像文件。

[u-boot@MINI2440]# mmc init


mmc: Probing for SDHC ...
mmc: SD 2.0 or later card found
trying to detect SD Card...
Manufacturer:
0x00, OEM "roduct name:
"
", revision 0.0

Serial number:
7864775

Manufacturing date: 11/2006
CRC:
0x4f, b0 = 1

READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095
size = 0
SD Card detected RCA: 0x2 type: SD
mmc1 is available
[u-boot@MINI2440]# fatload mmc 1 30008000 zImage.img
reading zImage.img

2277540 bytes read
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...

Image Name:
tekkaman


Created:
2010-03-29
12:59:51 UTC


Image Type:
ARM Linux Kernel Image (uncompressed)


Data Size:
2277476 Bytes =
2.2 MB


Load Address: 30008000


Entry Point:
30008040


Verifying Checksum ... OK


XIP Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)


2) 通過TFTP服務引導內核:
[u-boot@MINI2440]# tftpboot 0x30008000 192.168.1.100:zImage.img 
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.101
Filename 'zImage.img'.
Load address: 0x30008000
Loading: T #################################################################


#################################################################



##########################

done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...

Image Name:
tekkaman


Created:
2010-03-29
12:59:51 UTC


Image Type:
ARM Linux Kernel Image (uncompressed)


Data Size:
2277476 Bytes =
2.2 MB


Load Address: 30008000


Entry Point:
30008040


Verifying Checksum ... OK


XIP Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)


3) 通過NFS服務引導內核:
[u-boot@MINI2440]# nfs 30008000 192.168.1.100:/home/tekkaman/development/share/zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/zImage.img'.
Load address: 0x30008000
Loading: #################################################################


#################################################################



#################################################################



#################################################################



#################################################################



#################################################################



#######################################################

done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...

Image Name:
tekkaman


Created:
2010-03-29
12:59:51 UTC


Image Type:
ARM Linux Kernel Image (uncompressed)


Data Size:
2277476 Bytes =
2.2 MB


Load Address: 30008000


Entry Point:
30008040


Verifying Checksum ... OK


XIP Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
(略)

4) 通過Nand Flash引導內核:
   首先要將處理過的內核映像文件燒入Nand Flash的一定位置(由內核分區表決定)。以後每次啓動時用Nand Flash的讀取命令先將這個內核映像文件讀到內存的一定位置(由製作內核映像時的-a參數決定),再使用bootm命令引導內核。

內核映像文件的燒入:

[u-boot@MINI2440]# nfs 30008000 192.168.1.100:/home/tekkaman/development/share/zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101
Filename '/home/tekkaman/development/share/zImage.img'.
Load address: 0x30008000
Loading: #################################################################


#################################################################



#################################################################



#################################################################



#################################################################



#################################################################



#######################################################

done
Bytes transferred = 2277540 (22c0a4 hex)
[u-boot@MINI2440]# nand erase 0x80000 0x300000

NAND erase: device 0 offset 0x80000, size 0x300000
Erasing at 0x36000001800000 --
0% complete.

OK
[u-boot@MINI2440]# 
nand write 30008000 0x80000 300000 


NAND write: device 0 offset 0x80000, size 0x300000

Writing at 0x36000000020000 -- 100% is complete. 3145728 bytes written: OK


內核引導: 

[u-boot@MINI2440]# 
nand read 30008000 0x80000 300000


NAND read: device 0 offset 0x80000, size 0x300000

3145728 bytes read: OK

[u-boot@MINI2440]# bootm 30008000
## Booting kernel from Legacy Image at 30008000 ...

Image Name:
tekkaman


Created:
2010-03-29
12:59:51 UTC


Image Type:
ARM Linux Kernel Image (uncompressed)


Data Size:
2277476 Bytes =
2.2 MB


Load Address: 30008000


Entry Point:
30008040


Verifying Checksum ... OK


XIP Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章