前言
看IOT也有一段时间了,但是一直都是从官网获取固件包,没有尝试过从真机里提取固件。在看了一些师傅的文章后决定尝试一下从真机中提取固件。正好手里也有几个路由器,于是用刚到手的奖学金去买了提取固件所需要的工具用来学习一下如何通过串口调试获取固件。
所用到的工具及设备
- FT232
- 电烙铁
- 杜邦线
- 万用表
- xxx 路由器
- SecureCRT
前置知识
串口介绍
串口是一个泛称,UART、COM、TTL、RS232、RS485都遵循类似的通信时序协议,因此都被通称为串口。
而在嵌入式开发中所听到的串口一般指的是UART。UART使用的是异步串行通信,以字符为传输单位,一位一位的顺序输送;通信中两个字符间的时间间隔是不固定的 ,然而同一个字符内两个相邻位之间的时间间隔是固定的。数据的传送速率用波特率来表示,即每秒钟传送的二进制位数。一般选波特率都会有9600,19200,115200等,最常用的是115200。UART有四个pin,分别是VCC,GND,RX,TX,用的是TTL电平,低电平为0V,高电平为3.3V-5V。
UART 引脚介绍
- VCC:供电pin,一般是3.3v,在我们的板子上没有过电保护,这个pin一般不接更安全(在路由器通电的时候可以不连VCC)。
- GND:接地pin,有的时候RX接受数据有问题,就要接上这个pin,一般也可不接。
- RX:接收数据pin。
- TX:发送数据pin。
UART 通信
UART最好的一点是它只使用两根线就可以在设备之间传输数据。在UART通信中,两个UART直接相互通信。发送UART将来自CPU等控制设备的并行数据转换为串行形式,并将其串行发送到接收UART,接收UART然后将串行数据转换回接收设备的并行数据。在两个UART之间传输数据只需要两根线。数据从发送UART的TX引脚流向接收UART的RX引脚,也就是接受和发送数据的UART的RX和TX要反过来连接。
寻找 UART 串口,并定位 pin
下图是笔者拆开xxx 路由器得到的板子,可以看到红色方框里有四个孔,这就是UART串口,并且这个板子很人性化已经给我们标好了引脚的名称。

如果没给我们标注好串口的名称,我们也可以通过万用表去定位每一个引脚。
1、定位 GND
将万用表调到蜂鸣档,然后将黑表笔接到背面电源焊锡点,红表笔分别触碰UART四个引脚的焊接点。发出声响的就是GND引脚。
2、定位 VCC
将万用表调到直流20V,然后将黑表笔放到刚刚判断的GND引脚上,再用红表笔触碰其他三个焊接点进行测试。电压稳定在3.3V或5V左右的那个引脚即为VCC引脚。
3、定位 TXD
开机会出现数据传输,如果该引脚出现了电压变化,则该引脚是TXD。黑表笔放到刚刚判断的GND引脚上,重启路由器,用红表笔触碰其他两个引脚,电压发生变化的即为TDX。
4、定位 RXD
确定了其他三个引脚之后,剩下的一个即为RDX。
实操
焊接并连接 UART 串口
下图可以看到四个孔处已经被读者用电烙铁焊上了几根针,可以便于我们用杜邦线将板子与FT232相连接。

之后,我们用杜邦线把板子和FT232的GND相连,把两者的RXD与TXD反着连。(也就是板子的RXD与FT23的TXD相连,板子的TXD与FT23的RXD相连)注意:在板子通电后最好不要将两者的VCC相连,否则可能损坏设备。
提取固件
在连接好FT232与板子上的串口之后,我选择使用SecureCRT连接进shell。在这里我们可以看出想要进入shell,那么我们必须有登录名和密码。所以通过shell提取固件有一定的局限性。要么该设备不需要账号密码就能登陆,要么知道该设备登陆的账号和密码。


登陆上之后用tftp或者nc等方法即可将固件传出来。