不要把这篇文章透露给淘宝卖家
0x0 前言
闲鱼买了某防火墙,五个千兆口,60包邮
拆开看了下,是个Marvell的方案,有个pcie,有俩sata,512MB的内存,1G NAND
于是xjb搜了一波,发现了这个帖子 -> 传送门
很老了,2015年的帖子,作者给了个dts的patch。试了下发现不行,交换机那部分dts作者没写,只能用他自己做的。于是想自己移植一个玩一下。
0x1 xjb玩一下
插串口看下U-boot
u-boot功能还挺全,tftp有关的ip啥的改一下,准备刷机。
玩了一圈,uboot太老了不支持ubi分区。。。垃圾
然后进系统看看,后台好丑。。。这里没截图,它不给shell,但是ping功能可以命令注入。。。
0x2 编译固件
准备固件
原作者直接改了pogoplug e02的固件,然后交换机部分没写,估计是防淘宝卖家的。
于是xjb翻翻翻找了找同配置方案,把交换机芯片配置搞了一下
顺便把分区改了下,后面900多M全给ubifs
贴下我的patch,也是直接改的pogoplug e02
debian@debian-iot:~/seccn/openwrt/target/linux/kirkwood/patches-5.4$ ls
100-ib62x0.patch 103-iomega-ix2-200.patch 107-01-zyxel-nsa3x0-common-nand-partitions.patch 110-pogo_e02.patch
101-iconnect.patch 105-ea4500.patch 107-03-nsa325.patch 201-enable-sata-port-specific-led-triggers.patch
102-dockstar.patch 106-goflexnet.patch 109-pogoplug_v4.patch 202-linksys-find-active-root.patch
debian@debian-iot:~/seccn/openwrt/target/linux/kirkwood/patches-5.4$ cat 110-pogo_e02.patch
- model = "Cloud Engines Pogoplug E02";
- compatible = "cloudengines,pogoe02", "marvell,kirkwood-88f6281",
- "marvell,kirkwood";
-
- memory {
- device_type = "memory";
- reg = <0x00000000 0x10000000>;
- };
+ model = "SECCN AC80WT by naivekun";
+ compatible = "cloudengines,pogoe02", "marvell,kirkwood-88f6281",
+ "marvell,kirkwood";
+
+ memory {
+ device_type = "memory";
+ reg = <0x00000000 0x10000000>;
+ };
+
+ chosen {
+ bootargs = "console=ttyS0,115200n8 earlyprintk";
+ };
+
+ mbus {
+ pcie-controller {
+ status = "okay";
+
+ pcie@1,0 {
+ status = "okay";
+ };
- chosen {
- bootargs = "console=ttyS0,115200n8";
- stdout-path = &uart0;
+ };
+ };
+ ocp@f1000000 {
+ pinctrl: pin-controller@10000 {
+ pmx_usb_power_enable: pmx-usb-power-enable {
+ marvell,pins = "mpp29";
+ marvell,function = "gpio";
+ };
+ pmx_led_green: pmx-led_green {
+ marvell,pins = "mpp48";
+
+ };
+
+ port@5 {
+ reg = <5>;
+ label = "cpu";
+ ethernet = <ð0port>;
+ fixed-link {
+ speed = <1000>;
+ full-duplex;
+ };
+ };
+ port@6 {
+ reg = <6>;
+ label = "cpu";
+ ethernet = <ð1port>;
+ fixed-link {
+ speed = <1000>;
+ full-duplex;
+ };
+ };
+ };
+ };
- ethphy0: ethernet-phy@0 {
- reg = <0>;
- };
};
ð0 {
- status = "okay";
+ status = "okay";
ethernet0-port@0 {
- phy-handle = <ðphy0>;
+ speed = <1000>;
+ duplex = <1>;
+ };
+};
+
+ð1 {
+ status = "okay";
+ ethernet1-port@0 {
+ speed = <1000>;
+ duplex = <1>;
};
};
然后改几个地方
0x2.1 Makefile
加上ubifs打包的参数
- FEATURES加个ubifs
- MKUBIFS_OPTS和UBIFS_OPTS填一下,后面那些试出来的,写炸了会kernel panic
0x2.2 make menuconfig
改下target,选那个魔改的pogoplug
文件系统选上ubifs
0x2.3 board.d
改这个文件
~/seccn/openwrt/target/linux/kirkwood/base-files/etc/board.d/02_network
pogoplug那里改下默认配置
好了,选上常用的包,wireguard,pppoe,nat6啥的,make即可
make的时候建议挂上代理,要下很多东西
make完会生成这些东西
这里只需要上图的openwrt-kirkwood-cloudengines_pogoe02-ubifs-sysupgrade.bin
和下图的root.ubifs
0x3 来点骚操作
默认配置用的squashfs和overlay,不知道为啥挂不上。。。而且一个nand设备,用ubifs更清真
所以设法让这个东西跑在ubifs上
前文提到了u-boot不支持ubi,但是又不敢自己做u-boot。。。刷炸了就gg了,nand编程器好几百
于是这么搞
0x3.1 kernel
找到前文提到的openwrt-kirkwood-cloudengines_pogoe02-ubifs-sysupgrade.bin
,解压缩,有个名字是kernel的文件,把他拿出来。
这个就是内核。它源码有bug,uboot给他的bootargs里mtdparts无效。。。。懒得修,不影响用
0x3.2 ubi
接下来制作ubifs文件系统
找到前文提到的root.ubifs
注意这个东西不能直接塞进去用,它是ubifs,要刷进去的是ubi分区
于是找到了这个工具 -> ubinize
用它把ubifs做成ubi分区
写个配置文件
然后打包
ubinize seccn.ini -p 128KiB -m 2048 -s 512 -o seccn.ubi.img
0x4 刷进去
插上网线插上串口,开机进uboot
如图先把kernel刷进去
然后刷文件系统
后面还有一行nand write 0x02000000 0x00900000 0x5e0000
自己编译出来文件系统的话,改下最后一个大小
偏移看好别写错。。。uboot写没了就凉了
最后改下bootargs
就搞完了
0x5 end
开机正常跑过kernel,挂载ubi,进系统就没问题了,出现玄学就把报错塞google里面
随便玩了一下,挺快的,果然防火墙就是牛逼,比那些路由器不知道好到哪里去了
网卡和交换机+VLAN都OK
sata口和pcie也没问题,后续找个万兆卡接上去。板子后面那个6pin接口就是给sata用的,顺时针两个gnd两个5v两个12v
后续用它做个轻nas+软路由也行,查了下好多商用nas就是用的同款cpu
要固件的给我发邮件