魔改某防火墙,移植Openwrt

不要把这篇文章透露给淘宝卖家

0x0 前言

闲鱼买了某防火墙,五个千兆口,60包邮

图是随便找的,实物比这个少1个口

拆开看了下,是个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 = <&eth0port>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+                       port@6 {
+                               reg = <6>;
+                               label = "cpu";
+                               ethernet = <&eth1port>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
+        };
 
-       ethphy0: ethernet-phy@0 {
-               reg = <0>;
-       };
 };
 
 &eth0 {
-       status = "okay";
+        status = "okay";
        ethernet0-port@0 {
-               phy-handle = <&ethphy0>;
+               speed = <1000>;
+               duplex = <1>;
+       };
+};
+
+&eth1 {
+        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

要固件的给我发邮件