Breed介绍

Breed 是国内个人hackpascal 开发的闭源 Bootloader,也被称为“不死鸟”

因为有些官方升级固件自带 bootloader,如果从官方固件升级,会导致现有 bootloader 被覆盖。而当 Breed 更新固件时,它会自动删除固件附带的引导加载程序,因此可以防止 Breed 被覆盖

在线网站

进入 Breed Web 的三种方式

  1. 通电按复位键 4~5 秒进入
  2. 通过 BreedEnter 进入
  3. 串口 (TTL) 进入

进入 Breed 命令控制台的方法

  1. 通过串口 (TTL),在启动提示 Press any key to interrupt autoboot … 时按任意键中断启动即进入 Breed 命令控制台
  2. 通过开机按复位键或 BreedEnter.exe 方法中断 Breed,即可通过 telnet 方法进入 Breed 命令控制台 (CMD 中 telnet 192.168.1.1 即可)端口号22
  3. 请使用 Windows 自带的 telnet 客户端或者 PuTTY,linux 下的 telnet 客户端兼容不好

Breed特性

  • 实时刷机进度,进度条能准确反映刷机进度
  • Web 页面快速响应
  • 最大固件备份速度,依 Flash 而定,一般能达到 1MB/s
  • 免按复位键进入 Web 刷机模式
  • Telnet 功能,免 TTL 进入 Breed 命令控制台
  • 复位键定义测试功能
  • 固件启动失败自动进入 Web 刷机模式
  • 可自定义位置和大小的环境变量块
  • 由于是闭源,无法进行二次开发,所有支持的设备均由 hackpascal 一人完成。

Breed 内置命令介绍

[abstatus]
语法:abstatus
作用:显示自动启动被中断的原因

[arp]
语法:arp
作用:显示当前 ARP 表

[boot]
语法:boot mem
boot flash [bank ]
boot linux
boot raw
boot breed
参数: - 启动地址
- Flash bank 号
说明:启动固件。
boot mem 从内存地址启动固件;
boot flash 从 Flash 启动固件,bank 号可选,默认为 0;
boot linux 将 视作 Linux 内核入口地址,并启动;
boot raw 禁用中断,并从 处执行;
boot breed 将 视作上传的 Breed bin 文件地址,并直接启动。

[btntst]
语法:btntst
btntst enable
btntst disable
btntst restore
参数: - GPIO 号
说明:测试 GPIO 按钮
btntst enable - 启用对 GPIO#n 的状态检测
btntst disable - 禁用对 GPIO#n 的状态检测
btntst restore - 恢复默认检测设置

[dhcp]
语法:dhcp
dhcp [enable|disable]
说明:显示当前的 DHCP 租约
dhcp enable 开启 DHCP 服务
dhcp disable 关闭 DHCP 服务
改动不会保存,重启后恢复默认 DHCP 开启状态

[env]
语法:env
env list
env get
env set
env unset
env clear
env save
参数:
环境变量名
环境变量数据
说明:管理环境变量
必须使用 envconf 启用环境变量后才能使用此命令
修改环境变量后必须保存
env list 列出所有环境变量,显示总空间和空闲空间
env get 获取名称为 的环境变量的值
env set 设置环境变量 的值为 ,不存在则新建
env unset 删除名称为 的环境变量及其值
env clear 清除所有环境变量
env save 保存环境变量

[envconf]
语法:envconf
envconf disable
envconf
参数:
环境变量在 Flash 中的存储位置,起始为 0
环境变量大小,不能小于 0x100 字节
说明:启用或禁用环境变量
envconf disable 禁用环境变量功能
指定 则启用环境变量
注意:部分型号的 Breed 使用固定的环境变量设置,因此此命令不可用

[exit]
语法:exit
说明:退出 telnet 模式

[flash]
语法:flash list
flash [bank ] info
flash [bank ] dump
flash [bank ] read
flash [bank ] erase
flash [bank ] write
参数: - Flash bank 号
- Flash 地址
- 读取/擦除/写入数据大小
- 要写入 Flash 的数据内存地址
- 要存放读取的 Flash 数据的内存地址
说明:flash list 列出所有 Flash
flash info 显示 Flash 的详细信息
flash dump 显示 Flash 内的数据
flash read 将 Flash 内的数据读取到内存
flash erase 擦除 Flash
flash write 将内存数据写入到 Flash

[gpio]
语法:gpio [status|list]
gpio button
gpio led
gpio get
gpio set <hi|lo>
gpio dir set <in|out>
gpio led set <on|off>
参数: [status] - 列出所有 GPIO 及其状态
- GPIO 号
- 高/低电平
- GPIO 方向为输入/输出
- LED 名称
- LED 亮/灭
说明:gpio [status|list] 列出所有 GPIO 及其状态
gpio button 显示当前路由上按钮的状态
gpio led 显示当前路由上部分 LED 的状态
gpio get 获取指定 GPIO 的电平状态
gpio set 设置指定 GPIO 的电平状态
gpio dir set 设置指定 GPIO 的方向
gpio led set 设置 LED 的亮灭

[help]
语法:help
说明:列出所有可用的命令

[mem]
语法:mem dump [keep] [size]
mem crc32
mem read [byte|short|long]
mem write [byte|short|long]
mem write str
mem copy
mem fill
mem compare
参数:[keep] - 保持原始字节序
- 起始地址
[size] - 显示/计算的数据大小
[byte] [short] [long] - 指定操作数大小,分别为 1字节、2字节、4字节
- 要写入的值
- 要写入的字符串,支持 C 语言类型的编码
说明:mem dump 显示内存数据,可指定要显示的字节数,keep 表示保存原始字节序,否则输出时将转换为 CPU 字节序。
mem crc32 计算内存数据的 CRC32 校验
mem read 读取内存某个地址的数值
mem write 修改内存某个地址的数值
mem write str 将字符串写入某个内存地址
mem copy 复制内存块
mem fill 填充内存块
mem compare 比较内存块

[mdio]
语法:mdio list
mdio dump
mdio read
mdio write
参数: - 设备名
- PHY 号
- 寄存器
- 数值
说明:mdio list 列出网络接口设备
mdio dump 转储指定接口的 MII 寄存器 (0 ~ 31)
mdio read 读取指定接口的 MII 寄存器
mdio write 修改指定接口的 MII 寄存器

[net]
语法:net [start|stop]
说明:net start 启动网络服务
net stop 停止网络服务,并关闭所有网络连接

[netstat]
语法:netstat
说明:显示当前活动的网络连接

[reset]
语法:reset
说明:重启路由

[setbrg]
语法:setbrg
参数: - 波特率
作用:设置 Breed 串口输出的波特率,一直生效

[spi]
语法:spi list
spi [dev ] [ [ …]]
参数: - SPI 设备名
- 一个操作
操作类型:
start 开始一次 SPI 传输,即拉低 CS 电平
stop 结束 SPI 传输,即拉高 CS 电平
read 读取数据到内存
read display 读取数据并直接显示为十六进制格式
write 将内存地址中的数据写入
write str 字符串写入
speed 设置 SPI 总线频率。默认单位为 Hz,可以增加后缀k/m表示KHz/MHz
说明:spi list 列出所有 SPI 设备
spi 命令后面可以跟多个操作,如:
spi start write “\x9f” read display 3 stop

[sysinfo]
语法:sysinfo
说明:显示系统信息

[thread]
语法:thread
说明:列出所有线程信息

[wget]
语法:wget [addr]
参数:[addr] - 要存放数据的内存地址,可忽略
- 要请求文件数据的 HTTP 链接
说明:通过 HTTP 协议加载文件到内存。URL 里只能使用 IP 地址。

常见问题及回答 Q&A

Q: 开源吗?
A: 不开源。

Q: 已经刷了 Breed,如果用路由自带的固件升级是否会覆盖掉 Breed?
A: 多半会,所以刷了 Breed 之后都建议只在 Breed 里面更新固件。

Q: 什么时候做 360 C301 支持?
A: 现在不做,因为不能很好地支持以前不死 U-Boot 的功能。

Q: 做 BCM 支持么?
A: 不做,因为没有任何资料。

Q: 路由换了 32M 的闪存,固件无法软重启
A: 这是因为 32M 没有一个统一的标准,所以 CPU 本身支持得并不好,需要依靠固件来处理,如果固件处理不好,就会出现这种问题。这是固件造成的。

Q: 能不能自定义复位键?
A: 不能。

Q: telnet 到 Breed,打一个字符,显示两个字符
A: 正常现象,因为 telnet 这块没有很好地兼容 linux。

Q: Breed 里面能否改 WAN 口位置?
A: 不能。即使改了,固件启动后就会变回去。

Q: 启动 BreedEnter 出现 “无法定位程序输入点 XXXX 于动态链接库 XXXX.dll 上” 的错误
A: 请安装 WinPcap 4.1.3/或者 Npcap 的 WinPcap 兼容模式。

Q: MT7620 的 Breed 是否支持外置 PA?
A: 支不支持外置 PA 那是固件的事。Breed 只保证能够在有外置 PA 的路由上正常使用。

Q: 从 U-Boot 刷 Breed 后没有无线
A: 请去 Breed 里修改 MAC 地址。

Q: 能支持 VxWorks 固件吗?
A: 不支持任何非 Linux 内核的固件,包括小于2MB 的固件。

Q: 可以自定义 Breed 的 IP 地址吗?
A: 可以,Breed 从 1.1 版开始支持环境变量。具体操作方法请参阅 Breed 更新贴。

Q: 为什么给 AR 的路由换了双 128M 内存,不能识别出 256M 内存?
A: 太贪心,AR 的 CPU 不支持这种组合。自己换回去吧。

Q: 可以用编程器将 Breed 刷入空白闪存吗?
A: 当然可以。

Q: Ping Breed 的 TTL 值是多少?
A: 这个值是不固定的,依据执行 Ping 命令的机器的不同而定。请不要依据 TTL 值来判断是否是处于 Breed 模式。

Q: 如何升级 Breed / 更换为其他的 Bootloader (如原厂 U-Boot)?
A: Breed 固件更新页面选择 Bootloader 项刷入即可。

Q: Breed 会阻止刷入其它的 Bootloader 吗?
A: 不会,Breed 是开放的 Bootloader,不会增加任何使用上的限制。

BREED官方