用户工具

站点工具


using:bootloader

SuperWRT配套的bootloader使用说明

uboot是一个种常见的bootloader,常用于引导系统启动。

SuperWRT对uboot进行了精简和必要的修改,以更好的配合SuperWRT系统使用。

进入恢复网页

当系统无法正常工作,或者你希望刷版本时,可以进入uboot的网页模式恢复系统。

具体方式如下:

1. 将电脑改为自动获取IP地址。
2. 将设备断电,电脑的网线连接设备LAN口,断开其它网线。
3. 按住Reset,插入设备电源,当LED由闪烁变为长亮,松开Reset键。
4. 用电脑浏览器访问Http://oplogin.com(或http://192.168.17.1)。

使用PC工具进行恢复模式

也可以使用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功能测试 查看

setenv/printenv命令

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进制值)

scfg命令

从config分区加载配置到环境变量,或删除config分区中的配置。

命令参数说明:

  • 加载配置到环境变量: scfg export
  • 删除指定配置: scfg done [配置名]

提示:从配置中加载的环境变量以“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命令

使用erase命令可以擦除Flash的Sector。(SPI的Nor Flash必须按块擦除后,才可以写入内容)

命令参数说明: erase <启始地址> +<擦除大小>

示例:擦除0x9f030000开始的1M内容

erase 0x9f030000 +0x100000

cp命令

复制内存内容。如果要复制内容到Flash中,一定要确保Flash先进行了擦除操作。

命令参数说明:cp.b <源地址> <目标地址> <大小>

示例:将0x80060000位置的1M内容写入Flash的0x9f030000位置:

cp.b 0x80060000 0x9f030000 0x100000

提示:不可将Flash即作为源地址,又作为目标地址。如需要移动Flash内容,可以先复制到内存后,再复制到Flash另外的地址。

md命令

查看指定内存地址中的内容,以十六进制和ASCII码显示。

命令参数说明:md <地址>

示例:显示指定内存地址中的内容

md 0x80060000

提示:环境变量中的loadaddr和flashaddr可能是你需要用到的常用地址。

mg命令

在内存中查找指定的十六进制内容。

命令参数说明: mg <十六进制值> [开始地址 [结束地址]]

在内存中查找十六进制值。如未指定开始地址,将以Flash的地址作为开始地址。

示例:在Flash中查找MAC地址00:01:02:0a:0b:0c的十六进制值位置

mg 0001020a0b0c

mtd命令

mtd分区相关操作,分区的结构从bootargs环境变量中的mtdparts读取。

命令参数说明:

  • 显示分区信息: mtd info
  • 擦除分区: mtd erase <分区名>
  • 写入内容到分区: mtd write <分区名> <源内容地址> <写入长度>
  • 载入升级包(可选y/n,表示有确认操作时的选择): mtd upgrade <升级包内容地址> <升级包长度> [y/n]

提示:在启动时,如果发现boot中的分区大小小于Flash的真实大小的2倍。boot会自动调整分区结构,以使更大的Flash空间可用。通过该功能,可以将原设备Flash替换为更大容量的Flash,而无需重新定制boot。

loadb命令

loadb命令允许主机通过串口将一个文件传输到设备内存中。

命令参数说明: loadb <内存地址>

提示:loadb使用kermit传输协议。可以使用超级终端进行文件传输,如果使用其它软件传文件,请注意写入内存时是否多带了文件名称。

示例:下面使用超级终端将firmware通过串口传入设备内存。

打开超级终端

配置串口速率

loadb

使用kermit发送文件

等待文件传输完成

查看内存中的文件内容

tftpboot命令

下载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

httpd命令

启动升级固件及维护设备用HTTP服务器。

命令参数说明:直接输入httpd。

其它参数说明:以ipaddr变量为设备的IP地址(默认为192.168.17.1),以netmask为设备的子网掩码(默认为255.255.255.0)。将子网掩码中包含的除设备自身地址外的地址,作为DHCP地址池。

其它功能:http服务器功能,DHCP服务器功能,DNS服务器功能(仅解析oplogin.com和oplogin.cn到设备IP地址),可回复ping请求。

使用说明:

  1. 启动httpd后,可以通过web访问设备,上传固件。
  2. 可以下发重启和清除配置操作。(清除配置操作擦除config分区内容)
  3. 通过访问oplogin.com/file/flash可以下载整个Flash的内容。(但由于TCP窗只设了1,下载比较慢)
  4. 如果设置了uboot密码,需要首先在对话框输入密码,用户名任意即可。
  5. 上传的固件是否成功,可以通过系统LED和返回的网页指示。
  6. 设备首先尝试使用LAN口启动http服务器,如果LAN口没有网线连接,会再尝试使用WAN口,仍然没有,会再从头开始尝试。

其它:可在网页的Debug页面使用40000000地址,写入bootloader的bin文件,该方式将不做检查。该操作可能使用设备无法启动,一定要慎重使用。

在恢复网页中修改MAC和ART请参考:修改MAC地址及校准信息

wupdate命令

使用WAN口连接更新设备固件,支持静态地址、动态地址、PPPoE方式连接。

所需配置会自动通过scfg读取到环境变量。

提示:wupdate优先使用WAN接口进行连接,无网线时,会再尝试使用LAN接口,如还无法连接成功,将再将尝试WAN接口,如此往复。

提示:为了保证从WAN连接下载的文件不被篡改或替换,wupdate会验证下载文件的sha1值需与配置相同,同时会强制校验升级包的数字签名,未校验通过,将不进行升级。

ping命令

ping测试指定IP地址,使用环境变量中的ipaddr作为设备地址。

setpwd命令

设置进入串口及http网页的密码。

命令参数说明:setpwd <密码>

注意:密码仅可设置一次,设置不可以修改或删除,除非重新刷uboot。如用在线工具制作uboot时已设置密码,该密码不能修改或删除。

设置密码后,在进入uboot命令行,和打开uboot的web网页时,都需要输入密码。

此密码使用特殊算法生成,可以比较有效的防止彩虹表和暴力破解。

setmac命令

修改设备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是正确的。

reg命令

读写寄存器。

命令参数说明:

  • 读寄存器:reg <地址>
  • 写寄存器:reg <地址> <值>

示例:读寄存器 0x18040030

reg 0x18040030

示例:写寄存器 0x18040030 为 0x80

reg 0x18040030 0x80

gpio命令

操作gpio。

命令参数说明:(此命令针对不同芯片会略有区别)

  • 监控输入GPIO的变化: gpio monitor
  • 将GPIO设置为通用输出:gpio [pin] 0 [值]
  • 将GPIO设置为通用输入并读值:gpio [pin] 1
  • 将GPIO设置为功能输出:gpio [pin] 2 [功能值]
  • 将GPIO设置为功能输入:gpio [pin] 3 [功能值]

说明: 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

支持的firmware格式

支持web上传的格式

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中。打包工具

using/bootloader.txt · 最后更改: 2017/08/21 07:32 由 terra