前排提醒:想玩这个东西的难度巨大,文档是完全没有,如果价格不合适或者对自己的水平没有信心,建议不要捡这个,非常容易翻车

前言

一时捡漏一时爽,一直捡漏一直爽!刷海鲜市场又看到了好东西,移动的IEG-100系列全千兆边缘智能网关,居然只要50一个??!果断找卖家开聊,卖家表示不能确认这个东西好坏,只知道1、能通电;2、硬件是arm平台;3、卖家完全不会玩,所以没法知道设备的情况。运费10,买两个也是10,所以就一下拍了一对,赌一把,寄了也不亏!拍完之后去网上找了下这个型号的资料,结果搜索结果为零?!牙白,只能到手再说了

外观

由于卖家是一图流,只有正面图,在拿到手之前没有太多信息,50一个的小玩意儿,也没太多看。卖家寄的顺丰,速度很快,包装很严实。收到手发现,一个是全新未拆封,另一个是工包。盒子长的都一样,但是型号略有不同,一个是IEG-100WP,一个是IEG-100W,怀疑区别是 POE ?但是面板没有 POE 的指示灯,两个都带天线,无风扇设备,下面有贴纸写了设备地址和默认密码(坑,后面说)

先来看设备图

点击展开/收合图片
Components

正面图

点击展开/收合图片
Components

背面图

点击展开/收合图片
Components

上电&折腾

和正常网络设备一样,有串口,9600试一下?不行,那就115200?对头。一启动看到 u-boot 就有了熟悉的感觉,是之前玩过的熟悉又折磨的马牌平台,价格超贵,性能超强,玩起来巨麻烦,继续一看,结束了?!全新未拆封的这个,他居然能没有系统???!就离谱,移动有你这样发货的吗……牛,还好我买了两个

稍微来说一下硬件,平台是马牌 Marvell Armada 3720 NM16 Board ,交换芯片 82xxx,内存是 1GB,核心数量虽然只有两个但是是真的强,之前玩 espressobin 的两核马牌装了 docker 之后跑宝塔+mysql+Typecho 是完全没有问题的,一点压力都没有,可是开发板是真的贵,一个居然要 1.2k ,然后现在好像国内还买不到了……,但是这个只要 50 ,soc 还是威力加强版,赢麻了!

接着看另一个工包的,工包的有系统,一眼 openwrt ,固件来源杭移实验室,但是魔改把 failsafe 模式干掉了,启动完需要登陆,就用底下贴纸试试吧?很好,密码不对,那么按照地址打开试试?结果是一个认证通过的页面,这不是根本不知道 web 管理在哪里嘛?贴纸贴了个寂寞……贴纸给的认证地址这里默认是免认证直接登录,那么我们退出用贴纸的admin账号登录一下捏?哒咩,提示该账号不存在。再试试物理按键 reset 呢?系统重启了,密码没变,看来这个按键只能重启系统,不能恢复密码。这下寄了,这还怎么玩嘛……想到或许是云管理的玩法,这下岂不是没法玩了,就算是自己编译 openwrt,这设备树自己是完全没法搞出来的,里面还有个马牌交换芯片驱动也搞不动,这下捡电子垃圾了……

摆了一会儿,还是得想想办法,100大洋不能就这样打了水漂,想到这个东西的 u-boot ,回想当时玩马牌平台的折磨回忆,想到这个玩意儿的引导参数是自己写的, printenv 看一下,哟呵,有了,只要我写个 init=/bin/sh 不就能进去了嘛,nice! 这样我只需要 passwd 直接改了密码,不就能有 root 权限了嘛,爽了

为了让大家也能爽,这里提供完整的 printenv 参数,有需要请自取

Marvell>> printenv
arch=arm
baudrate=115200
board=mvebu_armada-37xx
board_name=mvebu_armada-37xx
boot_prefixes=/
bootcmd=run load_image_mmc;run set_bootargs; booti $kernel_addr - $fdt_addr
bootcmd_mmc=run get_images_mmc; run set_bootargs; booti $kernel_addr - $fdt_addr
bootcmd_tftp=run get_images_tftp; run set_bootargs; booti $kernel_addr - $fdt_addr
bootcmd_usb=run get_images_usb; run set_bootargs; booti $kernel_addr - $fdt_addr
bootdelay=2
bootdev=root=/dev/mmcblk0p1 rw rootwait
console=console=ttyMV0,115200 earlycon=ar3700_uart,0xd0012000
cpu=armv8
eth1addr=00:51:82:11:22:11
ethact=neta@40000
ethaddr=00:51:82:11:22:00
ethprime=eth1
fdt_addr=0x7f00000
fdt_high=0xffffffffffffffff
fdt_name=boot/armada-3720-nm16.dtb
fdtcontroladdr=3f5ff3e8
gatewayip=10.4.50.254
get_images_mmc=mmc dev 1; ext4load mmc 1:${partition} $kernel_addr ${boot_prefixes}$image_name; ext4load mmc 1:${partition} $fdt_addr ${boot_prefixes}$fdt_name;
get_images_tftp=tftpboot $kernel_addr $image_name; tftpboot $fdt_addr $fdt_name;
get_images_usb=usb reset;fatload usb 0 $kernel_addr $image_name; fatload usb 0 $fdt_addr $fdt_name;
image_name=boot/Image
initrd_addr=0xa00000
initrd_size=0x2000000
ipaddr=192.168.1.10
kernel_addr=0x8000000
load_image_mmc=mmc dev 1; ext4load mmc 1:1 $kernel_addr $image_name;ext4load mmc 1:1 $fdt_addr $fdt_name
loadaddr=0x7000000
netdev=eth1
netmask=255.255.255.0
partition=2
rootpath=/srv/nfs/
serverip=192.168.1.100
set_bootargs=setenv bootargs $console $bootdev
soc=mvebu
stderr=serial@12000
stdin=serial@12000
stdout=serial@12000
vendor=Marvell

Environment size: 1631/65532 bytes

有了 root 权限,这下就好办了,netstat -nltp 看看 httpd 和 ssh (在 tcp/2222 ) 的监听端口,再看看配置文件,有了,web的管理地址是 9090 ,访问一下,果然有了,使用底部贴纸账号密码登录,非常好,寄啦!提示密码不对,在 /usr/local/lighthttpd 的服务目录底下有着一个 user.conf 的配置文件,但是里面的密码是加密的,算法是 md5 ,搞不动,再看 /var/www/html 的前端页面,什么?居然是世界最好的语言 php?!这下好办了,直接注释登录密码判断逻辑,然后直接admin账号空密码登录,进去之后,创建一个新的管理员账号,再把刚刚的登录逻辑注释掉,admin账号就不用了,使用我们刚刚创建的管理员账号就搞定

授权这块,我拿到的是个 demo 授权,只有 48 天,我试着改了下页面上的 php 判断逻辑,发现仅仅是 web 页面显示变化了而已,找获取 license 的函数,发现代码没有,找了下是个 php 的扩展,这下不好办了,找到 license 文件,试着改下名字看下失效后的效果,如下:

1、系统不能更新(这个不要紧,本身也更新不了,原因是既没有更新服务器地址也没有更新文件)
2、登录之后,发现会无限刷新闪屏,各个模块都打不开,只有授权模块可以打开

上面 1 的问题不需要解决也没法解决,2 的问题必须解决,于是首先改了下 php 的代码,但是发现重启之后会丢失,在 /etc/init.d 里面写开机脚本是不管用的,看了启动输出,应该是没有自启功能,杭移实验室的佬(佬还留了个彩蛋,佬的名字拼音是 xxxxxxxxxxx,万一大佬真看见我的文了,希望可以赏赐我一份不需要授权的最新版固件,哈哈) 应该是自己写了一个脚本在开机中执行,通过这一个脚本把他的服务(ssh\lighthttpd\php\mysql … etc.)起起来,并且每次会强制覆盖 /var/www/html 的静态文件,防止修改。又看了 license 文件和 php 代码里面的授权时间计算方法,不是简单按照时间计算的,是按照授权小时减去系统实际运行时间数来算的剩余时间,所以改系统时间也不行,不过看了框架代码之后发现,只需要把登录之后 index.php 改成 left.php ,就不会受到这个限制啦,即使过期了也能用起来,试了下过期状态随便改配置不会受到限制

来简单看下这个固件有的功能(Tips:不支持 vlan,不支持 WAN 转 LAN 口使用)

点击展开/收合图片

Components

Components

Components

Components

Components

Components

Components

Components

Components

Components

Components

Components

对于没有系统的那个设备,既然搞定一个,那从思路上就非常好办了,因为硬件基本一致,只需要插个 U 盘,dd 克隆一下就行

不过经常刷机的朋友都知道,要写固件,一般是需要一个“过渡固件”的,或者有不死 uboot 也行,这次玩这个平台,显然是没有不死 uboot,因为拿不到杭移实验室的固件,尝试使用有系统的 boot 分区的引导 image,发现启动时有写死路径的 emmc 挂载导致 kernel panic,所以我们就需要自己准备一个过渡固件,我这里因为正好玩过类似平台所以正好就有了过渡固件,那么只需要把设备树从 /boot 复制到 U 盘,再配合我的过渡固件,我们就能使用 dd 进行写入了,这里我提供我的过渡固件链接,账号 root 没有密码

https://wdv3.luckykeeper.site:44443/blog-resource/584feef21d9254830e6699e0c4543932f4415259d5c2dfc722a20671b738a117.7z

同时下面也提供引导命令和写盘命令,方便不大熟悉马牌 uboot 和 linux 的朋友

# Marvell U-Boot 引导命令,从 Marvell>> 后面复制
Marvell>> fatload usb 0 $kernel_addr luckyopenwrt-2.1-luckydrive-demo-mvebu-cortexa53-globalscale_espressobin-initramfs-kernel.bin;fatload usb 0 $fdt_addr $fdt_name;setenv bootargs $console root=/dev/sda1 rw rootwait;booti $kernel_addr - $fdt_addr;
# 写盘命令 if of 需要分清,建议别直接复制先去搜索 "linux dd命令"
dd if=./mmc.bin of=/dev/mmcblk0 bs=4M

dd 克隆的时间会很长,耐心等待一下,之后,两台设备完美捡漏,好耶!

总结

海鲜市场捡电子垃圾还是要谨慎,要不是我有马牌平台的折腾经验估计我一时半会儿还真拿他没招,从早上9点拿了快递回来一直折腾到凌晨3点,不过最后折腾出来的喜悦感是远远大于 100 块钱的,成就感满满~

如果你在未来的某个时候在海鲜市场看到了这款设备,又搜到了我的教程,那么希望我的教程能帮助到你捡漏~