06-在Uboot下升級固件— —MTK Uboot篇


時間:2019年7月17日22:02:00

在Uboot下升級固件:

         通常我們用的比較多的U-boot是:  BCM(博通)  ——》用CFE()

                                 QCA(高通)  ——》用U-boot(QCA固件的升級分  

                                          為kernel和rootfs。並且單獨使用tftpd去升級的)

                                 MTK(聯發科) ——》用U-boot(升級相對簡單)

主要講一下MTK的升級方法:

操作如下:

         在路由器主板上焊接TTL引腳,准備USB-TTL數據線一條(如PL2303),用的時候要把Vcc(紅色的線)剪掉,要不然會燒掉USB的。

         安裝串口、TFTP工具。

                   Ubuntu下,采用minicom、tftpd-hpa

                   Windows下,采用putty、tftpd32/64

虛擬機的設置:

        ① 虛擬機USB共享

         操作如下:

             在路由器主板上焊接TTL引腳,准備USB-TTL數據線一條(如PL2303)。

                 關閉Ubuntu16.04,在Oracle VM VirtualBox 管理器中點擊設置,如下:

             

             接着點擊USB設備

                 中的”添加一個USB賽選器”(根據自己的實際情況選擇USB)

             如下圖所示:

             

                 接着啟動Ubuntu。

                 在終端利用命令:dmesg

             查看電腦設備信息(但是這樣的話,我們很難找到自己想看到的設備信息)。

             如下:

             

                 所以,我們可以利用命令:dmesg l grep USB名稱

                         過濾掉自己不想看到的信息,即只留下自己想查看的信息。

             如下:

             

                 重新插上USB,利用命令:lsusb

                         查看USB是否被重定向到linux上,直到看到相關的USB信息為止。

             如下:

             

                 然后在利用命令:dmesg

                         查看設備的信息,可以發現在終端的底部出現USB的名字。

                                然后,利用命令:sudo apt-get install minicom

                     安裝minicom

                     如下:

                     

                                  接着,使用命令:sudo minicom –s

                          結果如下:

                          

                           設置波特率等信息。

                     操作如下(在沒有GUI的界面下操作):

                        進入configuration界面 — —》

                        選擇Serial port setup — —》(按E鍵)E — Bps/Par/Bits : 115200  8N1— —》

                        進入Comm  Parameters 中選擇(按B鍵) B:<prev> M: Even T:6

                        將Current:”115200  8N1” 中的115200降到57600— —》回到上一級目錄— —》

                        將A —  Serial Device :/dev/tty8修改為如下設置:

                         A —  Serial Device  :/dev/ttyUSB2.0

                        然后,回車保存並回到上一級目錄:configuration。並選擇:Save Setup as dfl

                        然后,回車,接着不久就會顯示信息:Configuration saved(並在不久后會消失)

                        接着,按ESC鍵退出。

                        會顯示如下信息:

                        

                        在該界面下繼續用命令:dmesg查看設備(板子)信息,但是必須確保你的電腦用燒寫線連接了開發板!

                        如下:

                        

                        :

                        :

                        :

                        利用命令cat /proc/cpuinfo

                        查看開發板相關信息如下:

                         

                        設置串口工具到此結束!                 

      ②tftpd-hpa和tftp的安裝:

        為了方便,相關軟件下載地址:http://forgotfun.org/zb_users/upload/2018/05/openwrt-lesson-06-tools.zip

        ubuntu下安裝tftpd-hpa的wiki地址 https://help.ubuntu.com/community/TFTP

        下載tftpd-hpa的操作如下:           

                    sudo apt-get install tftpd-hpa
       此時您所能做的就是從TFTP服務器下載文件。如果要上載到TFTP服務器,請繼續閱讀。首先,復制默認的tftpd-hpa配置文件。
       如下:
                    sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.ORIGINAL
       然后,編輯tftpd-hpa配置文件,
       如下:
                     sudo vi /etc/default/tftpd-hpa

       進入配置文件中可以看到:
                    tftpd-hpa的默認配置文件是/etc/default/tftpd-hpa.
                    存儲文件的默認根目錄是/var/lib/tftpboot.
                    但是,我不喜歡存儲文件的默認目錄是/var/lib/tftpboot。
                    所以,我把它的存儲目錄修改為:
                                  /tftpboot
                    如下:
                    
       在tftpd-hpa的配置文件中:
                    將
TFTP_OPTIONS="--secure"換成TFTP_OPTIONS="--secure --create",並保存文件並退出vi編輯器。

       修改對tftpd-hpa根目錄的訪問權限,
       如下:
                    sudo chown -R tftp /tftpboot
                    但是,要注意:
                          因為我們還沒有創建/tftpboot這個目錄。
                          所以,我們通過以下命令來創建該目錄。
                          如下:
                            sudo mkdir /tftpboot

       重新啟動tftpd-hpa服務器。要使更改生效,必須重新啟動tftpd-hpa服務。這可以通過執行以下命令來實現。
       如下:
                    sudo service tftpd-hpa restart
       此時,您應該擁有一個TFTP服務器,它允許您同時下載和上傳文件。
       注意:
          到這里為止,我們必須測試一下tftpboot這個目錄有沒有創建文件的權限!
          進入tftpboot目錄下,利用touch命令嘗試創建xxx文件。
          如果,終端出現
                  touch:無法創建'xxx':權限不夠
             的提示信息,則證明— —我們還沒有在tftpboot目錄下創建文件的權限!
             那么,我們就要“回到上一級目錄”把用戶組的權限修改為如下所示:
                                  sudo chmod -R 777 /tftpboot
             然后,在進入tftpboot目錄下,利用touch目錄創建xxx文件。
             這次就可以創建xxx文件了。
             接着,我們利用命令:
                        rm -rf xxx
                        刪除xxx文件
       為了測試我們前面的操作是否成功了,我們先下載tftp,
       如下:
          sudo apt-get install tftp
       下載完成后。我們把目錄/home/coco/project/openwrt.pro/lede/bin/targets/ramips/mt7620中的
                  openwrt-ramips-mt7620-bdcom_wap2100-sk-squashfs-sysupgrade.bin文件
                  復制到/計算機/tftpboot文件夾中,並將該文件改名為:bin。
                  然后,重新打開一個終端(在home目錄下),利用touch命令創建一個新的文件,文件名為:text
                  操作過程如下:

                                                        

                按CTRL+d 退出編輯。

       補充資料:
            tftpd-hpa似乎與傳統tftpd有些聯系。想了解更多信息請試試.執行的命令,
       如下:
                    man tftpd
       安裝完成后重新啟動服務器,系統上將有一個正在運行的TFTP服務器,該服務器將在IPv 4和IPv 6上偵聽所有活動的網絡接口。
       您所能做的就是從TFTP服務器下載文件。
       上傳不起作用。我們將在下面的配置部分修復這個問題。
       你可以通過運行。命令,
       如下:
                    sudo service tftpd-hpa status
                   或
                    netstat -a | grep tftp
      執行命令sudo service tftpd-hpa status,結果
      如下:

                             

         可以看到服務器tftpd-hpa在運行!

       ③在U-Boot下升級固件

       首先,調整虛擬機的網卡設置,增加網卡然后設置為橋接(先關閉Ubuntu,回到Oracle VM VirtualBox管理器)。

       操作如下:

           

           然后,啟動虛擬機。

             連上開發板,在終端利用ifconfig命令查看網絡狀態。

           沒連上網絡之前的狀態如下:

           

           連接網絡后,查看網絡狀態如下:

           

           后加的是enp0s8。新的Ubuntu采用這種命名方式,原來采用eth0, eth1等方式命名。

             接着,打開minicom進入選擇模式。

           如下:

           

           其中(選項1,2,3,4比較常用)

             選項1表示:把固件載入到內存,但是不啟動(重啟后代碼就丟了)。

             選項2表示:加載固件后,寫入到Flash。

             選項3表示:加載固件並啟動系統。

             選項4表示:進入boot的命令行界面

             選項7表示:加載BootLoader並通過串口寫入到Flash。

             選項9表示:加載BootLoader並通過TFTP寫入Flash。

           相應操作如下:

           

          其中,device IP(10.10.10.123)==:10.10.10.123表示路由器(即開發板)的IP地址為:10.10.10.123(我們是可以改的)

             server IP(10.10.10.3)==:10.10.10.3表示Ubuntu server的IP地址(我們也可以手動改的)

             Linux Kernel filename(img.bin)==:img.bin應該改為:Linux Kernel filename(img.bin)==:bin(前面修改名字的固件)

          選擇所需的鏡像后,回車如下:

          

          到這里,發現運行優點異常,原因是我們沒有設置IP地址。

          打開新的終端,配置IP地址,如下:

                          sudo ifconfig enp0s8 10.10.10.3(根據自己的實際IP填寫)

          運行結果如下:

           

          先把固件加載到內存,在寫入Flash(先擦除在燒寫),信息如下。

          

          此處省略部分編譯過程。

          最后我們可以看到,系統啟動起來了,部分信息如下:

          

          到此時,固件已經燒寫完畢!!

          接着,按4進入命令模式。看一下,該路由系統中的命令(比較精簡),如下:

          

          利用help命令查看命令,如下:

          

          可以看出,這個U-boot並不是標准的,比較精簡,但夠用了!

          比如,使用printenv命令,如下:

          

 

總結:

解決可能存在的問題:

          解決minicom有輸出卻沒有輸入的問題!

          首先,利用lsusb查看USB的相關信息,如果沒有顯示我們所插的USB信息(PLS2303),如下:

          

          此時,在終端左上角顯示:不能分配USB設備

          如下:

          

 

             我們重新插拔以下USB即可。然后再查看USB的相關信息。

           如下:

           

          可以通過dmesg命令,查看USB的設備號,顯示如下:

            

          接着,進入minicom的配置界面:

          如下:

          

          回車后顯示界面,如下:

          

          選擇:Serial port setup,設置一下波特率(因為OpenWrt編譯好之后默認的波特率為115200)。如下:

          

          按E鍵后,按A增加波特率至115200,如下:

          

          然后,選擇:Save setup as dfl,再選擇Exit退出后,回車如下:

          

          問題已解決!!!

          另外,其實我們用dmesg命令,也是可以看到設備的波特率的。如下:
          

          

Minicom初探:

      因為現在電腦基本不配備串行接口,所以,usb轉串口成為硬件調試時的必然選擇。目前知道的,PL2303的驅動是有的,

      在dev下的名稱是ttyUSB#。

      minicom,tkterm都是linux下應用比較廣泛的串口軟件,這里簡單介紹minicom使用。

一、安裝

    debian 系,比如 ubuntu、mint等(新手建議裝虛擬機):

    在終端執行如下命令:

              sudo apt-get install minicom

二、配置

    首先,查看串口設備是否可用。linux下的所有操作面向用戶的都是文件操作,在對串口操作之前,我們應該先確認自己對該文

    件有沒有讀寫權限。

    執行如下命令:
          ls -l /dev/ttyUSB*
                  linux下的usb串口命名為ttyUSB0,運行上面命令,可以看到有幾個設備掛載。
                  我這里顯示的是:

                    
                          
                  可以看到我只有ttyUSB0。
                  但是正如上面顯示,ttyUSB0這個設備是root所有的,所以,我們以普通用戶身份打開minicom

                  是沒有辦法訪問該文件的。

    然后,運行如下命令:

               sudo minicom -s  
                        進入minicom的配置界面,使用上下鍵選擇Serial port setup,回車。

                        此時光標在“change which setting”后面停留,它的上面有如下菜單:

                        

                            Serial port setup [Enter]
                            +-------------------------------------------------------------+
                            | A - Serial Device : /dev/ttyUSB0 |
                            | B - Lockfile Location : /var/lock |
                            | C - Callin Program : |
                            | D - Callout Program -: |
                            | E - Bps/Par/Bits : 115200 8N1 |
                            | F - Hardware Flow Control : No |
                            | G - Software Flow Control : No |
                            | |
                            | Change which setting? |
                            +-------------------------------------------------------------+
                            我們只需輸入上面對應的字母,就可以進入相應的菜單進行設置。設置完成,
                            回車,光標會回到
                            “change which setting”,后面如此重復。完成后按回車返回主菜單。
                         注意:
                            如果不是 USB 轉串口,而是直接使用串口,那么Serial Device要配置為
                            /dev/ttyS0(具體那個設備,因系統名字而異,若你不知道,只能祝你好運了。
                            返回主菜單后,選擇“Save setup as dfl”,將其保存為默認設置,然后
                            選擇Exit退出,注意,不是退出mincom。

三、使用
    如果上面設置順利,重新給開發板上電后,此時,窗口里就有信息打印出來了。
    minicom基本操作如下:
              1)組合鍵 Ctrl+A 進入設置狀態;
              2)緊接着單獨按 Z 打開幫助菜單,或者你用的熟練的話,直接輸入菜單對應的字母即可;
                (1)S鍵:發送文件到目標系統中;
                (2)W鍵:自動卷屏。當顯示的內容超過一行之後,自動將後面的內容換行。這個功能在查看內核的啓動信息時很有用。
                (3)C鍵:清除屏幕的顯示內容;
                (4)B鍵:瀏覽minicom的歷史顯示;
                (5)X鍵:退出minicom,會提示確認退出。

              3) 比如,使用 Ctrl-A-->O 進入 minicom 配置菜單:
                +-----[configuration]------+
                | Filenames and paths |
                | File transfer protocols -|
                | Serial port setup |
                | Modem and dialing |
                | Screen and keyboard |
                | Save setup as dfl |
                | Save setup as.. |
                | Exit |
                +--------------------------+
    我們可以配置使用 Ctrl-A-S 發送文件時的默認路徑,可選擇"Filenames and paths"
          進行配置:
                +-----------------------------------------------------------------------+
                | A - Download directory : /home/crliu |
                | B - Upload directory : /tmp |
                | C - Script directory : |
                | D - Script program : runscript |
                | E - Kermit program : |
                | F - Logging options |
                | |
                | Change which setting? |
                +-----------------------------------------------------------------------+
    如上,A - download 下載文件的存放位置(開發板 ---> PC, rz)開發板上的文件將被傳輸到PC機上的/home/crliu目錄下。
       B - upload 從此處讀取上傳的文件(PC ---> 開發板, sz)PC機向開發板發送文件,需要發送的文件在/tmp目錄
         下(PC機上的目錄)。

四、其他技巧

      啟動 minicom 的時候,會檢測 MINICOM 環境變量,將它們作為命令參數,如果命令中指定了某個參數,那

      么這個 MINICOM中的相應的某個參數會被替換掉。

      我們在 ~/.bashrc 文件中添加這一行,使得 minicom 默認每次都進入彩色模式,並自動進入串口配置: 
                                         export MINICOM='-s -c on'

      The configuration 參數更有趣。通常,minicom從文件“minirc.dfl”中獲取其缺省值。

      不過,若你給minicom一個參數,它將嘗試從文件“minirc.configuration”中獲取缺省值。

      因此,為不同端口、不同用戶等創建多個配置文件是可能的。最好使用設備名,如:tty1, tty64,sio2等。

      如果用戶創建了自己的配置文件,那么該文件將以“.minirc.dfl”為名出現在他的home目錄中。

      minicom的全局配置文件通常在/etc/minirc.dfl. minicom將其配置文件保存在一個目錄中,

      通常是:/var/lib/minicom,/usr/local/etc或者/etc。

      要想知道minicom編譯時內定的缺省目錄,可用命令“minicom -h”,在那兒你可能還會找到runscript(1)

      的demo文件。 

      配置文件的文件名格式:minirc.user。minicom默認加載配置文件minirc.df1,但你也可以仿照minirc.df1編輯自己的

      配置文件minirc.user,輸入minicom user啟動時則加載minirc.user。如在本機上,我做了一個minirc.root,

      輸入minicom root 啟動minicom,則系統自動加載/etc/minirc.root中的配置。 

        $HOME/.minirc.* 
        $HOME/.dialdir 
        $HOME/minicom.log 
        /usr/share/locale/*/LC_MESSAGES/minicom.mo 
      *命令行啟動minicom的參數 
      更多的參數,參見"man minicom"的輸出。 
      -s 
        設置。 root 使用此選項在/etc/minirc.dfl中編輯系統范圍的缺省值。使用此參數后,minicom 將 不 進行初始化,

        而是直接進入配置菜單。如果因為你的系統被改變,或者第一次運行minicom時,minicom不能啟動,這個參數就會很

        有用。對於多數系統,已經內定了比較合適的缺省值。 

      -o 
        不進行初始化。minicom 將跳過初始化代碼。如果你未復位(reset)就退出了minicom,又想重啟一次會話(session),

        那么用這個選項就比較爽(不會

        再有錯誤提示:modem is locked ---- 注)。但是也有潛在的危險:由於未對lock文件等進行檢查,因此一般用戶可

        能會與uucp之類的東東發生沖突......也許以后這個參數會被去掉。現在姑且假定,使用modem的用戶對自己的行為足

        夠負責。 

      -m 
        用Meta或Alt鍵重載命令鍵。在1.80版中這是缺省值,也可以在minicom 菜單中配置這個選項。不過若你一直使用不同

        的終端,其中有些沒有Meta或Alt鍵,那么方便的做法還是把缺省的命令鍵設置為Ctrl-A,當你有了支持 Meta或Alt鍵

        的鍵盤時再使用此選項。Minicom假定你的Meta鍵發送ESC

        前綴,而不是設置字符最高位的那一種(見下)。 
      -M 
        跟“-m”一樣,但是假定你的Meta鍵設置字符高端的第八位(發送128+字符代碼)。 
      -z 
        使用終端狀態行。僅當終端支持,並且在其termcap或terminfo數據庫入口中有相關信息時才可用。 
      -l 
        逐字翻譯 高位被置位的字符。使用此標志, minicom將不再嘗試將IBM行字符翻譯為ASCII碼,而是將其直接傳送。許多

        PC-Unix克隆不經翻譯也能

        正確顯示它們(Linux使用專門的模式:Coherent和Sco)。 
      -w 
        在啟動的時候就自動換行,這樣啟動之后不用運行<C-a> w進行設置了,詳細參考后面。 
      -a 
        特性使用。 有些終端,特別是televideo終端, 有個很討厭的特性處理(串行而非並行)。minicom缺省使用‘-a on’,

        但若你在用這樣的終端,你就可

        以(必須!)加上選項‘-a off’。尾字‘on’或‘off’需要加上。 

      -t 
        終端類型。使用此標志, 你可以重載環境變量TERM, 這在環境變量MINICOM 中使用很方便; 你可以創建一個專門的

        termcap 入口以備minicom 在

        控制台上使用,它將屏幕初始化為raw模式, 這樣,連同‘-l’標志一起,就可以不經翻譯而顯示IBM行字符。 
      -c 
        顏色使用。些終端(如Linux控制台)支持標准ANSI轉義序列色彩。由於termcap顯然沒有對於色彩的支持,因而minicom

        硬性內置了這些轉義序列的代碼。

        所以此選項缺省為off。使用‘-c on’可以打開此項。把這個標志,還有‘-m’放入MINICOM環境變量中是個不錯的選擇。 
      -S 
        腳本。 啟動時執行給定名字的腳本。到目前為止,還不支持將用戶名和口令傳送給啟動腳本。如果你還使用了‘-d’選

        項,以在啟動時開始撥號,此腳本將在撥號之前運行,撥號項目入口由‘-d’指明。 

      -p 
        要使用的偽終端。 它超載配置文件中定義的終端端口,但僅當其為偽tty設備。提供的文件名必須采用這樣的形式:

        (/dev/)tty[p-z][0-f] 
      -C 
        文件名。 啟動時打開捕獲文件。 
      -8 
        不經修改地傳送8位字符。“連續”意指未對地點/特性進行真正改變,就不插入地點/特性控制序列。此模式用於顯示8位

        多字節字符,比如日本字(TMD!應該

        是中國字!!)。不是8位字符的語言都需要(例如顯示芬蘭文字就不需要這個)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM