你可能觉得我很搞笑,别人都是光猫改桥接,路由器装OpenWRT然后才是natmap
但是这样光猫的高配置(这可不是开玩笑,256M NAND + 512M DDR2 A9双核)
/# cat /proc/meminfo
- MemTotal 470944 kB (459.9MB)
- MemFree 368528 kB (359.8MB)
- MemAvailable 417992 kB (408.1MB)
/# df
Filesystem 1K-blocks Used Available Use% Mounted on /dev/mtdblock2 4096 424 3672 10% /tagparam/usr/cpkTmp /dev/mtdblock4 4096 840 3256 21% /important_bak /dev/mtdblock5 8192 1404 6788 17% /userconfig /dev/mtdblock12 30720 14464 16256 47% /usr/local/osgi /dev/mtdblock11 101760 10752 91008
(88.8MB)11% /usr/data /dev/mtdblock13 2048 812 1236 40% /usr/local/upgrade_module /dev/mtdblock14 640 424 216 66% /GN25L95_datas /dev/mtdblock8 4096 396 3700 10% /wlan
多么阔绰的内存空间?
多么人性化的大块存储空间?(89M 使用空间)与其桥接当摆设,不用白不用,何不用起来呢
(不要和软路由去比,有本事和市面上一百元以上的硬路由来比啊,存储空间16M就已经相比较来很大了)
考虑:开telnet
这一步很关键,但是网上大多有教程。
不过我的光猫就不需要我折腾,直接暴露telnet设置
对于ZTE耍流氓新光猫,可以使用https://github.com/douniwan5788/zte_modem_tools的这个脚本,一次成功
(没错,我就是telnet登进去后大肆修改,然后固件就废了,换了新光猫)
(注意,需要先重置光猫使其恢复默认超管密码)
考虑:拉取natmap程序
首先考虑指令集,cat /proc/cpuinfo
~ $ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 1 (v7l)
BogoMIPS : 1594.16
Features : half thumb fastmult edsp tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x4
CPU part : 0xc09
CPU revision : 1
processor : 1
model name : ARMv7 Processor rev 1 (v7l)
BogoMIPS : 1594.16
Features : half thumb fastmult edsp tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x4
CPU part : 0xc09
CPU revision : 1
Hardware : ZTE ZX279128 (Device Tree)
Revision : 0000
Serial : 0000000000000000
ZXIC芯片资料很少(闭源的都是**),最后去官方资料手册里摘来了这些
ZX279128S是一款支持xPON接入的家庭网关芯片。xPON接入支持GPON/EPON/P2P三模;遵从G.984的GPON标准,以及802.3—2005、CTC的EPON设备技术要求,具备良好的xPON互通兼容性。
ZX279128S是一款功能强大的SoC(System on Chip)芯片。芯片内嵌ARM Cortex A9双核处理器 以及丰富的外设,使用AXI高性能总线实现互联,CPU的频率达到1000MHz,可实现复杂协议报文的处理。
内嵌四路GE PHY的Ethernet接口以及提供外接PHY的RGMII接口。芯片支持强大的宽带业务处理能力。支持L2/L3组播转发、L2桥接、L3路由以及NAPT等业务处理功能:支持IPv4和IPv6双栈以及DS-Lite,6RD功能;支持丰富灵活的流分类功能;支持HQoS(Hiberarchy Quality of Service) 实现层次化QoS。
ZX279128S芯片是针对ONU产品高性能市场的解决方案,集成了包含PON serdes等外设接口,内置了双核cortex—A9处理器。为了支持EPON/GPON 等业务应用,ZX279128S内部集成了PON的加速器,并通过serdes接口与外界交互,具有较强的GPON和EPON协议处理功能,支持G.983、G.984和IEEE802.3ah协议。提供流量管理、QoS、组播、加密解密、业务流分类、桥接、NAPT、PPPoE等业务处理功能。此外,ZX279128S集成了丰富的外设接口,包括UART、SPI、I2C、MDIO、GPIO等,可以支持多种BOOT方式。此外,ZX279128S支持常用低功耗机制,包括CPU的睡眠唤醒、时钟动态调整、时钟门控、功能模块Powerdown 模式以及DDRIO的低功耗模式,可以大大降低芯片的整体功耗。
双核的Armv7架构处理器,不错哦(常见的光猫都是单核心的)
ARMv7就是32位的ARM处理器,v8几乎不可能出现(aarch64)
那么就是 https://github.com/heiher/natmap/releases/download/20240126/natmap-linux-arm32
PS 一般移动PCB设计部都很偷懒的,这颗CPU支持USB3却不肯引出来,PCIE2也没有使用,支持DDR3-1600的处理器就是只用DDR2-800...
如果有curl
~ $ curl --version
curl 7.68.0 (arm-buildroot-linux-gnueabi) libcurl/7.68.0 OpenSSL/1.1.1i zlib/1.2.11
Release-Date: 2020-01-08
Protocols: http https tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets
太棒啦,有curl事半功倍
直接curl就行了,支持HTTPS
curl https://github.com/heiher/natmap/releases/download/20240126/natmap-linux-arm32 -o natmap
chmod +x natmap
/natmap
没有也不要急
但是 wget 只支持 http,所以务必准备自己的HTTP服务器
(其实tftp服务器也是可以的)
比如我使用nginx,将natmap放在网页根目录,下载
cd /tmp
wget http://192.168.1.10/natmap -O natmap
chmod +x natmap
./natmap
这个很重要,划重点
注意:根目录大多是有CRC校检的或者直接打包进内核的,bin这类文件夹大多放在根目录。所以想要重启后不消失或者不变砖,建议找/usr/data
,空间也大
考虑:动态更新
在这么精简的系统内,如何处理 请求更新 呢?
那只有使用 curl 才行。如果没有请使用 wget
这是自动更新脚本的参数列表
argv[0]: Script path
argv[1]: Public address (IPv4/IPv6)
argv[2]: Public port
argv[3]: IP4P
argv[4]: Bind port (private port)
argv[5]: Protocol (TCP/UDP)
argv[6]: Private address (IPv4/IPv6)
所以脚本也很好写:
#!/bin/sh
# 换成自己的动态重定向服务,如我的是redirect.php
curl https://[你的服务地址]?addr=$1:$2
# wget也可以,但是不支https
wget http://[你的服务地址]?addr=$1:$2 -O - >> /dev/null
直接使用 cat > bin/update.sh
,输完了 Ctrl+D
即可
(如果系统很好心提供了vi
,那就更方便了)
#!/bin/sh
curl https://....?addr=$1:$2 ^D
这样就OK了
开机自启
参考了这篇文章,不仅干掉了java插件系统,大幅度优化之外还提供了自启动管理
但是还是不能照抄,因为我们的java挂载不是镜像,而是完整的磁盘分区
Filesystem | 1K-blocks | Used | Available | Use% | Mounted on |
---|---|---|---|---|---|
/dev/mtdblock12 | 30720 | 14464 | 16256 | 47% | /usr/local/osgi |
那就更好办了,直接find出手找到java文件
~ $ cd /usr/local/osgi/
/usr/local/osgi $ find ./ -name java
./local/j2re/bin/java
替换成以下内容就行了
#!/bin/sh
if [ ! -f /tmp/started ] && [ -f /usr/local/osgi/start.sh ]; then
/usr/local/osgi/start.sh
if [ -f /mnt/usb1_1/autorun.sh ]; then
/mnt/usb1_1/autorun.sh
fi
touch /tmp/started
else
echo "device already started"
fi
exit 1
由于natmap很小,我直接建文件夹bin,放在了bin文件夹里
然后start.sh这么写
bin/natmap -4 -k 8 -s stunserver.stunprotocol.org -h baidu.com -t 192.168.1.2 -p 80 -d -e bin/update.sh
OK!全文完。
接下来我会继续讲述我是如何一步一步使光猫变成NAS的,敬请期待!
本文由 zlh 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。