使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务

这篇具有很好参考价值的文章主要介绍了使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载:本文出处https://think8848.cnblogs.com和作者: think8848 本文目的:记录近一个月以来折腾BPI-R4的过程,为后面可能的学习提供参考资料,此外也把折腾中踩过的坑发出来,让更多研究BPI-R4的筒子们少踩坑。

一、需求描述

公司的项目基本都会有去客户现场实施的情况,我们的客户现场一般情况下都不具备上网条件,在没有互联网的情况下项目组人员无论使用搜索引擎查找技术方案,还是在公司的同事也对现场提供技术支撑都非常不便。另外在现场通过手机热点使用Linux Mirrors,Docker Repository、Nuget、Maven、NpmJS等资源都速度较慢,而且流量消耗也比较大;平时公司文件服务器上的开发工具、办公软件等软件不易转输到项目现场。
经历无数次各种受限后,我下决心搞个能在客户项目办公期间实现以下功能的装置:

  • 实现高速上网
  • 内置开发所需的各种Mirrors、Repository、Registry服务
  • 提供各类常用开发和办公软件共享
  • 提供Wi-Fi AP(可选)

一站式解决过去的各种不便(而不需要携带多个设备),体积足够小(便于出差时携带)。提高点现场办公的效率,少在现场呆几天时间,这个设备的成本就回来了 😃

带着上述需求确定的硬件需求是:

  • CPU:多核CPU,至少在跑Docker时不拉胯
  • 内存: ≥ 2GB
  • 网络: 支持千兆以太网(最好有一个2.5G网口)
  • 5G: 具备5G模块接口
  • Wi-Fi: 板载Wi-Fi 6功能或具备Wi-Fi 6模块接口
  • 存储: 具备NVMe固态硬盘接口

二、硬件准备

1. BPI-R4开发板

带着需求在T宝上进行搜索,目前发现最符合条件的是BPI-R4,其他或多或少都有一个或几个点没有到位(欢迎熟悉开发板的大佬提供更好的板子)。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


产品图片
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


硬件接口图
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


硬件规格表

这个板子几乎能满足我全部的需求,同时还具有光口和Wi-Fi7的接口,问题是在我买的时候板子刚刚上市,几乎没有像样的资料(一开始就只有技术规格书,过了差不多大半个月后官方文档才加了不少有用内容),而且Wi-Fi7模块、官方外壳到目前还没有上市,预计在24年一季度末期才会有,建议不愿意/没时间折腾的筒子们二季度视情况购买,到那时板子的资料、固件、外围的配件应该就比较齐全了,上手就能用,不然真是非常的折腾。

免责声明:本文列出了部分我采用的商品链接,本人和这些商家没有任何直接、间接关系,实在是因为我在折腾过程踩坑太多,所以我尽量把我认为不坑或者服务稍好点的供货商放上来,避免筒子们继续踩坑。我觉得产品/商家好不代表大家都觉得好,请自行辨别,本人对所列举的产品和商家不负任何直接或连带责任。

板子的购买地址(板子的生产厂家T宝店):
https://item.taobao.com/item.htm?abbucket=8&id=750678904197&ns=1&spm=a21n57.1.0.0.943b523cPUzb23

主板建议在生产厂家买,我当时是在另一家专门买各类板子的商家店里买的,原因是该商家发货地在上海,我想更快点拿到板子。然而后来一系列的沟通才觉得,应该还是到工厂店买更好,听说在工厂店的订单可以获得厂家更好的技术支持

2. 电源

根据硬件规格表所示,该板使用DC供电,规格为12V/5.2A or 19V 3.2A,我在T宝上找了好久也没有找到合适的电源,后来又问卖我板子的商家,他给推荐了一个电源,并称是兼容管方的电源,售价:50元,到货后我发现他发的是12V2A的电源,质量非常的次,但是确实能正常使用,后来因为这个电源的线又短又硬,实在是难以使用,我只能按照12V2A的规格重新找一个商家,售价:39元,这次没有翻车。商家还送了我一个USB转TTL模块和一个USB读卡器,这两样东西我也没有用过,对于当下手头没有这两样家什的筒子们应该是有用的。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


DC电源图片

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


商家送的读卡器

DC电源购买链接:
Banana Pi BPI-R4高性能开源路由器MT7988A Wifi 7香蕉派R4开发板 配件:电源12V2A【图片 价格 品牌 报价】-京东

3. USB转TLL模块

当时在买BPI-R4的时候,商家给我推荐了一个USB转TTL线,是2303芯片的,
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


PL2302模块图片

PL2302模块购买链接:
交易快照

接上之后无法正常驱动,出现以下问题:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

联系商家后,商家提供了解决方案,见下方链接:
解决"PL2303HXA自2012已停产,请联系供货商" USB不识别的问题

为方便起见,我将驱动程序搬运到此处:点此下载PL2302驱动

这个线使用后终于在启动BPI-R4后能看到屏幕输出了,但是却无法使用键盘进行输入,我一开始怀疑是这条线有问题,因此又买了第二个模块。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


CH340模块图片

CH340模块购买链接:
https://item.jd.com/10083021362308.html

CH340驱动下载地址:点此下载CH340驱动

这个模块的优点是链接速度快,使用PL2302模块时不能键盘输入的问题没有了,而且CH340还可以使用跳线设置VCC为3.3v或5v,在接入电脑后有电源指示灯,但缺点也比较明显,裸露的模板,接插不方便,另外它使用很短杜邦线连接BPI-R4,在使用这个模块时必须把板子放到距离电脑USB口很近的地方,无奈之下我又试了一下PL2302,神奇的是我的PL2302连上后板子居然可以接收键盘输入了,好吧,CH340放进抽屉吃灰吧。

结论: 如果只是玩BPI-R4,那还是建议使用上图中PL2302类型的线,确实方便,如果将来还可能调试其他设备,建议使用CH340,功能多且便宜。

4. SD卡

先说结论:非必要不要买大容量的TF卡,一来价格比较贵,高速、可靠、容量大的存储将来还是要靠NVMe硬盘,TF卡差了点意思,过去我ThinkPad上外挂的TF卡经常会出现文件损坏的情况,二来在某些情况下向TF卡烧镜像时总是提示失败,这时候你可能需要低格SD卡,然而SD低格的速度实在是太感人了,你可能吃了两顿饭后,进度才走了50%不到 😦 ,因此墙裂不建议使用大容量TF卡,不要问我是怎么知道的...
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


TF卡图片

实验证明,上图的卡就很好用,8G容量够用了,价格便宜:14.9元,而且耐造,目前已经几十次的烧写镜像,使用没有出过任何问题。

TF卡购买链接:
https://item.jd.com/7250669.html#none

读卡器?上面买DC电源时不是送你读卡器了吗?

5. 5G模块

先说结论:BPI-R4在官方固件代码(OpenWrt-21.02)上可以使用移远通信(Quectel)的RM500U-CNRM500Q-GL,在OpenWrt-23.05主线版本上仅RM500Q-GL可用(主线固件源码里有RM500Q-GL的驱动,其产品ID为800,而RM500U-CN的产品ID为900,因此不被OpenWrt所识别),所以说RM500Q-GL比RM500U-CN好用,原因一:500Q能够同时在OpenWrt-21.02和OpenWrt-23.05上使用,原因二:发热量明显小;据官方资料显示RM520N-GL也可以使用,但我手头没有,没有办法测试
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


Quectel RM500Q-GL实物图(图片来自闲鱼)
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


Quectel RM500U-CN实物图(图片来自闲鱼)

注意:5G模块上除了“大”型号,如“RM500Q-GL”之外,还有一个“小”型号,如"RM500Q-GL AB","RM500U-CN VCA"之类的,如你所猜,"GL"代表全球都可以使用,"CN"代表在国内使用,再后面的字母代表模块用途,详细介绍情况请自行搜索。我测试的两个模块具体为"RM500Q-GL AB"和"RM500U-CNVCA",其中"RM500G-GL"是闲鱼上淘来的,品相成色很nice,功能正常;"RM500U-CNVCA"是在T宝购买的。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


RM500U-CN效果图(我实际购买的是RM500U-CNVCA)

RM500U-CN购买链接(2024年1月28日 当前缺货):
https://item.taobao.com/item.htm?_u=skb3avd95d&id=703952904554&spm=a1z09.2.0.0.78462e8dVh8xMm

这个店应该是官方店,这个店的客服明显支持比另一个官方店的客服有耐心,服务更好一些。

5G模块必须接上天线和SIM卡才能正常工作,天线产品如下:
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


5G/4G通用棒状天线,型号:YECN009AA
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


天线射频转接线,型号:YM0004AA

此处要说明的是,天线转接线有两种规格,IPEX1代IPEX4代注意:RM500系仅支持IPEX4代转接线,买错了完全无法使用,不要问我是怎么知道的...

天线和转接线的购买链接:
https://item.taobao.com/item.htm?_u=skb3avbb85&id=724585239978&spm=a1z09.2.0.0.78462e8dVh8xMm&skuId=5221174257612

6. Wi-FI模块

先说结论:MT7921MT7922OpenWrt-23.05上确定可用,但是在官方固件源代码确定不可用;不可用的原因是官方源代码所采用的内核版本上mt76mac80211驱动有BUG,根本就不能编译通过,使用OpenWrt-21.02.7中相应的目录替换官方源代码的目录后能编译通过,也能搜到网络,但无法实现Wi-Fi AP或能,甚至也不能作用Wi-Fi Client使用。后经搜索发现是mt76驱动在21.02版本上无法正常使用,OpenWrt官方Github上还有一个专门的mt76项目用来解决这个问题,本着不放弃任何一个细节的原则,我毫不犹豫下载了该代码和官方源代码进行了合并编译,然后不出意外的编译失败了,原因是该mt76代码库中有一个头文件并不在官方固件源代码的内核中...

好吧,世上无难事,只要肯放弃!只要我不坚持搞21.02上使用MT7921了,难题自然就会自动消失了。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

不用7921我就下单了一个MT7915,更确切点说是DR7915要特别慎重,因为我没有用起来。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

官方声明不支持7天无理由,非批量用户不提供技术支持,大家千万不要怀疑他们公司的执行力,绝对不会给你提供半个字有用的技术支持。发货可能是个看人品的事情,我可能人品不佳,我下单后直到淘宝官方客服介入才终于发了货。发货之前我想知道这个天线接口是IPEX1代还是IPEX4代,客服会客(ai)客(da)气(bu)气(li)的和你说5句话,但绝不会告诉你是1还是4,我只能到货后再自行观察,到货后更坑的来了,我以为这个模块仅仅是正面使用了凸起来的封装,拿到手后发现原来背面也是凸起来的封装啊!杯具啊!!! 根本不能安装在BPI-R4上,这个造型很可能难以安装在很多板子上!

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

本着买都买了的想法,我还想再抢救一下,在买转接线和转线板之前纠结一番后觉得转子可能看起来更清爽,更好固定一些,经过两次折腾,转接板终于到了,插到BPI-R4上使用官方镜像,额..没有发现PCI-E设备,这一定是OpenWrt-21.02版本过低的原因!马上插上OpenWrt-23.05SD卡,上电...好吧,95%是转接卡太辣鸡了,这么贵的模块应该是不会出问题的,包好,收起来放抽屉。

想着把MT7921再换上去吧,这时就多了一点点小动作,又带来一个大麻烦,我想看看7921商家送的这个天线馈线和5G模块天线馈线是否有区别,就轻轻的把7921的天线拿下来,我真的已经足够轻了,但还是连带着把7921的天线底座一并从PCB板上拉下来了...小结一下:非必要不要抜天气馈线一个没多少钱,多买几根,一个模块可以买几十根馈线。

想着MT7921反正也坏了,而且在官方代码上也跑不起来,OpenWrt-23.05上有MT7922的固件,这次要么试一下7922吧,它应该比7921更香吧,马上闲鱼上看到家附近就有,直接拿货测试。这次发现PCI-E设备了,但是/etc/config/wireless文件里面是空的,使用/sbin/wifi config重新生成也没有用,本着死马当做活马医的态度,再次编译固件,这次除kmod-mt7922-firmware外,还加上了kmod-mt7921e,别问我为什么这么想,我就是觉得这俩长的有点像,兴许会迷惑系统,烧TF卡,再次加电启动,这次终于看到/etc/config/wireless里面有内容了,测试发现无线网络功能是正常的,说一句7922使用是IPEX4代线。

我买的MT7922上还有个Port Number:RZ616,据网上的介绍说是有160MHz带宽,然而我使用的是MT7921的驱动,页面上的配置最高也只有80MHz,Wi-Fi功能对我而言本就不是刚需,我也不想折腾了。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

为什么第二次我在闲鱼上买7922,原因是我觉得淘宝上一手的MT7921全新质量太次,反而是闲鱼上从品牌笔记本上拆机的无线网卡质量和做工更好一些,各位自行评估。

7. 散热片
  • 20x20x4的带背胶纯铜散热片看着还不错,大小也正合适,主要是贴上后心理上觉得安全了一些,适用于CPU,NVMe硬盘,无线网卡和5G模块。

购买链接:
商品详情

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • 5G模块专用散热片

合身、漂亮
购买链接:
https://item.taobao.com/item.htm?_u=vkb3av6638&id=672697533949&spm=a1z09.2.0.0.19852e8dpbPx1k&sku_properties=1627207:3232484

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

8. 风扇

也许能用到,也许用不着,6元一个,我看BPI官方也在用这个风扇,就备一个吧
注意:如果在BPI-R4背面安装NVMe硬盘的话,这个风扇的卡子是无法插到对应的位置的,需要使用硬盘的兄弟慎重购买

购买链接:
https://item.taobao.com/item.htm?_u=vkb3av289a&id=619655377629&spm=a1z09.2.0.0.19852e8dpbPx1k&skuId=4978584616607

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

到现在为止,BPI-R4折腾之旅可以发车了 😃

三、Banana PI BPI-R4资料和固件

官方资料和固件:

  • 香蕉派 BPI-R4
  • Getting Started with BPI-R4
  • 官方固件代码仓库 BPI-R4-OPENWRT-V21.02

搜索到的几个有用的文章:

  • 这路由很硬?bpi-r4万兆路由到手体验!
  • BPI-R4万兆路由ImmortalWrt固件体验(cpu跑分5w+)
  • bpi-r4固件--基于hanwckf大佬的uboot源码及固件源码

根据上面文章提到的线索,我找到了据称将来要合并到OpenWrt-23.05主线的BPI-R4可用的固件源码,感谢不吝分享知识的大佬们!

  • https://github.com/dangowrt/openwrt/tree/bpi-r4

  • 官方提供的固件源代码是21.02版,该代码提供了RM500U-CNRM520N-GLRM-500Q-GL的支持

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

然而官方源代码对于无线网卡的支持并不好,因此本文我主要演示dangowrt大佬提供的固件源代码,该固件支持RM520N-GLRM500Q-GL

四、编译OpenWrt-23.05

1. 准备编译环境(Ubuntu 22.04.3)

编译OpenWrt-23.05我选用了Ubuntu 22.04.3,编译官方固件源代码使用Ubuntu 22.04会报错,只能选用Ubuntu 20.04
需要说明的是,在编译OpenWrt固件时,一定要选择root账号,否则在编译的过程中会报错。

2. 安装编译依赖项
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">sudo apt update -y
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-distutils rsync unzip zlib1g-dev file wget swig -y
</code></span></span>

需要下载的依赖项比较多,建议最好将Ubuntu的apt源设置为清华镜像站或其他国内镜像站
建议在Ubuntu上保留足够的可用磁盘空间,至少应具有64GB可用空间,推荐128G及以上

编译使用的电脑推荐使用主频高、CPU核心数多的台式电脑,使用普通笔记本编译可能浪费您大量的时间。

3. 设置http和git代理
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">export ALL_PROXY=socks5://192.168.183.1:1080
export http_proxy=http://192.168.183.1:808
export https_proxy=http://192.168.183.1:808
git config --global http.proxy "http://192.168.183.1:808"
git config --global https.proxy "http://192.168.183.1:808"
</code></span></span>

如果您没有代理服务器,不建议继续以下步骤

4. 下载OpenWrt-23.05源代码
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">git clone -b bpi-r4 https://github.com/dangowrt/openwrt.git
</code></span></span>

本文所有的操作均在用户根目录下,例:/home/joseph~/下拉代码结束后进入源代码目录,并且查看代码是否是bpi-r4分支

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">cd openwrt
git show
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

5. 下载安装交叉编译依赖项
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">./scripts/feeds update -a
./scripts/feeds install -a
</code></span></span>
6. 配置编译项
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">make menuconfig
</code></span></span>
6.1 配置项如下:
  • 首页
    • Target System:MediaTek Ralink ARM
    • Subtarget:Filogic 8x0 (MT798X)
    • Target Profile:Bananapi BPi-R4

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Base System:
    • block-mount
    • blocked
    • Customize busybox options

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Base System > Linux System Utilities
    • fdisk

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Kernel modules > Block Devices
    • kmod-dax
    • kmod-dm
    • kmod-nvme
    • kmod-scsi-core

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Kernel modules > Filesystems
    • kmod-fs-exfat
    • kmod-fs-ext4
    • kmod-fs-ksmbd
    • kmod-fs-ntfs3

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Kernel modules > USB Support
    • kmod-usb-core
    • kmod-usb-net
    • kmod-usb-net-qmi-wwwan
    • kmod-usb-ohci
    • kmod-usb-storage
    • kmod-usb-wdm
    • kmod-usb-usb2
    • kmod-usb-usb3

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Kernel modules > Wireless Drivers
    • kmod-mt7921-firmware
    • kmod-mt7921e
    • kmod-mt7922-firmware

此处手动添加kmod-mt7921-firmwarekmod-mt7921ekmod-mt7922-firmware, 取消kmod-mt7915e,其他使用自动创建的依赖即可。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • LuCI > Collectioins
    • luci
    • luci-light

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • LuCI > Modules

当在上一步骤中选择luci选项后,配置程序会自动设置Modules选项,本文采用其默认值,仅在区域中加了中文

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

LuCI > Modules > Translations中添加中文支持

  • LuCI > Modules > Translations
    • Chinese Simplified (zh_Hans)

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • LuCI > Applications
    • luci-app-dockerman(注意:此处是M,非*)
    • luci-app-ksmbd

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Network > SSH
    • openssh-sftp-server

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Utilities
    • dockerd(注意:此处是M,非*)
    • pciutils
    • usbutils

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • 最后,保存配置

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

6.2 添加5G上网和Wi-Fi所需的文件

请点击此处下载本章节中所需的文件

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>进入BPI-R4编译目标的目录
cd ~/openwrt/target/linux/mediatek/filogic/base-files

mkdir -p sbin && cd sbin
<span style="color:#2b91af">
# </span>使用sftp或是其他工具将下列文件存入sbin目录中
<span style="color:#2b91af">
# </span>1. quectel-atc-proxy
<span style="color:#2b91af"># </span>2. quectel-CM
<span style="color:#2b91af"># </span>3. quectel-mbim-proxy
<span style="color:#2b91af"># </span>4. quectel-qmi-proxy
<span style="color:#2b91af">
# </span>设置执行权限
chmod +x ./*
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>进入/etc/init.d目录
cd ~/openwrt/target/linux/mediatek/filogic/base-files/etc/init.d
<span style="color:#2b91af">
# </span>复制ltecalling文件至init.d目录中,该文件是5G模块连接网络的启动脚本
<span style="color:#2b91af">
# </span>设置ltecalling执行权限
chmod +x ltecalling
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>创建ltecalling文件的软链接,使该文件能够实现开机启动
mkdir -p ~/openwrt/target/linux/mediatek/filogic/base-files/etc/rc.d

cd ~/openwrt/target/linux/mediatek/filogic/base-files/etc/rc.d

ln -s ../init.d/ltecalling S99xltecalling
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>添加网络接口配置
mkdir -p ~/openwrt/target/linux/mediatek/filogic/base-files/etc/config
<span style="color:#2b91af"># </span>将下列文件复制进刚才创建的config文件夹中
<span style="color:#2b91af"># </span>1. network (网络接口配置文件)
<span style="color:#2b91af"># </span>2. firewall (防火墙配置文件)
<span style="color:#2b91af"># </span>3. wireless (Wi-Fi配置文件)
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

其中network文件配置如下:

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-properties">
<span style="color:#ff0000">config</span> <span style="color:#a31515">interface 'loopback'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">device 'lo'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto 'static'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">ipaddr '127.0.0.1'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">netmask '255.0.0.0'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">globals 'globals'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">ula_prefix 'fdd2:e351:889d::/48'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">device</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name 'br-lan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">type 'bridge'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">ports 'lan1'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">ports 'lan2'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">ports 'lan3'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">ports 'eth1'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">interface 'lan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">device 'br-lan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto 'static'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">ipaddr '192.168.1.1'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">netmask '255.255.255.0'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">ip6assign '60'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">device</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name 'br-wan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">type 'bridge'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">ports 'wan'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">ports 'eth2'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">interface 'wan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">device 'br-wan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto 'dhcp'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">interface 'wan6'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">device 'br-wan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto 'dhcpv6'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">interface '5G'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">device 'wwan0'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto 'dhcp'</span>

</code></span></span>

firewall如下:

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-properties"><span style="color:#ff0000">config</span> <span style="color:#a31515">defaults</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">syn_flood	1</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">input		REJECT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">output		ACCEPT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">forward		REJECT</span>
<span style="color:#008000"># Uncomment this line to disable ipv6 rules</span>
<span style="color:#008000">#	option disable_ipv6	1</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">zone</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		lan</span>
	<span style="color:#ff0000">list</span>   <span style="color:#a31515">network		'lan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">input		ACCEPT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">output		ACCEPT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">forward		ACCEPT</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">zone</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		wan</span>
	<span style="color:#ff0000">list</span>   <span style="color:#a31515">network		'wan'</span>
	<span style="color:#ff0000">list</span>   <span style="color:#a31515">network		'wan6'</span>
    <span style="color:#ff0000">list</span>   <span style="color:#a31515">network          '5G'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">input		REJECT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">output		ACCEPT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">forward		REJECT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">masq		1</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">mtu_fix		1</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">forwarding</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		lan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">dest		wan</span>
<span style="color:#008000">
# We need to accept udp packets on port 68,</span>
<span style="color:#008000"># see https://dev.openwrt.org/ticket/4108</span>
<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-DHCP-Renew</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		udp</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">dest_port	68</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">family		ipv4</span>
<span style="color:#008000">
# Allow IPv4 ping</span>
<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-Ping</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		icmp</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">icmp_type	echo-request</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">family		ipv4</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-IGMP</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		igmp</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">family		ipv4</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>
<span style="color:#008000">
# Allow DHCPv6 replies</span>
<span style="color:#008000"># see https://github.com/openwrt/openwrt/issues/5066</span>
<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-DHCPv6</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		udp</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">dest_port	546</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">family		ipv6</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-MLD</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		icmp</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src_ip		fe80::/10</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		'130/0'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		'131/0'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		'132/0'</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		'143/0'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">family		ipv6</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>
<span style="color:#008000">
# Allow essential incoming IPv6 ICMP traffic</span>
<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-ICMPv6-Input</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto	icmp</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		echo-request</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		echo-reply</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		destination-unreachable</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		packet-too-big</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		time-exceeded</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		bad-header</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		unknown-header-type</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		router-solicitation</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		neighbour-solicitation</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		router-advertisement</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		neighbour-advertisement</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">limit		1000/sec</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">family		ipv6</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>
<span style="color:#008000">
# Allow essential forwarded IPv6 ICMP traffic</span>
<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-ICMPv6-Forward</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">dest		*</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		icmp</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		echo-request</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		echo-reply</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		destination-unreachable</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		packet-too-big</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		time-exceeded</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		bad-header</span>
	<span style="color:#ff0000">list</span> <span style="color:#a31515">icmp_type		unknown-header-type</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">limit		1000/sec</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">family		ipv6</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-IPSec-ESP</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">dest		lan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		esp</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">rule</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">name		Allow-ISAKMP</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">src		wan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">dest		lan</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">dest_port	500</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">proto		udp</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">target		ACCEPT</span>
</code></span></span>

wireless如下:

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-properties">
<span style="color:#ff0000">config</span> <span style="color:#a31515">wifi-device 'radio0'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">type 'mac80211'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">path 'soc/11300000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">channel '36'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">band '5g'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">htmode 'HE80'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">cell_density '0'</span>

<span style="color:#ff0000">config</span> <span style="color:#a31515">wifi-iface 'default_radio0'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">device 'radio0'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">network 'lan'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">mode 'ap'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">ssid 'Szh-RS01'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">encryption 'psk2'</span>
	<span style="color:#ff0000">option</span> <span style="color:#a31515">key 'think8848'</span>

</code></span></span>

至此,OpenWrt编译的准备工作完成,下面开始进行编译

7. 编译OpenWrt
7.1 预先下载内核和各类固件代码
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>虚拟机是8核虚拟CPU,我使用其中7个
<span style="color:#2b91af"># </span>可以不预先下载直接编译,如果不下载,有可能在编译的过程中某个代码下载失败造成编译失败,又得重新开始,我习惯上是先把所有除编译错误之外的故障排除完,然后定定心心的开始编译

make download -j7
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

看看这一排排的下载地址,没有代理是有点糟心(也可能使用国内源能够解决这个问题,我没有试过)

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

7.2 开始编译
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>开始时间 22:38 结束时间 23:16 编译总时长: 38m
make V=s -j7
</code></span></span>

编译时的CPU利用率,2016年的i7 7700K

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

编译成功,未出现致命错误

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

编译好输出目录

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

五、部署OpenWrt

1. 准备TF卡烧录工具

可以Windows上烧录TF卡,Windows使用Etchar工具;也可以在Linux上烧录TF卡,下面是Linux上烧录工具的下载安装方式。实验证明Windows上烧录TF卡真的很辣鸡,经常性烧录校验失败,而且每次将TF接入电脑后,电脑就卡死,推荐使用Linux烧录工具

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">sudo apt install -y pv
curl -sL https://github.com/BPI-SINOVOIP/bpi-tools/raw/master/bpi-tools | sudo -E bash
</code></span></span>

Linux下烧录工具

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

2. 将编译好的镜像烧录到TF卡上
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>将SD镜像复制到用户根目录下并解压
cp ~/openwrt/bin/targets/mediatek/filogic/openwrt-mediatek-filogic-bananapi_bpi-r4-sdcard.img.gz ~/

cd ~/ && gunzip openwrt-mediatek-filogic-bananapi_bpi-r4-sdcard.img.gz
<span style="color:#2b91af">
# </span>写入SD(TF)卡,注意:您的SD卡可能不一定和我一样是/dev/sdb,请按实际情况进行调整
sudo ./bpi-copy openwrt-mediatek-filogic-bananapi_bpi-r4-sdcard.img /dev/sdb
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

到此,可以将TF插入BPI-R4,将跳线设置为SD卡启动

3. 查看OpenWrt

使用Terminal登录进系统,可以看到Banner界面。

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>查看5G模块和PCI-E设备,可以看到`Quectel RM500Q-Gl`5G模块,`Mediatek MT7922`无线网卡和`Intel SSD 600P`NVMe固态硬盘
lsusb

lspci

cd /dev && ls

ping www.baidu.com
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>查看5G模块拨号情况(注意,启动系统后大概过30秒再查看)
ps | grep quectel
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell"><span style="color:#2b91af"># </span>查看网络接口(同样待系统启动30秒后再查看)

ifconfig
</code></span></span>

下图上phy0-ap0为无线网卡,wwan0为5G模块

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

此时我正在写文档的电脑通过有线连接在BPI-R4的Lan口上,已经可以正常上网,注意:当电脑连上BPI-R4后,一开始的时候是可以ping通域名的(如:www.baidu.com),过一会儿后就ping不通了,再过一会儿又会ping通,然后就稳定下来了。

换个姿势来看OpenWrt 😃
概览

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

端口和5G网络

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

无线(无线网卡驱动可能不对,另外使用了笔记本天线,请无视渣渣信号)

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

磁盘挂载

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

六、配置应用服务

1. 将NVMe固态硬盘挂载为OpenWrt的/overlay目录
  • 选择NVMe固态硬盘挂载点,点击编辑按钮,在打开的弹出框中将挂载点设置为/overlay,选中已启用,然后点击保存按钮。
    注意:在挂载磁盘之前,最好将磁盘上清空,避免发生未知错误

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • 关闭弹出框后,点击屏幕下方的保存与应用按钮。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • 重启BPI-R4

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • 重启后可以看到NVMe固态硬盘已经被挂载为//overlay

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

2. 部署Docker
  • 准备opkg
    如果您计划直接使用Ubuntu上编译目录(~/openwrt/bin)中的文件作为opkg源,则可以考虑使用pythonhttp.server(http.server文档)挂载http服务;因为我编译使用的是Ubuntu虚拟机,而且网络设置为nat模式,如果要让OpenWrt访问该虚拟机还需要重新设置网络,因此我直接将编译目录中的文件复制到写该Blog的Windows上。

Ubuntu文件层级见下图:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

Windows文件层级见下图:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

  • Windows环境上配置HTTP服务器
    a. 把base,luci,packages,routing,telephonytargets/mediatek/filogic目录复制到Windows环境中。
    b. 下载Windows下轻量化HTTP服务器Rebex Tiny Web Server(官网)。解压,并设置wwwroot目录
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:#008000"><!-- Root directory of the web server. --></span>
<span style="color:#0000ff"><<span style="color:#0000ff">add</span> <span style="color:#ff0000">key</span>=<span style="color:#a31515">"webRootDir"</span> <span style="color:#ff0000">value</span>=<span style="color:#a31515">"D:\self\packages\aarch64_cortex-a53"</span> /></span>
</code></span></span>

启动Rebex Tiny Web Server

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

c. 修改OpenWrtopkg配置,将/etc/opkg/distfeeds.conf设置如下:

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-properties"><span style="color:#ff0000">src/gz</span> <span style="color:#a31515">openwrt_core http://192.168.1.147:1180/filogic/packages</span>
<span style="color:#ff0000">src/gz</span> <span style="color:#a31515">openwrt_base http://192.168.1.147:1180/base</span>
<span style="color:#ff0000">src/gz</span> <span style="color:#a31515">openwrt_luci http://192.168.1.147:1180/luci</span>
<span style="color:#ff0000">src/gz</span> <span style="color:#a31515">openwrt_packages http://192.168.1.147:1180/packages</span>
<span style="color:#ff0000">src/gz</span> <span style="color:#a31515">openwrt_routing http://192.168.1.147:1180/routing</span>
<span style="color:#ff0000">src/gz</span> <span style="color:#a31515">openwrt_telephony http://192.168.1.147:1180/telephony</span>
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

d. 更新opkg

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">opkg update
</code></span></span>
  • 安装docker
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">opkg install dockerd
opkg install docker

docker ps
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器


可以看到docker已经启动

  • 配置Docker
    a. 配置开机启动
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">/etc/init.d/dockerd enable
</code></span></span>

b. 配置Docker防火墙设置以及使用网易的Repository

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">vi /etc/config/dockerd
<span style="color:#2b91af">
# </span>增加配置项
<span style="color:#2b91af"># </span>将option iptables 设置为 <span style="color:#a31515">'0'</span>
<span style="color:#2b91af"># </span>list registry_mirrors <span style="color:#a31515">'https://hub-mirror.c.163.com'</span>
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

此处可以重启BPI-R4检验Docker是否可以正常开机启动

c. 测试Docker
测试Docker的时候不要和LuCI端口冲突

<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">docker run -d --name nginx -p 8080:80 nginx

docker ps -a
</code></span></span>

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

打开nginx主页

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

3. 配置ksmbd
  • OpenWrt根目录/下创建文件共享目录
<span style="color:#232323"><span style="background-color:#ffffff"><code class="language-shell">mkdir -p /smbroot
<span style="color:#2b91af">
# </span>创建测试文件
echo hello think8848 >> /smbroot/readme.txt
</code></span></span>

设置只run许lan口访问,因为我将来只是需要提供只读的工具共享,因此我允许匿名访问,并且是只读目录,见下图:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

保存配置后查看共享文件夹

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

4. 某些情况下可能需要配置DNS转发服务

安装部署OpenWrt后,某些情况下LAN网络上的设备可能无法正常解析域名,这个问题我没有去细究,解决方法是直接为dnsmasq配置DNS转发。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务,5G,docker,容器

正好这时我的电脑是可以正常解析域名的,这个没有什么好测试的,上图演示了修改DNS转发的位置,有需要的筒子们请自行设置

七、后记

至此,本文一开始我确立的目标全部达到了,对于我而言,这篇文章是对近期折腾BPI-R4的一个记录,只有记录下来了,这次折腾就算是有一点点意义,不然半个月之后肯定全部忘却了。后续我计划在OpenWrt-21.02上部署工作所需的正式环境,原理和23.05类似。为什么我自己要在21.02上部署?这不是RM500U-CN不支持23.05嘛,RM500Q-GL留下来在必要的时候做测试用 😃

文内的所有代码和操作步骤我全部经过测试验证,如在参考过程出现错误,请仔细比对环境、版本是否和我使用的一致,建议使用干净的Ubuntu系统、NVMe硬盘进行测试。本文基本上一次成型,写作时间有限,后期非特殊情况也不会再行更新,对于本文语言组织欠佳,章节顺序混乱我深表歉意。

其实在折腾BPI-R4的这一段时间里,学习到不少有用的知识,感觉对于Linux、嵌入式、驱动迁移等好多知识都有涉及,感觉非常有意思,虽然本文可能是我所有博文中最长的一篇了,但实际上在折腾中遇到的、学到的远非这些,我基本上只描述了结果,过程和原理基本都没有讲,比方说为什么开机就自动拨号了,Wi-Fi没有配置为啥就可以连了,等等。没有更多细节的原因有两个,一个是我确实没有多少时间写文档,另一个是我对于OpenWrt算是浅尝辄止了,有些东西你让我说我也说不明白,后续也没有继续深入学习研究的条件,所以就只能这样了,希望能帮到有需要的朋友。

同时,也希望用到看到这篇文章的大佬们不吝指教,提出宝贵的意见建议,能够帮助到更多有需要的朋友,谢谢!文章来源地址https://www.toymoban.com/news/detail-828998.html

到了这里,关于使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 即将推出的 OpenWrt One/AP-24.XY:OpenWrt 和 Banana Pi 合作路由器板

    OpenWrt开发人员正在与Banana Pi合作开发OpenWrt One/AP-24.XY路由器板。OpenWrt 是一个轻量级嵌入式 Linux 操作系统,支持近 1,800 个路由器和其他设备。然而,这将是第一块由 OpenWrt 直接开发的路由器板。 该主板将基于 MediaTek MT7981B (Filogic 820) SoC 和 MediaTek MT7976C 双频 WiFi 6 芯片组。Op

    2024年01月17日
    浏览(29)
  • 迷你即插即用无线路由器如何设置快速上网实现Wi-Fi 无线覆盖

    迷你路由器 是可以做到即插即用的无线路由器。出差或旅行途中入住酒店,把酒店房间里提供的网线插到设备的以太网口,再把它插到电源插座上,整个房间就实现了Wi-Fi 无线覆盖。我们就以TL-WR700N为例,说明一下设置的详细方法。 迷你路由器在出厂的时候, 默认模式是设

    2024年02月07日
    浏览(38)
  • Wi-Fi、4G、5G的物理层技术

    时间轴 通信标准 支持频段 信道宽度 传输速率 是否兼容其他协议标准 1999 802.11a 5GHz 20MHz 54Mbit/s 不兼容 1999 802.11b 2.4GHz 20MHz 11Mbit/s 不兼容 2003 802.11g 2.4GHz 20MHz 54Mbit/s 兼容802.11b 2009 802.11n 2.4G5GHz 20/40MHz 300/450/600Mbit/s 兼容802.11a/b/g 2013 802.11ac 5GHz 80/160MHz 433/867/1730Mbit/s 兼容802.11a/n

    2024年01月21日
    浏览(38)
  • 导致Wi-Fi上网不佳的三大主因你知道几个

    Wi-Fi上网问题频现 链接Wi-Fi网络经常出现上网不佳的问题。对此有业内专家分析表示,原因主要是因为路由器或智能手机软件与网络不兼容。 原因1:路由器制式不兼容 为什么成熟的Wi-Fi技术惹来诸多的不满? 首先,采用Wi-Fi网络,尤其是在家庭采用Wi-Fi网络,最容易出现的一

    2024年02月08日
    浏览(42)
  • 信驰达推出RTL8720DN系列2.4G和5G双频Wi-Fi+蓝牙二合一模块

    近日,领先的无线物联网通信模块厂商深圳信驰达科技RF-star推出了基于RTL8720DN SoC的2.4 GHz和5 GHz双频Wi-Fi蓝牙二合一模块—RF-WM-20DNB1。  图 1信驰达RF-WM-20DNB1 Wi-Fi模块 RF-WM-20DNB1是一款低功耗单芯片无线蓝牙和Wi-Fi组合模块,支持双频(2.4 GHz和5 GHz) WLAN和低功耗蓝牙5.0,它集成了

    2024年02月15日
    浏览(38)
  • 5G时代音视频开发前景怎么样?音视频开发需要掌握哪些技术?(1),手把手教你5G时代Webview的正确使用姿势

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你

    2024年04月11日
    浏览(48)
  • 关于FPGA远程更新bpi flash中multiboot的实现

    关于FPGA远程更新bpi flash中multiboot的实现 : 远程固化、flash固化、multiboot实现、bpi flash 一.什么叫multiboot ? multiboot 即 flash多重启动加载方式 ,常用于远程加载场景中,当远程加载失败时,flash会启动应急预案,将另一块地址的备用程序拿来作为加载FPGA的程序,防止由

    2024年02月15日
    浏览(27)
  • springboot整合pi支付开发

    pi支付流程图: 使用Pi SDK功能发起支付 由 Pi SDK 自动调用的回调函数(让您的应用服务器知道它需要发出批准 API 请求) 从您的应用程序服务器到 Pi 服务器的 API 请求以批准付款(让 Pi 服务器知道您知道此付款) Pi浏览器向用户显示付款详细信息页面,我们正在等待用户签署

    2024年02月07日
    浏览(26)
  • 使用可上网的服务器作为网关,实现另一台服务器上网

    本文的目标是利用一台可以上网的服务器作为网关,使在同一局域网中的所有服务器都可以上网。 假设有若干台服务器:A,B,C,D… 其中服务器 A 可以上网 。 现在的需求是——我想让B,C,D也可以上网,具体来说有两种网线连接的方法。 如果不使用交换机,需要用网线将

    2024年02月08日
    浏览(35)
  • 【触觉智能Purple Pi OH开发板体验】开箱体验:开源主板Purple Pi RK3566 上手指北

    前段时间收到来自【电子发烧友】的一款开发板,名叫: PurplePi ,2+16G售价仅249元。它使用的芯片是rk3566,适配的OpenHarmony版本为3.2 Release 是目前最便宜的OpenHarmony标准系统开源开发板,并且软硬件全部开源,听说在300元以内无敌手,由于博主第一次接触这类开发板,在做本期

    2024年02月14日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包