前言
看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提取固件有一定的局限性。要么该设备不需要账号密码就能登陆,要么知道该设备登陆的账号和密码。
登陆上之后用tftf
或者nc
等方法即可将固件传出来。