如何從串口獲取到設備的shell
當一個設備沒有telnet,沒有ftp,沒有ssh,那我們怎么獲取到此設備的調試能力呢?拆!
UART接口
拆開設備,綠的一塊黑的一塊,第一次看確實有點無從下手,別慌,仔細在板子上尋找連著的3個口或者4個口,很容易就能找到它----UART,UART是個什么玩意兒呢?UART的全稱為 UniversalAsynchronousReceiver/Transmitter,中文名字叫通用異步傳輸收發傳送器,它充其量就是一個設備之間的傳輸協議,那何為異步呢?異步就是沒有時鐘信號來同步發送端和接收端,用通俗一點的話來說就是發送端可以在任何時候向接收端發送數據,什么意思呢?我們思考在Windows下進行鍵盤輸入這個例子,我們什么時候按下鍵盤,操作系統是不會知道的,當我們按下某個鍵的時候,比如按下z,鍵盤就會往消息隊列發送消息也就是z的ascii碼,這就是異步傳輸.
那它是怎么知道一個消息的開頭的呢?答:start bit會告訴它,不傳輸數據的時候它保持高電平,當開始傳輸的時候,它將拉低電平通知設備準備接收數據,可問題又來了,它不與設備同步,那接收數據的時候怎么知道傳輸的速率是多少呢?答:波特率,當設備接收到電平從高電平向低電平躍遷的時候,就以波特率所對應的頻率進行接收數據(波特率是事先就設置好的)
下圖d后面兩位分別是奇偶校驗,校驗的方法和TCP/IP協議里的奇偶校驗一樣,不做贅述, stop bit則是將低電平拉高到高電平的信號,具體可以參考下面的鏈接:
UART:了解通用異步接收器/發送器的硬件通信協議
回歸基礎:通用異步接收器/發送器 (UART)
總算有點眉目了:同步傳輸與異步傳輸
數據包結構圖:

介紹完了UART,來講講為什么要找到它,其實剛剛已經講了一半出來----它是與設備進行通信的接口,我們想得到設備的shell,那必然要跟它進行通信,UART就扮演著這么個角色,如果你要問為什么會留下這樣的一個接口給我們拿shell呢?答案也很明了,即開發人員也是要調試的?!所以就留下這么一個接口
尋找UART接口
下圖是TP-LINK TL-WR841N路由器的UART示意圖(紅色框框里面的就是),有幾種方法可以定位UART在哪:
- 有些板子上直接印有字
- 拿手電筒照一下板子
- 試著用萬用表測一下

找到之后,那么這四個口是什么東西呢?這就需要用到萬用表來測試了!
GND
介紹:GND是電線接地端的簡寫,代表地線或0線。這個地并不是真正意義上的地,是出于應用而假設的一個地,對于電源來說,它就是一個電源的負極
識別:拔下設備的電源,將萬用表扭到蜂鳴襠,黑色探針接觸板卡上的金屬,紅色探針依次與四個口觸碰,當聽到萬用表發出"bi~bi"或者"di~di"(或者其他聲音)的聲音就是GND
VCC
介紹:C=circuit表示電路的意思,即接入電路的電壓
識別:插上設備的電源,將萬用表扭到20v,黑色探針接到剛剛測出來的GND,紅色探針去觸碰剩下的三個口,直到有測到有個口的電壓為3.3V或者5V,就是VCC
TX(transmission of data)
介紹:發送數據
識別:插上設備的電源,將萬用表扭到20v,在路由器啟動的一段時間中,用黑色探針接到GND,分別紅色探針去觸碰剩下的倆個口,電壓變化較大的即為TX
RX(receiving of data)
介紹:接收數據
識別:識別完上面的接口,剩下的就是咯!
找到接口之后,就可以拿杜邦線來連接UART,買了下面的針腳和TTL轉USB,為什么要用FT232呢?因為電腦沒有轉化電平信號的硬件,下圖是淘寶買的FT232:

需要注意的是RX和TX與FT232上的RX和TX反著接,就像下圖一樣,先不要焊排針上去,先不要焊排針上去!!!先用手定住測試一下,沒問題了,再焊上去!

連接完成之后就可以使用串口調試工具來獲取一個shell,有好幾個工具,都大差不差:
- putty
- 利用 Putty 的 Serial 功能來連線串口設備
- 串口調試助手
- WIN10上串口調試助手
- SecureCRT
- SecureCRT使用指南
隨便一個工具都可以連接,確定好COM口號,就可以使用指定的波特率來連接,這里波特率多試幾個常見的就好,一般都可以試出來的
查看COM口的方法:此電腦 => 管理 => 設備管理器 => 端口

等待加載完成,按下回車就進入shell的界面,淚目了,看到這個shell的激動程度不亞于用樹莓派提取固件,一直嘗試,一直不行,換了好幾臺設備,終于在這臺CISCO上拿到了shell

試過可以拿到shell的時候就可以焊上排針了,焊完之后就成了下面這個樣子(老爸幫忙焊的,我在旁邊看著真不錯?):

總結
在失敗了這么多次之后,總結一下失敗的經驗:
- 可能一:
RX和TX線接錯了 - 解決辦法:由于根據其他大師傅的說法,在啟動一段時間里面電壓變化較大的為
TX,但是兩個接口都差不多,沒辦法確認是否接正確了(聽說可以將旁邊的 3.3 伏特的 15K 電阻器將 TX 拉高),只能換著接,還有就是注意TX和RX要反著接,具體看上面的圖 - 可能二:焊接問題
- 解決辦法:只能重新焊,多焊幾次就熟悉了....,一般情況下焊上去就可以了,但也不排除焊壞的情況
- 可能三:波特率選錯
- 解決辦法:多試幾次,因為測試的腳本根本不頂用...,拿常見的波特率先試,一般都能試到的