J1900软路由加装无线网卡做AP折腾记

  • 2018-10-17
  • 11,861
  • 22
  • 11

家里无线设备多,唯一的一台出口路由器是小米路由器3 Pro负载逐渐上升,这玩意刚到手用着一直没啥问题,很久不重启都没事,但是随着设备多了,就开始时不时卡死,连管理界面都打不开,只能重启。硬路由一般用的都是MIPS之类的架构,带机能力有限,网上看到真正的带机神器其实是软路由,就是用一台x86的机器装上路由相关的软件虚拟成路由器用。一直心心念念了很久想搞一台,但一直没入坑,终于前段时间终于忍不住入了台J1900的四口软路由:

话说回来其实这种机器本来叫做工控主机,主要用在工业控制现场完成一些任务处理的,装上路由系统用在家里,就变成软路由了,我选的这款用的是Intel J1900四核处理器,性能相当可以的,有4个Intel I211千兆网口,加上2个USB,1个HDMI,1个VGA,看上去可玩性相当高,而且预留了天线接口,不过买之前卖家就提醒了,这货由于四个千兆网卡占用了cpu所有的pci-e通道,所以如果要装无线网卡虚拟AP的话,只能用USB定义的无线,一开始这番话我并没有太放在心上,然而路由到手之后,没想到这就成了折腾的开始。

好了,到手第一件事——拆开看一眼,这里顺便补充一下我买的配置:2G内存+32G SSD,其实到这里根据我的经验来说,如果不打算装windows或者想跑虚拟化系统的话,系统盘不用太大,像我只用openwrt系统的,一般会选择squashfs文件系统,因为可以恢复出厂设置,然而squashfs是不可写入的,所以系统盘那么大没必要,而且也没法用来存我们自己数据,主机里还留了一个SATA借口,更倾向于选择再挂一个更大的2.5寸硬盘来做NAS共享用,机器拆开如图:

可以看到红圈的地方是除了msata接口之外多出来mini pcie接口,于是我就想着加一个mini pcie无线网卡然后把天线连出来发射AP。然而我想当然的就认为只要找一个openwrt下有驱动的mini pcie无线网卡插上去就能在luci界面里用了,另外由于机箱外壳上只留了2个天线柱的接口,所以找个双天线的网卡最合适,最后挑了一下,选择了QCA9882,5G单频nac,2x2MIMO,最高速率867M的无线网卡,选定之后很快下单了:

不过,这并没有什么卵用,等无线网卡到了以后,风风火火的马上装上,开机,然而,不识别。。lspci命令里根本没有无线网卡设备。。一开始我一度以为是无线网卡坏了,问了卖软路由的老板才知道,之前说的pci-e通道被都被千兆网卡占用了不是随便说说的,指的就是,这个剩下的mini-pcie接口上面,就没有pcie的信号线了,是个usb only的接口,可以转换出usb接口用,但是pcie无线网卡不识别的。也就是说可以支持RT3070这种虽然是mini pcie接口但是走的是mini pcie座子上的usb总线的网卡才能用:

再或者,用华为的3G/4G无线模块也是可以的,走的也是USB总线,并且主板上接口旁边也预留好SIM卡座了,猜测这个mini pcie在原设计中就是留给3G/4G模块用的,天线也是给3G/4G天线留的。

否则的话,要么用转接板把usb接口转出来用,想要接pcie总线的无线网卡是不可能的。

难道只能用USB无线网卡了?但是RT3070这货只支持2.4G啊,而且速度只有150M,对于追求完美的我来说,我想要个5G ac的卡啊。并且,我真的不想在机箱上USB接口上再接东西,只想用内置的网卡。然而,我找遍了走USB总线的mini pcie无线网卡,只发现一款符合要求,那就是RT5572:

这货只有LiteON WN6500RH这款网卡是pci-e接口的,如上图,然而。。找遍了TB,没货。。。没货。。。这不还是坑爹嘛。。

无奈之下,后来我又找到了一款RTL8812BU的无线模块,双天线,USB接口,1200M双频支持ac,但是是模块,需要自己焊接4根USB线,不过也没别的办法了,只能把mini pcie转出usb接口来,然后直接焊线接上无线模块来用,话不多说,果断下单。

到手之后,果断焊上,焊上的效果如图:

完成,开机。。然而,不识别。。。我以为又是usb不支持,然而我把转换出来的usb接口直接接U盘,又是没问题的,这是为什么呢?后来折腾了半天,原来是因为pci-e接口的3.3V供电电压太低了,只有3.1V,由于我买的模块是3.3V供电的,我不敢直接接5V,于是直接焊在pci-e的3.3V电源处,然而没想到这货这么辣鸡,3.1V就不工作了,于是果断直接接USB的5V,正常识别,而且模块好像也没事啊。。这不还是坑爹么。。早说啊。。

然后下一步,驱动。。由于8812BU并不是openwrt原生就带驱动的,只能找第三方驱动。接着就开始了艰难的编译驱动之路,找了n版驱动,有的直接编译不过,有的编译完了直接kernel panic,大部分驱动,都只支持4.4以前的内核版本。一开始我用的是RTL8812AU的驱动,然而完全不工作,8812BU的USB id是0bda:b812,网上查了一下,这个desc应该用RTL8822BU的驱动,晕,还是坑爹。

最终,找到了这个驱动,可以在高版本4.14以后的内核里工作https://github.com/y0urself/rtl8822bu,不负所望,这次编译通过。。然后加载,很不幸。。kernel panic….

也就是说驱动还有点问题,根据提示,找到出错的函数,然后分析panic原因,一通瞎patch,最终,终于可以成功加载8822bu的驱动了。可是,这驱动并不能在luci界面里控制,只能用iw程序来控制,或者自己写控制脚本。这也太不方便了,还是坑爹了。

也许到这里,大家认为我最后还是打算放弃了,然而并不是的,还是打算再挣扎下。

还有一个终极方案没尝试过,那就是,不是说Intel I211网卡把pci-e通道都占满了吗,多出来的mini-pcie座子上没有pcie的信号线,那如果我拆掉一个Intel I211芯片,然后把原本接在Intel I211芯片上的pci-e线直接飞线到mini pcie座子上呢?

不多说了,试试吧,首先,我们找一下Intel I211芯片的datasheet,看一下引脚图:

首先两个红圈里的就是和PCIe信号有关的引脚了,其中PE_Rp,PE_Rn和PE_Tp,PE_Tn是两对pcie的差分信号,PECLKp和PECLKn是pcie的时钟,理论上来讲,只需要把这6根线飞线到mini pci-e的座子上对应地方就可以。接下来我们看一下Mini pcie插座的定义:

Top side Bottom side
1 2 3.3V
3 Reserved**** 4 GND
5 Reserved**** 6 1.5V
7 CLKREQ# 8 VCC**
9 GND 10 I/O**
11 REFCLK- 12 CLK**
13 REFCLK+ 14 RST**
15 N/C or GND 16 VPP**
Mechanical key
17 Reserved 18 GND
19 Reserved 20 Reserved***
21 GND 22 PERST#
23 PERn0 24 +3.3Vaux
25 PERp0 26 GND
27 GND 28 +1.5V
29 GND 30 SMB_CLK
31 PETn0 32 SMB_DATA
33 PETp0 34 GND
35 GND 36 USB_D-
37 Reserved* 38 USB_D+
39 Reserved* 40 GND
41 Reserved* 42 LED_WWAN#
43 Reserved* 44 LED_WLAN#
45 Reserved* 46 LED_WPAN#
47 Reserved* 48 +1.5V
49 Reserved* 50 GND
51 Reserved* 52 +3.3V

*Reserved for future second PCI Express Lane (if needed). Pin 51 has changed to be W_DISABLE2#
**Reserved for future Subscriber Identity Module (SIM) interface (if needed)
***Reserved for future wireless disable signal (if needed)
****Reserved for future wireless coexistence control interface (if needed)

可以看到上面标红的位置就是我们需要飞线焊接的位置了,话不多说,直接开干吧:

如上图,看不清楚的话可以直接下载原图,其中PERp PERn PETp PETn这4根线在可以焊在I211芯片边上的4个电容左侧,但是PECLKp和PECLKn这两根线没办法只能焊在芯片的焊盘上了,比较考验技术。另外注意一点,我右侧座子上标记的信号名和实际座子的定义是反过来的,因为PCIe的接法里面,发送端的PETp要接接收端的PERp,PETn接PERn,接收端的PETp要接发送端的PERp,接收端的PETn接发送端的PERn,也就是说发送和接收的信号要反接。CLK不需要,直接对应信号接上即可。完成之后,用点热熔胶固定,防止脱落:

然后,开机,见证奇迹的时刻到了:

竟然正常识别了!!!

接下来,重新编译openwrt固件,把firmware-qca988x的固件选上,kernel modules里选上ath10k刷进去,奇迹出现了,接口里面终于出现了无线:

好了,最后把外壳装好,按上天线,完美~~

总结:这次折腾总算是完美了,但是代价是LAN1这个网口就不能用了,不过对我来说这倒不是太大问题,牺牲一个有线网口换来一个内置的无线网卡对我来说还算值得,不过这次折腾也说明了一个问题,那就是确实软路由确实不适合用来直接发射AP,如果想要无线的话,最方便的方法还是去搞个硬路由接在LAN口上使用吧。本文纯属个人兴趣探索,供各位朋友参考!

评论

  • william.d.zk回复

    折腾无极限,厉害坏了

  • 冷树回复

    大佬666啊,不过为何不一开始就搞个扩展性强的主机~

    • Jarvis回复

      看到这款有天线口就被骗了23333….

  • jingwang回复

    老哥 j1900 装 ubuntu reboot 或者 其他重启命令 卡死 有没有遇到过…….
    我谷歌搜了 下 遇到这个问题的还挺多

    • Jarvis回复

      我的固件是自己编译的18.06,好像bios里设成C7就没问题了~~

  • sqliuchang回复

    刚开始就应该就考虑加一个ap而不是上无线网卡…比如k2p,DW33D这样的便宜货,无线性能也很好
    话说我是搜索j1900软NAT性能才找到这里的…

    • Jarvis回复

      只是尝试一下这种可能性,无线网卡买都买了,不折腾一下感觉就亏了~~

  • 烟囱回复

    楼主流啤啊 我想问一下 如果这个机器我用MINIPCIE转接板接一个RT5572的模块可以直接识别吗

    • Jarvis回复

      RT5572需要自己把驱动选上重新编译Openwrt内核,可以识别出无线网卡,但不能在LuCi界面里控制,只能用iw命令控制。

  • 我的腿毛生生不息回复

    大佬牛B,我买了同款正打算加无线模块.看你这么一折腾打消了我的想法

    • Jarvis回复

      要方便的话还是直接另外接个AP把。

  • jiakai1000回复

    大佬你这用着咋样,速度稳定性啥的,可以的话我也开搞,求私信WX:jiakai1000

    • Jarvis回复

      还行啊,已经稳定使用快半年了~~只不过速度最高只能到867M,只支持5G。

  • jonah回复

    一看飞线我就懵逼了。
    哈哈哈跟你同款的J1900 工控软路由。也送了两根天线,折腾半天后面拆开才发现尼玛没有无线网卡。。。

  • LastOneSky回复

    看到开始打I211的主意的时候,就知道,嗯,这个人不简单……

  • casey回复

    你好,请问你买的 9880的网卡有链接吗?我买的卡lspci 可以查看到,但是无法驱动。

    • Jarvis回复

      淘宝直接搜qca9880吧,9880需要kmod-ath10k和firmware-qca988x这两个包。

  • 图吧垃圾佬回复

    怎么买这么贵啊
    其实没必要这么贵的
    一个小机箱 89块钱
    装弄个二代i3 i5或者赛扬cpu 10-200之间(没看错g530 10块钱包邮)
    插个ddr3内存条 1-4g 30-100元
    再买个乐扩四口千兆 150元
    1-4g的ddr3内存,
    主板h61足以100-150元
    30块钱包邮电源
    功耗大概30-50w,我家里现在用的

  • wwm回复

    真大神,膜拜一下

  • youya回复

    大佬啊,有什么外接ap设备推荐一下吗?就不用像路由那样外接电源的设备

    • Jarvis回复

      我自己现在也外接了一个路由用了。。。

  • 踢踢回复

    网上搜蜗牛国际,一种矿机,才300块左右,也是j1900,用这个应该更经济。

发表评论

*

浙ICP备16016405号-2
浙公网安备 33010602007544号