旧式有线打印机联网探索
小米 mini 路由器刷机刷入 OpenWrt 后作为中介,通过打印机的 USB 接口与 OpenWrt 进行交互,实现有线打印机联网
材料准备
- 硬件
- 小米 mini 路由器
- HP JetLaser 1020 打印机一台
- U 盘一枚(可以使用读卡器插入 TF 卡代替)
- 软件
- XShell / Xftp
实践步骤
给小米 mini 刷入 OpenWrt
本步骤主要参考资料
预先准备
- 取卡针(牙签或回形针,用于按压 Reset 复位键)
- 网线两根(一根插入 wan 口用于后续更新路由器,一根插入 lan 口用于刷入原生 OpenWrt 后默认未开启 Wifi 功能时进行通讯
- 路由器官方开发版 ROM 以及官方开启 SSH 补丁
- 刷入路由器需要先进行路由器的账号绑定(下载 SSH 工具也需要该步骤),绑定在个人的小米账号下表示该路由器后续操作由个人承担
- 官方开发版 ROM 下载地址,选取合适版本的路由器开发版 ROM,可同时下载稳定版 ROM 作为备用恢复的 ROM
- 官方开启 SSH 补丁下载地址,需要绑定路由器的登录账号,因此完成下文《绑定路由器》步骤再进行下载
- 下载对应路由器的 breed 包,用于创建恢复固件的环境,下载地址,小米路由对应的 breed 包为
breed-mt7620-xiaomi-mini.bin
- 下载对应路由器的 OpenWrt 插件,注意选择正确的版本,
- OpenWrt 发行版区别 - CSDN
- OpenWrt 下载 - 清华镜像源,下载依次点击
ramips - mt7620
,选择下载openwrt-21.02.3-ramips-mt7620-xiaomi_miwifi-mini-squashfs-sysupgrade.bin
- 使用原生 OpenWrt,刷入第三方 OpenWrt 后因版本问题有可能导致无法更新和下载,遇见该问题需要重回 breed 重新刷入固件
绑定路由器
连接路由器,WAN 口连接公网,手机连接该路由器后根据提示下载(或直接应用商店下载)小米 WiFi app,点击右上角 +
选择添加新的路由器然后按照提示操作绑定到小米账号
绑定路由器完毕后进行 ssh
工具包的下载,注意记录对应路由器的 root 密码后续步骤会用到
路由器更换至开发版
绑定完毕后电脑连接路由器,使用浏览器进入后台(默认小米路由后台为 192.168.31.1
),输入密码登录后台
点击右上角的下拉菜单,选择 系统升级 - 手动升级
,选择上一步准备的开发版 ROM(我的版本为 miwifi_r1cm_firmware_2e9b9_2.21.109.bin
,使用最新版本即可)
如果忘记路由器密码,可以参考官网的使用 U 盘来刷机,刷机帖 - 小米社区。值得一提的是,使用 U 盘这种方式更新系统会删除硬盘中的所有数据。
刷入过程中蓝灯会变为黄灯闪烁,闪烁完毕后变为黄色,等一段时间后会重新变为蓝色
刷入完毕后重新连接路由器(可能需要重新初始化,若需要则重复手机连接路由器步骤重新初始化即可),检查系统版本是否为开发版
使用 刷机帖 - 小米社区 的方式进行刷机,否则无法正常开启 SSH
开启 SSH 功能
- 将官网下载的用于开启 SSH 工具 bin 文件
miwifi_ssh.bin
复制到U盘的根目录下,保证文件名为miwifi_ssh.bin
且目录中不存在其他.bin
文件 - 断开小米路由器的电源,将 U 盘插入 USB 接口
- 按住 reset 按钮之后接入电源,指示灯变为黄色闪烁时再松开 reset 键(灯变为常亮黄色代表正常执行,变为红色代表读取失败)
- 等待 3 - 5 分钟,小米路由器会自动重启,指示灯变蓝了表示成功
即使是同型号的不同路由器的 miwifi_ssh.bin
不一样!!!必须针对的下载!!!否则不识别
刷入 Breed
Breed 是由网友开发的一个号称“不死”的引导加载程序。只要路由器成功刷入 Breed 之后,就可以借助它来备份和刷入路由器固件。
- 路由器断电,将U盘拔出
- 将
breed-mt7620-xiaomi-mini.bin
文件名更改为breed.bin
,复制到 U 盘根目录,并保证 U 盘根目录没有其他 bin 文件 - 路由器插入 U 盘,插电启动,在终端里输入
ssh root@192.168.31.1
回车(登陆密码在下载 SSH 的网站内获取)连接你的路由器 - 输入指令
mtd -r write /extdisks/sda1/breed.bin Bootloader
- 出现以上提示时,路由器断电,拔出 U 盘,指示灯蓝灯闪烁时松开 Reset 键,运行时保持蓝灯闪烁
- LAN 口插入网线,另一端连接电脑,浏览器输入
192.168.1.1
见到 Breed Web 代表刷入成功
刷入 OpenWrt
- 进入 Breed 管理页面
- 点击
固件备份
,分别备份EEPROM
和编程器固件
方便未来恢复 - 点击
固件更新
,勾选固件
,选中 OpenWrt 固件包openwrt-21.02.3-ramips-mt7620-xiaomi_miwifi-mini-squashfs-sysupgrade.bin
,点击上传
,点击更新
等待进度条完成 - 更新完毕后插拔网线,访问
192.168.1.1
若进入 OpenWrt 界面则刷入完成
其他配置
- 修改密码
administartion
选项
- 更换清华镜像源
- 通过命令行
ssh root@192.168.1.1
登录 OpenWrt 后输入sed -i 's_downloads.openwrt.org_mirrors.tuna.tsinghua.edu.cn/openwrt_' /etc/opkg/distfeeds.conf
即可完成更换 - OpenWrt 下载使用
opkg
,默认不包含nano / whereis
opkg update
下载更新列表并完成更新opkg install [包名]
下载安装包并安装,由于 OpenWrt 自带的Luci
在线桌面中包含system - software
菜单栏,可以使用图形化的方式进行下载
- 更换镜像源后建议的操作
- 下载
whereis / nano
- 更换 Luci 界面语言为中文
opkg update
opkg install luci-i18n-base-zh-cn
- 下载
- 通过命令行
- 修改 OpenWrt 默认 IP 地址,可选
nano /etc/config/network
,将其中的 lan 选项的 ipaddr 改为需要的 ip 后重启 OpenWrt 即可
- 追加 SFTP 服务 - 知乎
opkg install vsftpd openssh-sftp-server
下载管理及 sftp 服务端/etc/init.d/vsftpd enable
允许开机启动/etc/init.d/vsftpd start
启动服务
- 默认开启 Wifi 无线连接
/etc/config/wireless
文件管理无线配置config wifi-device
下option disabled
不存在则增加,设置为 0 则默认开启,设置为 1 则默认关闭config wifi-iface
下option encryption
设置加密选项,无密码设置为none
,设置密码设置为wpa
且追加配置option key '你的密码'
- 配置失误时可以使用
rm -f /etc/config/wireless ; wifi detect > /etc/config/wireless
重置配置
- 在
Luci
的无线配置中选择SSID: OpenWrt | 模式: Master
的编辑按钮,在高级设置中将无线信号覆盖密度改为正常
后保存并应用
- 配置完毕后 reboot 生效
- 其他指令
cat /proc/version
查看系统信息
OpenWrt 连接打印机
本步骤主要参考资料
预先准备
- Linux 端驱动
sihp1020.dl
,下载后改名为此名称 - Windows 端驱动(安装但不使用,由于实际连接的是 OpenWrt 即 Linux 系统,因此该驱动仅用于跳过配置流程(是否可以直接不安装此驱动?未进行尝试))
- 驱动脚本文件
10-usb-printer
#!/bin/bash
FIRMWARE="/etc/sihp1020.dl"
LOG="/tmp/sihp1020-log"
if [ "$PRODUCT" = "3f0/2b17/100" ]
then
sleep 3
if [ "$ACTION" = "add" ]
then
echo "`date '+%Y-%m-%d %H:%M:%S'`: HP LaserJet 1020 add" >> $LOG
cat $FIRMWARE > /dev/usb/lp0 || echo "`date '+%Y-%m-%d %H:%M:%S'`: HP LaserJet 1020 init failed" >> $LOG || echo "`date '+%Y-%m-%d %H:%M:%S'`: HP LaserJet 1020 init success" >> $LOG
elif [ "$ACTION" = "remove" ]
then
echo "`date '+%Y-%m-%d %H:%M:%S'`: HP LaserJet 1020 remove" >> $LOG
else
echo "`date '+%Y-%m-%d %H:%M:%S'`: HP LaserJet 1020 $ACTION" >> $LOG
fi
fi
添加打印服务
- 下载需求的依赖包
opkg update # 读入软件列表
# 好像每次 reboot 都会清除软件列表,history 也无记录
opkg install p910nd # 安装功能模块
opkg install kmod-usb-printer # 安装打印支持
# opkg install libusb # usb 接口支持,安装失败
opkg install usbutils # usb 接口支持
opkg install luci-app-p910nd # Luci 管理界面
- 配置 p910nd 模块,建议手动配置
- p910nd - OpenWrt Docs
enable '1'
代表启用服务,默认值为 0port '2'
代表监听的端口,基准值为 9100,范围为0-9
即允许端口为9100-9109
bidirectional '0'
必须设置为取消即配置为 0(由于 HP LaserJet 1200 不支持该功能),否则将无法停止打印,默认值为 1 即开启双向读出功能
这里端口默认9100即可,**HP1000、1005、1018、1020、P1005、P1006、P1007、P1008、P1505这些型号打印机,不要勾选双向模式,不勾选,**否则打印一旦开始,无法停止,就算你打印一个测试页,也停不下来。
# 进行手动的修改,p910nd 的配置文件位置在 /etc/config/p910nd
config p910nd
option device '/dev/usb/lp0'
option runas_root '0'
option mdns '0'
option mdns_ty 'My Printer Manufacturer/Model'
option mdns_note 'Basement'
option enabled '1'
option port '2'
# 保存文件后检查文件内容无误后
/etc/init.d/p910nd enable # 启用服务
/etc/init.d/p910nd start # 启动服务
实际配置过程中由于未知原因,图形化配置的内容未实际写入配置文件,改为手动修改配置文件后生效
测试 Linux 驱动
- 将打印机通过 USB 连接线连接到路由器并开机
- 通过 XFtp 连接到路由器,复制
sihp1020.dl
到 OpenWrt 的/etc
目录下 - 使用
lsusb
检查打印机的pid / vid
是否为03f0:2b17
以及进入/dev/usb
中是否存在lp0
且属性为crw-rw----
- 执行
cat /etc/sihp1020.dl > /dev/usb/lp0
将驱动送入打印机,若有响应则代表连接成功
添加无线打印机服务
见驱动配置及连接打印机的 Windows 端配置部分
Windows 端配置同样需要取消勾选双向打印
在选择驱动的步骤选择不覆盖打印机驱动!
设置热插拔选项
/etc/hotplug.d/usb
中新增文件10-usb-printer
- 可以通过 XFtp 服务将文件拷贝到该目录下
- 拷贝完毕后
cat
检查文件是否有乱码
- 检查
sihp1020.dl
是否存在于/etc
目录中 chmod +x /etc/hotplug.d/usb/10-usb-printer
追加文件执行权限,增加了执行权限才允许被调用/etc/init.d/p910nd reload
至此可以热插拔重复写入固件
其他配置信息
- 以下为完成配置后的各项配置信息
- OpenWrt 后台设置在
192.168.5.1
,配置文件路径为/etc/config/network
,修改其中的 LAN 的 IP 配置 - Wifi 名为
OpenWrt
,未设置密码,配置文件路径为/etc/config/wireless
- 设计的脚本要求配置的设备占用为
/dev/usb/lp0
,使用的设备VID/UID
为3f0/2b17/100
,脚本路径为/etc/hotplug.d/usb/10-usb-printer
- OpenWrt 后台设置在