|
本帖最后由 SpiralZone 于 2024-1-21 00:32 编辑
0x00 前言
- 整个过程中参考了恩山各位大神的帖子,再次表示感谢,帖子出处和链接放在文末,作为引用的参考文献,以尊重原作者的工作和贡献;
- 主要针对丐版低配置小路由器,TP-Link的WR720N、WR703N路由器,配置:ROM 4MB,RAM 32MB-DDR1,处理器 AR9331-单核-400MHz,由于闪存只有4MB 因此只能安装精简版的op系统;
- 文中用到的刷机固件和脚本,均整理好,放在附件中;
- 文中一些简写字段说明:
1. op: OpenWRT
2. 文中的密码123456为举例,自己结合实际更改即可
- 文中用到的固件梳理:
1. op-wr703n-v1-jiesuo.bin 解锁用op固件
2. breed-703n.bin 不死鸟引导系统
3. 703n-print-4m.bin 带打印服务的op固件4MB闪存专用版(适合WR703N路由器)
4. sihpP1007.dl p1007打印机固件
5. 10-usb_printer 完善后的usb热插拔运行脚本
0x01 简要梳理TP-link WR703N刷机过程(Openwrt)
1 连接-登录-配置WR703N路由器
- 路由器连接5V Micro-USB供电;
- 一根网线连接笔记本和路由器网口(路由器唯一的网口就是LAN口);
- 浏览器访问 192.168.1.1,进入路由器后台,用户名和密码均为 admin;
- 记录信息
+++++++++++++++++++++++++++++++++++
[设备信息]
- 当前软件版本:3.12.11 Build 120228 Rel.43313n
- 当前硬件版本:WR703N v1 00000000
- 当前工作模式:3G 路由模式
[AN口状态]
- MAC地址: xx-xx-xx-xx-xx-xx(自己的路由器MAC地址)
+++++++++++++++++++++++++++++++++++
- 重点是记录自己的MAC地址信息,后面要用到。
2 刷入解锁OP固件
- 路由器后台,系统工具 -> 软件升级,定位到解锁OpenWrt固件op-wr703n-v1-jiesuo.bin,开始升级;
- 路由重启,重新登入后台,登192.168.1.1,输入密码:root进入系统;
- 设置新密码 123456,不设密码无法使用putty和winscp通过ssh连入op的后台。
3 备份路由器的分区内容
- putty接入路由器后台(root, 123456),获取分区信息
命令 cat /proc/mtd
返回
+++++++++++++++++++++++++++++++++++
dev: size erasesize name
mtd0: 00020000 00010000 "u-boot"
mtd1: 000f79d4 00010000 "kernel"
mtd2: 002d862c 00010000 "rootfs"
mtd3: 00060000 00010000 "rootfs_data"
mtd4: 00010000 00010000 "art"
mtd5: 003d0000 00010000 "firmware"
+++++++++++++++++++++++++++++++++++
- 备份各个分区
命令
dd if=/dev/mtd0 of=/tmp/u-boot.bin
dd if=/dev/mtd1 of=/tmp/kernel.bin
dd if=/dev/mtd2 of=/tmp/rootfs.bin
dd if=/dev/mtd3 of=/tmp/rootfs_data.bin
dd if=/dev/mtd4 of=/tmp/art.bin
dd if=/dev/mtd5 of=/tmp/firmware.bin
备份完毕后,文件会存到op路由器的./tmp/路径下,我们用winscp把他拖动(复制)到计算机本地;
- 以后路由器如果折腾刷机变砖,直接使用breed将各个分区刷回即可。
4 刷入Breed不死鸟固件
- winscp接入路由器op后台(root, 123456),上传breed-703n.bin固件到./tmp/目录下;
- putty接入路由器后台(root, 123456),进入/tmp/路径下,输入刷机命令:
mtd write breed-703n.bin u-boot
- 刷机完毕后,重启路由器,按住reset键,通电开机,按住10秒后松开,浏览器192.168.1.1进入breed控制台;
- 在breed中,修改MAC地址为自己之前保存的MAC地址 xx-xx-xx-xx-xx-xx(按照之前自己的记录的MAC修改),否则会丢失无线。
5 刷入703n-print-4m专用固件(编程器固件)
- 在breed中,刷入带打印机服务的op固件 703n-print-4m.bin,注意选择“编程器固件方式”刷入;
- 重启路由,192.168.1.1登入OP后台;
- 设置root密码: 123456 (顺便就开启了SSH访问);
- 【切记!!!】在OP的打印服务里,关闭双向打印模式(重要,否则打印机会打印不停)。
-------------------------------
[到这里我们需要梳理一下思路,再进行后续设置,就是搞清楚我们的“打印机专用路由器WR703N”与“家中主路由器”的关系]
- WR703N路由器usb口接打印机;
- WR703N路由器wan口无线wifi接入家中主路由器(假设网段为10.0.0.x);
- WR703N路由器lan口一般不用,带dhcp服务(通常网段为192.168.1.x),调试时笔记本网线直接接入lan口,访问 192.168.1.1 可以进入op后台;
- 路由器打印服务监控所有端口(lan和wan),提供打印服务,也就是说无论是 10.0.0.x 网段设备,还是 192.168.1.x 网段设备,都能够调用打印机。
-------------------------------
[在op的防火墙里放行wan口]
- 在OP的防火墙设置里,wan口规则里,入站设置为接受,具体如下:
[区域 => 转发(wan口)]
- 入站数据:默认拒绝,改为接受
- 出站数据:默认接受,保持
- 转发:默认拒绝,改为接受(此处可以保持拒绝,但是无脑全部设置为接受更简单)
- 这样,我们接入主路由的电脑+手机+笔记本(10.0.0.x网段),可以访问二级路由器(WR703N)的op系统后台进行管理,可以发现网络打印机,并调用网络打印服务。
0x02 对于HP P1007等老式GDI打印机的兼容支持操作
- 核心任务:让WR703N路由器下发固件给打印机,下面开始操作;
- winscp接入路由器op后台(root, 123456);
- 放入hpP1007打印机固件文件 sihpP1007.dl,到路径./usr/lib/,修改文件权限755;
- 放入hpP1007打印机usb热插拔脚本 10-usb_printer,到路径./etc/hotplug.d/usb/,修改文件权限755;
- 至此,我们路由器的刷机和配置工作已经完成。
0x03 完成以上配置后,在ssh命令行中进行检查,确保万无一失
- 【检查1】putty接入路由器后台(root, 123456),输命令:dmesg | grep printer,返回类似以下信息:
[ 9.940000] usblp 1-1:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x03F0 pid 0x4817
[ 82.470000] usblp 1-1:1.0: usblp0: USB Bidirectional printer dev 3 if 0 alt 0 proto 2 vid 0x03F0 pid 0x4817
则表示usb口打印机识别成功。
- 【检查2】继续查看监控端口,输命令:netstat –an,返回类似以下信息:
tcp 0 0 :::9100 LISTEN
表示打印服务p910nd运行成功(该服务占用9100端口)。
- 【检查3】按打印机上的按钮,重启打印机,如果正确配置了(即:路由器会下发sihpP1007.dl固件给打印机),则打印机会连续2次发出启动时的声音,并伴有黄灯、红灯交替闪动;
- 【检查4】用winscp连接路由器,检查路径./tmp/下,如果出现了hp-log日志文件,表示usb热插拔脚本执行成功;
- 如果以上四个检查全部通过,那么基本可以确定,我们的网络打印机已经配置成功。
0x04 备忘录:应急手动操作(基本用不到)
- 使用当前的10-usb_printer热插拔脚本,以下情况基本不会出现,但是为了以防万一,把应对方法记录在此,作为备忘;
- 【手动下发固件到打印机】如果遇到打印机开机后,没有黄灯、红灯交替闪烁,则表示路由器没有成功下发固件到打印机,这时可以手动发送打印固件:
putty接入路由器后台(root, 123456),输入命令:
cat /usr/lib/sihpP1007.dl > /dev/usb/lp0
[注意,应预先已经把sihpP1007.dl固件文件放在了路由器的/usr/lib/路径下]
然后就可以看到打印机红灯闪烁,并伴有运行响动,表示固件下发成功。
- 【手动重启打印服务】在固件已经成功下发给打印机的情况下,有时,由于家中的局域网接入手机、平板、笔记本等多种设备,这些设备轮流交替调用网络打印机,难免出现打印任务失败,一个打印任务失败就会使WR703N路由器上运行的p910nd打印服务发生拥塞卡死,之后别的笔记本设备再使用网络打印都会失败。此时的问题就是路由器op系统的p910nd服务卡死,需要重启服务即可解决。两种方法:
- 方法1:浏览器访问二级路由(即WR703N)IP地址,进入op的管理界面,进入打印服务,保存应用一下;
- 方法2:putty接入路由器后台(root, 123456),输入命令:
/etc/rc.d/S50p910nd restart
(命令中的 S50p910nd 有时也可能是 S70p910nd,取决安装ipk包的版本,可以自己查看路由op系统的/etc/rc.d/路径下文件,填写相应的文件名即可)
- 【强制usb热插拔脚本执行】有时,我们放置在/etc/hotplug.d/usb/路径下的热插拔脚本10-usb_printer似乎并没有执行,现象就是:1、路由器没有下发固件给打印机;2、路由op系统的/tmp/路径下,并没有生成我们的hp-log日志文件。这其实是由于我们的脚本代码编写可能存在错误,在执行中遇到错误直接退出了,后续的脚本代码并没有执行。此时,我们可以删除脚本前段的 set -e 这一行,强制让脚本执行下去,一般打印机再次开机后就会收到路由下发的固件,一切恢复正常。
0x05 改造后的网络打印机日常使用方法梳理
1. win系统添加网络打印机注意:务必去掉勾选【启用双向支持】;
操作:已经添加的P1007打印机 右键 -> 属性 -> 端口 -> 不勾选【启用双向支持】
2. 安卓手机使用PrintHand应用进行打印(请自行搜索下载);
3. 每次打印机开机,红灯+黄灯一起闪烁,才表示路由器下发固件给打印机正常,并且,会下发两次固件(打印机运转响动2次);
4. 如果打印任务失败,打印任务拥塞卡死,重新开关一次打印机即可;
- 开关打印机后,相当于做了两件事情:1. 路由器重新下发了固件给打印机;2. 重启路由里面的p910nd打印服务。这样再次打印,一般就会恢复正常。
5. 简洁概括:
- 打印机开机,闪烁红黄灯,连续两次响,放心开始用;
- 使用过程中,打印如失败,重启打印机,问题无影踪。
0x06 深入理解:usb热插拔脚本剖析和改进
1 原始在恩山找到的打印机代码(已经写得很好)
- #!/bin/sh
- set -e
- # change this to the location where you put the .dl file:
- FIRMWARE=/usr/lib/sihpP1007.dl
- DEVICE=/dev/usb/lp0
- LOGFILE=/tmp/hp-log
- if [ "$PRODUCT" = "3f0/4817/100" -a "$DEVTYPE" = "usb_interface" ]; then
- case "$ACTION" in
- add)
- echo "`date`: HP LaserJet P1007 added" >> $LOGFILE
- echo "`date`: STARTING" >> $LOGFILE
- for i in $(seq 30); do
- echo "`date`: Attempt Number $i on $DEVICE" >> $LOGFILE
- if [ -c $DEVICE ]; then
- echo "`date`: Device $DEVICE found" >> $LOGFILE
- if [ -z "`usb_printerid $DEVICE | grep FWVER`" ]; then
- echo "`date`: No firmware found on $DEVICE" >> $LOGFILE
- echo "`date`: Sending firmware to printer..." >> $LOGFILE
- cat $FIRMWARE > $DEVICE
- echo "`date`: Done" >> $LOGFILE
- else
- echo "`date`: Firmware already there on $DEVICE" >> $LOGFILE
- fi
- echo "`date`: EXITING" >> $LOGFILE
- exit
- fi
- sleep 1
- done
- echo "`date`: Done" >> $LOGFILE
- ;;
- remove)
- echo "`date`: HP LaserJet P1007 removed" >> $LOGFILE
- echo "`date`: Done" >> $LOGFILE
- ;;
- esac
- fi
复制代码 由于代码无高亮着色,截图如下,便于阅读。
2 进行的改动
- 【删减代码】原始脚本中,有一句代码,在ssh中验证无法执行:
usb_printerid $DEVICE | grep FWVER
这里的usb_printerid函数在当前的op系统ssh中根本找不到,需要交叉编译系统源码才能加入;
这个代码的本意是好的,检测op系统是否已经下发固件给打印机,如果下发则不会重复下发固件。但是由于usb_printerid函数在这里无效,打印机开机后,依然会响动两次,下发两次固件给打印机(好在并不影响我们实际使用);
所以,如果使用linux开发板来改造网络打印机,可以加上这个函数,这样代码更加优雅完美;但是我们的op相当于精简版的linux,并没有这个函数,所以这个代码放在这里是多余的,从脚本中删除该段代码。
- 【增加代码】直接在脚本中内置重启p910nd打印服务代码,打印机开机后,路由op系统无脑重启2次p910nd打印服务,这样我们在打印中如果遇到p910nd打印服务卡死,直接手动重启打印机即可,不必再通过浏览器进入op后台,重启打印服务。
- 修改我们的usb热插拔脚本,在里面直接放入重启打印服务的代码:
sleep 3
/etc/rc.d/S50p910nd restart
- 思路就是:每次开关一次打印机,usb热插拔脚本除了下发固件给打印机,然后还要重启一次op路由器的p910nd打印服务,防止服务假死;
- 这样,每当打印机的打印发生假死无响应时,我们就开关一次打印机,于是:
1. 路由重新下发固件给打印机;
2. 路由自己重启p910nd打印服务。
- 然后,我们就可以愉快打印了,省去了我们需要定期进入op后台,重启打印服务的麻烦。
3 最终的usb热插拔脚本10-usb_printer定稿
- #!/bin/sh
- set -e
- # change this to the location where you put the .dl file:
- FIRMWARE=/usr/lib/sihpP1007.dl
- DEVICE=/dev/usb/lp0
- LOGFILE=/tmp/hp-log
- PRINTSERV=/etc/rc.d/S50p910nd
- if [ "$PRODUCT" = "3f0/4817/100" ]; then
- case "$ACTION" in
- add)
- echo "`date`: HP LaserJet P1007 added" >> $LOGFILE
- echo "`date`: STARTING" >> $LOGFILE
- if [ -c $DEVICE ]; then
- echo "`date`: Device $DEVICE found" >> $LOGFILE
- echo "`date`: Sending firmware to printer..." >> $LOGFILE
- cat $FIRMWARE > $DEVICE
- fi
- sleep 3
- $PRINTSERV restart
- echo "`date`: Done" >> $LOGFILE
- ;;
- remove)
- echo "`date`: HP LaserJet P1007 removed" >> $LOGFILE
- echo "`date`: Done" >> $LOGFILE
- ;;
- esac
- fi
复制代码 由于代码无高亮着色,截图如下,便于阅读。
4 脚本10-usb_printer逐行注释解析,方便大家fork修改
- 一图胜千言,代码注释如下图所示。
0x07 路由器WR703N+打印机HP P1007实物图
- 路由器WR703N可以用纳米胶粘在打印机上;
- 打印机HP P1007实物图。
0x08 附件资源
0x09 参考文献
- [01] 关于OpenWrt共享打印机P910nd+HP P1007+HG255D-恩山无线论坛
https://www.right.com.cn/forum/thread-212810-1-1.html
- [02] p910nd结合luci-app-usb-printer支持多台打印机
https://www.right.com.cn/FORUM/thread-8272164-1-1.html
- [03] 关于OP系统打印机服务P910nd支持GDI打印机1020方法-恩山无线论坛
https://www.right.com.cn/forum/f ... wthread&tid=1313548
- [04] OpenWrt共享打印机P910nd+HP P1007+HG255D已成功不完美-爱刷机
https://iqqoz.com/post-3124.html#gsc.tab=0
- [05] OpenWrt固件usb打印机重启后不能打印怎么办-爱刷机
https://iqqoz.com/post-2728.html#gsc.tab=0
- [06] WR703n 改无线打印服务器 4M固件 编程器固件-OPENWRT专版-恩山无线论坛
https://www.right.com.cn/forum/f ... 9846&highlight=703n
- [07] TP-LINK TL-WR703N 打印服务器固件(By_iYuguo)-OPENWRT专版-恩山无线论坛
https://www.right.com.cn/forum/f ... 6093&highlight=703n
- [08] TP-LINK TL-WR703N CUPS打印服务器固件-中文-OPENWRT专版-恩山无线论坛
https://www.right.com.cn/forum/f ... 3827&highlight=703n
- [09] TP-LINK-TL-WR703N刷Breed用Openwrt固件挂HP1020P打印机-简书
https://www.jianshu.com/p/2a79201c47c3
- [10] TP-LINK-TL-WR703N V1.7最新固件,免TTL刷OpenWRT刷Breed-恩山无线论坛
https://www.right.com.cn/FORUM/thread-184971-1-1.html
- [11] TP-Link-TL-WR703N路由器刷Breed,刷打印服务,网络配置及补丁加载-CSDN博客
https://blog.csdn.net/z3h/article/details/126795545
- [12] TP-LINK-TL-WR703N刷Breed,用OpenWRT固件挂MP288打印机服务-CSDN博客
https://blog.csdn.net/jinwei29/article/details/105817455
- [13] OpenWRT中安装HP-P1007打印机-知乎
https://zhuanlan.zhihu.com/p/659839044
【END】
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|