時間: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位字符的語言都需要(例如顯示芬蘭文字就不需要這個)。

