4.uboot的常用命令2


4.1.網絡測試指令:ping
(1)用法:ping ipaddress。作用是測試開發板與主機直接的網絡連接。
(2)注意需要開發板需要插上網線,如果是測試ping通主機windows,則需設置主機windows電腦本地連接的IP地址和子網掩碼。
(3)確認uboot中的與網絡相關的環境變量是否正確,即ethaddr(網卡地址)、netmask(子網掩碼)、ipaddr(ip地址)等,最重要的是ipaddr地址,該ipaddr必須與主機windows的IP地址處於同一網段。
(4)網段的概念:一個IP地址分爲2部分,一部分是網段地址,另一部分是網段內的主機地址(由子網掩碼來區分哪一部分是網段地址,哪一部分是主機地址)。在子網掩碼是255.255.255.0的情況下,192.168.1.10這個IP地址的前三部分(192.168.1.)屬於網段地址,第4部分(10)屬於主機地址。


4.2.開發板linux下ping主機windows
(1)進入開發板linux命令行終端下,使用ifconfig eth0 192.169.1.20命令設置linux系統的IP地址(後續固定各系統IP地址如下:主機windows地址192.168.1.10;開發板uboot或linux地址192.168.1.20;虛擬機ubuntu地址192.168.1.30)。
(2)固定設置主機windows電腦本地連接的IP地址爲192.168.1.10和子網掩碼爲192.168.1.1。
(3)從開發板linux下ping通windos主機成功;從windos命令行(cmd)下ping開發板linux成功。
(4)測試成功表明開發板和主機的網絡部分硬件都是好的;兩者中間網絡連接即網線也是好的;主機windows中的網絡軟件設置是好的。


4.3.開發板linux下ping虛擬機ubuntu
(1)虛擬機ubuntu下網卡設置有幾種方式,常用爲NAT(外網只可見widows,ubuntu不可見,即只有1臺電腦)和Bridge(外網可見windows和ubuntu,即有兩臺電腦)。
(2)虛擬機ubuntu要與開發板通信,必須通過橋接方式,並且必須橋接到有線本地網卡,因爲開發板是通過有線本地網卡連接電腦的。
(3)設置虛擬機ubuntu中網絡連接方式爲橋接到有線本地網卡,設置虛擬機ubuntu的IP地址爲192.168.1.30即可(可通過/etc/network/interfaces文件來設置靜態IP然後重啓;也可以直接命令行ifconfig去設置)。
(4)從開發板linux下ping通虛擬機ubuntu成功;從虛擬機ubuntu下ping開發板linux成功。
(5)測試成功表明開發板和主機的網絡部分硬件都是好的;兩者中間網絡連接即網線也是好的;虛擬機ubuntu中的網絡軟件設置是好的。


4.4.開發板uboot下ping主機windows和虛擬機ubuntu
(1)在開發板uboot下設置IP地址爲192.168.1.20,設置網關爲192.168.1.1。
(2)經過實測大部分時候開發板uboot可ping通wondows和虛擬機ubuntu,但有少數時候無法ping通,並且windos與虛擬機ubuntu不能相互ping通。
(3)注意從windos下或虛擬機ubuntu下是無法ping通開發板uboot的,因爲uboot爲裸機程序,是不會時刻監視網卡的。
(4)假如開發板運行linux,則其與windows、虛擬機ubuntu三者均可相互ping通,非常暢通。


4.5.tftp下載指令:tftp
(1)uboot的主要目標是啓動內核,爲了完成啓動內核必須要能夠部署內核,部署內核即將內核鏡像從主機(windows或ubuntu)中下載過來然後燒錄到本地Flash中。目前uboot中主流的下載方式爲tftp和fastboot兩種。tftp是通過有線網絡傳輸數據,比較典型;fastboot是通過usb線傳輸數據,是近些年發展起來的。
(2)tftp方式下載時uboot實際是tftp客戶端,主機實際是tftp服務器。我們需在主機下搭建tftp服務器,然後將鏡像文件放置於tftp的下載目錄中,在開發板下的uboot中通過tftp命令即可下載鏡像文件。
(3)可在windows或linux搭建tftp服務器,在windows下搭建一般使用一些軟件如tftpd32(見圖1),在linux下搭建可參考《嵌入式開發環境搭建-基於14.04》教程或上網搜索。我的虛擬機搭建tftp服務器設置的下載目錄是/home/gec/tftpboot,即可將需要下載的文件放置該目錄下。
(4)在開發板上運行uboot,檢查uboot中的serverip(即tftp服務器IP地址,serverip=192.168.1.10)必須與虛擬機中的IP地址一致;從開發板uboot上ping虛擬機主機確保網絡暢通(host 192.168.1.30 is alive);將待下載的文件放置下載目錄/home/gec/tftpboot
下;在開發板uboot下運行tftp 0x300000000 xxx即可(將xxx文件下載到開發板內存上的0x30000000處);檢查下載好的文件大小(Bytes transferred = 9 (0x9)即9個字節)與虛擬機下的文件大小是否相同判斷是否有下載錯誤(-rw-rw-r– 1 gec gec 9 Dec 29 05:15 hello即9個字節)。


4.6.nfs啓動內核命令:nfs
(1)uboot中也支持nfs命令,但是基本沒用過,如果需要使用則可參考《嵌入式開發環境搭建-基於14.04》教程或上網搜索。


4.7.SD卡/iNand操作指令movi
(1)若開發板使用SD卡/EMMC/iNand等作爲Flash外存設備,則在uboot中操作Flash的指令爲movi(或mmc);movi指令是一個命令集,有很多子命令,具體用法可使用help movi查看。
(2)movi命令集都是以movi read(讀取iNand的內容到DDR上)和movi write(將DDR中的內容寫入iNand中)爲一組的,注意涉及到DDR內存和iNand兩個硬件。
(3)movi read {u-boot | kernel} {addr};該命令使用了通用描述手法來描述:movi和read沒有任何標記表明每次使用該指令是必選的;大括號{}表明括起來的部分必選一個;豎線|表明多選一;中括號[]表明是可選參數,可以有也可以沒有。
(4)指令有很多種用法,譬如movi read u-boot 0x30000000;即將iNand中的u-boot分區讀出到DDR中的0x30000000起始位置處;uboot代碼中將iNand分成了多個分區,每個分區都有地址範圍和分區名,uboot程序操作中可通過分區名或直接地址來操作iNand分區;在uboot命令行中所有的數字都被默認當做16進制處理,所以這裏的0x30000000也可以直接寫作30000000。


4.8.NandFlash操作指令nand
(1)理解方法和操作方法完全類似於movi指令,當無法理解命令的具體意思時,可直接查看具體的uboot源碼進行分析。
(2)如何更新uboot:tftp 0x400000000 u-boot.bin;nand erase 0x0 0x100000(1MB);nand write 0x40000000 0x0 0x100000。
(3)使用uboot更新zImage:tftp 0x40000000 zImage;nand erase 0x600000 0x500000(5MB);nand write 0x40000000 0x600000 0x500000。
(4)使用uboot更新rootfs:tftp 0x40000000 rootfs.img;nand erase 0xe00000 0xf200000(242MB);nand write.yaffs 0x40000000 0xe00000 0xxxxx(0xxxx—>實際的下載大小,tftp的傳輸後的報告)。


4.9.內存操作指令:mm、mw、md
(1)DDR內存是沒有分區的,在使用內存時需要注意不能越界使用內存;uboot是裸機程序,其內存是分散可以隨便使用的,所以uboot的使用者必須自己注意不要自己把自己的數據給覆蓋掉了;在操作系統下系統會整體管理所有內存,系統會保證內存不會隨便越界。
(2)mm即memory display;顯示內存中的內容;md [.b, .w, .l] address [# of objects](譬如:md.b 30000000 10;即顯示10個字節的內容)。
(3)mw即memory write;將內容寫到內存中;mw [.b, .w, .l] address value [count](譬如:mw.b 30000000 88;即將0x88寫入到0x30000000地址中)。
(4)mm即memory modify;批量的逐個單元修改內存中的某一塊;mm [.b, .w, .l] address(譬如:mm.b 30000000,回車->輸數->輸入y結束;逐個更改內存中的內容)。


4.10.啓動內核指令:bootm、go
(1)uboot的終極目標就是啓動內核,啓動內核在uboot中表現爲一個指令,uboot命令行中調用這個指令就會啓動內核,uboot一旦調用這個指令不管內核啓動成功與否都回不來了。
(2)bootm啓動內核同時給內核傳參,bootm是正宗的啓動內核的命令,一般情況下我們都使用bootm。
(3)go啓動內核不傳參,go本來不是爲了啓動內核設計的,go的內部就是一個函數指針指向某個內存地址然後調用那個函數,go的實質是PC跳轉到某個內存地址去運行而已。go命令可以用來在uboot中執行任何的裸機程序,我們可以在uboot使用go命令調試裸機程序。


這裏寫圖片描述


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