uboot是一个种常见的bootloader,常用于引导系统启动。
SuperWRT对uboot进行了精简和必要的修改,以更好的配合SuperWRT系统使用。
当系统无法正常工作,或者你希望刷版本时,可以进入uboot的网页模式恢复系统。
具体方式如下:
1. 将电脑改为自动获取IP地址。 2. 将设备断电,电脑的网线连接设备LAN口,断开其它网线。 3. 按住Reset,插入设备电源,当LED由闪烁变为长亮,松开Reset键。 4. 用电脑浏览器访问Http://oplogin.com(或http://192.168.17.1)。
也可以使用SuperWRTBootloaderTool通过网口让设备进入uboot的网页模式:
1. 将电脑改为IP地址:192.168.17.10。 2. 将设备断电,电脑的网线连接设备LAN口,断开其它网线。 3. 打开SuperWRTBootloaderTool,按图进行配置。 3. 插入设备电源,等SuperWRTBootloaderTool中提示“设备WEB服务已打开”。 4. 用电脑浏览器访问Http://192.168.17.1。
SuperWRT定制的uboot在进入启动linux阶段,会分析bootargs参数,解析其中的mtdparts部分。然后尝试运行在bootm中制定的分区,这里默认是“firmware kernel uImage”,检测任意一个可以启动后,即加载相应分区进行启动。
当您连入串口,进行设备控制时。当出现下面打印,可以按C键或Ctrl+C进入uboot命令行。
串口的波特率为115200或57600,可能根据设备不同,会有差别。
SuperWRT Boot 1.1.4-g4e23f60a-dirty (Jun 28 2016 - 15:32:20) QCA955x - Scorpion 1.0 DRAM: 128 MB Flash: 8 MB (ef4017) Using default environment Frequency: CPU 720MHz / RAM 600MHz / AHB 240MHz Bootstrap Config: 0x00031e5c SuperWRT Board Info(0x9f01c000): TP WDR7500 v5.0/terra@superwrt.com/2016-01-29 Device UID: 48d72be2aaaf42e1c13ac8554b49f099 GPIO: reset(16/L), system(14/L) In: serial Out: serial Err: serial Net: (24:69:68:7c:7c:4b) S17wan S17 eth0, eth1 Set 0x18116290 = 0x458a214f Net Command waiting: 2 Try eth1 first. dup 1 speed 1000 Hit 'c' to stop autoboot: 1
注意:如果您设置了密码,此时会需要先输入正确密码才能进入。
命令 | 功能 | 使用说明 |
---|---|---|
reset | 重启设备 | |
setenv | 设置环境变量 | 查看 |
printenv | 打印环境变量 | 查看 |
scfg | 配置管理 | 查看 |
erase | 擦除flash | 查看 |
cp | 复制内容 | 查看 |
md | 查看内存内容 | 查看 |
mg | 查找内存内容 | 查看 |
mtd | 分区操作 | 查看 |
loadb | 从串口读入文件 | 查看 |
tftpboot | 从tftp服务器下载文件在指定内存位置 | 查看 |
httpd | 启动web服务 | 查看 |
wupdate | 使用WAN更新固件 | 查看 |
ping | ping指定IP | 查看 |
setpwd | 设置uboot进入密码 | 查看 |
setmac | 修改设备MAC地址 | 查看 |
reg | 寄存器读写 | 查看 |
gpio | gpio功能测试 | 查看 |
uboot的环境变量为一些操作提供了值。
使用printenv可以查看当前的所有环境变量。
使用setenv可以设置变量的值。
示例:修改设备IP地址:
setenv ipaddr 192.168.1.12
常用的环境变量含义:
变量名 | 含义 |
---|---|
ipaddr | 设备的IP地址。默认为(192.168.17.1)。 |
serverip | 服务器的IP地址(tftp服务器)。默认为(192.168.17.10)。 |
netmask | 子网掩码,用于判断目标IP与设备是否在一个网段,及httpd时启动dhcp服务器地址池的分配依据。默认为(255.255.255.0)。 |
loadaddr | 默认下载地址,如loadb不加地址,将默认下载到该变量的地址中。 |
bootdelay | 自动启动延迟,用于打断uboot自动加载kernel。 |
bootcmd | 自动启动参数。默认为bootm firmware kernel uImage |
bootargs | 传递给内核的启动参数。 |
filesize | 上次操作下载文件的大小。如tftp下载文件后,大小即存在该变量中。(16进制值) |
从config分区加载配置到环境变量,或删除config分区中的配置。
命令参数说明:
提示:从配置中加载的环境变量以“c_”开始。
配置变量含义:
配置名 | 含义 |
---|---|
wan_mode | WAN口连接方式,支持:static,dhcp,pppoe。 |
wan_ip | WAN口静态方式的IP地址。 |
wan_netmask | WAN口静态方式的子网掩码。 |
wan_gateway | WAN口静态方式的网关地址。 |
wan_dns | WAN口静态方式的DNS服务器地址。 |
wan_username | WAN口PPPoE方式的用户名。 |
wan_password | WAN口PPPoE方式的密码。 |
upgrade_url | 升级包的url地址。 |
upgrade_sha1 | 升级包的sha1校验值。 |
recovery_url | 系统启动失败后,恢复用升级包的url地址。 |
recovery_sha1 | 系统启动失败后,恢复用升级包的sha1校验值。 |
使用erase命令可以擦除Flash的Sector。(SPI的Nor Flash必须按块擦除后,才可以写入内容)
命令参数说明: erase <启始地址> +<擦除大小>
示例:擦除0x9f030000开始的1M内容
erase 0x9f030000 +0x100000
复制内存内容。如果要复制内容到Flash中,一定要确保Flash先进行了擦除操作。
命令参数说明:cp.b <源地址> <目标地址> <大小>
示例:将0x80060000位置的1M内容写入Flash的0x9f030000位置:
cp.b 0x80060000 0x9f030000 0x100000
提示:不可将Flash即作为源地址,又作为目标地址。如需要移动Flash内容,可以先复制到内存后,再复制到Flash另外的地址。
查看指定内存地址中的内容,以十六进制和ASCII码显示。
命令参数说明:md <地址>
示例:显示指定内存地址中的内容
md 0x80060000
提示:环境变量中的loadaddr和flashaddr可能是你需要用到的常用地址。
在内存中查找指定的十六进制内容。
命令参数说明: mg <十六进制值> [开始地址 [结束地址]]
在内存中查找十六进制值。如未指定开始地址,将以Flash的地址作为开始地址。
示例:在Flash中查找MAC地址00:01:02:0a:0b:0c的十六进制值位置
mg 0001020a0b0c
mtd分区相关操作,分区的结构从bootargs环境变量中的mtdparts读取。
命令参数说明:
提示:在启动时,如果发现boot中的分区大小小于Flash的真实大小的2倍。boot会自动调整分区结构,以使更大的Flash空间可用。通过该功能,可以将原设备Flash替换为更大容量的Flash,而无需重新定制boot。
loadb命令允许主机通过串口将一个文件传输到设备内存中。
命令参数说明: loadb <内存地址>
提示:loadb使用kermit传输协议。可以使用超级终端进行文件传输,如果使用其它软件传文件,请注意写入内存时是否多带了文件名称。
示例:下面使用超级终端将firmware通过串口传入设备内存。
下载tftp服务器的文件到指定内存中。
命令参数说明:tftpboot <内存地址> <文件名>
其它参数说明:以ipaddr变量为设备的IP地址(默认为192.168.17.1),以serverip变量为服务器的IP地址(默认为192.168.17.10)。
示例:如果PC与设备不在同一网段,可以通过setenv来改变设备和服务器的配置地址。这里以电脑为192.168.1.10/255.255.255.0的地址为例,将tuboot.bin文件下载到0x8006000内存位置。
setenv ipaddr 192.168.1.12 setenv serverip 192.168.1.10 tftpboot 0x80060000 tuboot.bin
提示:如果设备有多个网口,tftpboot会尝试使用不同的网口,建议使用该命令时,仅连接一个网线到电脑,断开设备的其它网线。
tftp服务器软件可以在这里下载:tftpd32
启动升级固件及维护设备用HTTP服务器。
命令参数说明:直接输入httpd。
其它参数说明:以ipaddr变量为设备的IP地址(默认为192.168.17.1),以netmask为设备的子网掩码(默认为255.255.255.0)。将子网掩码中包含的除设备自身地址外的地址,作为DHCP地址池。
其它功能:http服务器功能,DHCP服务器功能,DNS服务器功能(仅解析oplogin.com和oplogin.cn到设备IP地址),可回复ping请求。
使用说明:
其它:可在网页的Debug页面使用40000000地址,写入bootloader的bin文件,该方式将不做检查。该操作可能使用设备无法启动,一定要慎重使用。
在恢复网页中修改MAC和ART请参考:修改MAC地址及校准信息
使用WAN口连接更新设备固件,支持静态地址、动态地址、PPPoE方式连接。
所需配置会自动通过scfg读取到环境变量。
提示:wupdate优先使用WAN接口进行连接,无网线时,会再尝试使用LAN接口,如还无法连接成功,将再将尝试WAN接口,如此往复。
提示:为了保证从WAN连接下载的文件不被篡改或替换,wupdate会验证下载文件的sha1值需与配置相同,同时会强制校验升级包的数字签名,未校验通过,将不进行升级。
ping测试指定IP地址,使用环境变量中的ipaddr作为设备地址。
设置进入串口及http网页的密码。
命令参数说明:setpwd <密码>
注意:密码仅可设置一次,设置不可以修改或删除,除非重新刷uboot。如用在线工具制作uboot时已设置密码,该密码不能修改或删除。
设置密码后,在进入uboot命令行,和打开uboot的web网页时,都需要输入密码。
此密码使用特殊算法生成,可以比较有效的防止彩虹表和暴力破解。
修改设备MAC地址。
命令参数说明:setmac <mac地址>
注意:使用此命令时,请先确保uboot已配置正确的MAC地址读写位置(通过在线工具写入到SBI中)。
示例:修改设备MAC地址为00:01:02:03:04:05
setmac 00:01:02:03:04:05
提示:请确保MAC地址的第一字节的后两个bit位为了0。比如:02或A1都是不对的,而04或0c是正确的。
读写寄存器。
命令参数说明:
示例:读寄存器 0x18040030
reg 0x18040030
示例:写寄存器 0x18040030 为 0x80
reg 0x18040030 0x80
操作gpio。
命令参数说明:(此命令针对不同芯片会略有区别)
说明: pin即为GPIO对应管脚。输入输出值:0表示低电平,1表示高电平。
示例:测试按键对应的GPIO
gpio monitor
示例:测试GPIO点亮LED,一般用GPIO低电平点灯,这里测试GPIO2
gpio 2 2 0 (清除原有功能绑定) gpio 2 0 0
示例:先读取GPIO输入值
gpio 1 1
示例:测试将GPIO配为网口功能灯
gpio 3 2 45
可以使用“$name
”在命令中引用环境变量。
可以使用“;
”来分隔多个命令一起执行。
不过更建议您使用“&&
”来分隔多个命令,表示只有上面的命令执行成功后,才执行一下条命令。
示例:下载并更新Flash内容,可用如下命令:
tftpboot $loadaddr && erase 0x9f030000 +0x100000 && cp.b $loadaddr 0x9f030000 $filesize
SuperWRT的uboot支持多种格式文件的上传。
格式 | 说明 |
---|---|
uimage firmware | uimage + squahsfs文件,squashfs位置为在uimage结束后。建议按8字节以上对齐对为起始地址。 |
TPLink old firmware | 以0x01000000开头的TP-Link升级文件 |
TPLink new firmware | 以0x00000100开头的TP-Link升级文件 |
spkg | 支持带有数字前签名的Spkg格式文件 |
SuperWRT的uboot支持多种格式文件的启动。
格式 | 说明 |
---|---|
uimage | uboot的表标准头格式,以的Magic开头 |
uboot | 支持第一条为跳转指令的uboot |
TPLink old header | TPLink旧的Linux系统头格式支持 |
spkg | 支持带有数字前签名的Spkg格式文件 |
可以使用我们提供的打包工具,将其它系统的firmware进行打包,以支持刷定制的boot中。打包工具