J1900软路由加装无线网卡做AP折腾记
家里无线设备多,唯一的一台出口路由器是小米路由器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,用这个应该更经济。
未来之风
太。。硬核了
mengxp
refclk应该是可选信号。不需要连接。 一般都是板卡自带晶振提供
Jarvis
我这块网卡不接REFCLK的话不识别。
asbai
测没测能同时带多少 STA?我用 intel 7260 网卡在 Ubuntu (4 核 x64,4GB 内存)下设置 SoftAP,反复测试最多只能同时带 12 个左右 STA,哭死。。。。
Jarvis
我没那么多的端设备,没测过。。P.S.我现在自己也搞了个AC86U在用,无线网卡性能毕竟不如专门的AP。
Rick Stive
看来我还是直接软路由+硬路由吧
LCWW
特地留言膜拜一下,本来只是Google一下同款路由器是不是有两个msata的,没想到看到了一篇折腾牛文,佩服佩服,想问博主是学什么专业的。
Jarvis
我是学电气工程的
yhf
佩服佩服,正打算折腾软路由
王风
硬的一B
Sam
最后一波操作太溜了,我完全看不懂!
Etrock
硬核硬核,就要折腾到底的这股劲点个赞! 有时候经常搞到一半火了,不(gù)小(yì)心就把某个地方搞坏,然后就好吧,就这样了,天意........
晓峰
原本也打算整的,看完都奔溃了,楼主有这技术,继续折腾。后续靠这个直接定制DiY卖,肯定生意不错
oldminyu
2.4 5g能分开吗,你这只能单2。4或者单5g吧
Jarvis
不能,因为QCA988x是单phy,单phy只能同时1个,如果要分开至少需要2个无线网卡。
Ryo
居然还有比我更能折腾的+1 实在是佩服,不过这还不如重买了,况且这种没有独立功放的网卡效果不会好吧 但是折腾精神还是不错滴
小奶牛牛不牛
有个疑问,前面淘宝买的是RTL8812BU,后面Openwrt识别出来的是QCA9880。 还有,RTL8812BU是USB信号,后来飞线接入的是PCIe信号,能识别吗?是不是后来换无线网卡了?
Jarvis
RTL8812BU接上去,有问题不好用,就换网卡了。我总共买了2个网卡。这个机器的mini-pcie座子上面没有连pcie通道,只有usb,所以如果要用pci-e网卡得像我一样飞线才行。
haha
大佬神人啊,原本我也想搞一下,看完你在介绍没有这个念头了。
CMCC
请教一下大佬,usb网卡驱动成功编译进openwrt,iw list有有输出,然而luci 显示无线未关联,我想把这个网卡设置成ap模式,那么应该通过什么具体命令设置呢?
Jarvis
usb网卡不能在luci界面里操作的,只能用iw命令控制。
ONOs
认真的看完了全文,由衷的膜拜!!!王同学,你很有毅力!
yang yang
大神,可否请教你添加无线网卡的问题?我的是Ralink corp. RT3090 Wireless 802.11n 1T/1R PCIe | Network 编译后没有无线显示。。。。郁闷 !!!搞了很久了!谢谢你
Jarvis
lspci里面能看到网卡吗?
将寒
你好楼主,我目前有一款占美工控小主机j1900,只有一个lan口和一个mini pcie 无线网卡,我想搞软路由,不知道楼主能提供可行性的改造方案吗
Jarvis
你这个配置似乎只能LAN口当WAN用,剩下的客户端都无线接入了。
ptyfork
感谢如此详细的文章,按文章的指引,购买了RT5572装在了软路由上。
咸菜
见过这腾的,但博主折腾这么猛的实在让人叹服!
ling
我也碰到了这个问题, 我的j3160只有4条lane
狂风海天
我和你一样的主板,一直在网上找mini pcie的无线网卡,我是用在RouterOS上的,楼主有什么好的建议,直接买过来就能用的有没有
Jarvis
同款主板就没多余的pcie通道,没法用pcie无线网卡