转载请注明本文出处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,其他或多或少都有一个或几个点没有到位(欢迎熟悉开发板的大佬提供更好的板子)。
产品图片
硬件接口图
硬件规格表
这个板子几乎能满足我全部的需求,同时还具有光口和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读卡器,这两样东西我也没有用过,对于当下手头没有这两样家什的筒子们应该是有用的。
DC电源图片
商家送的读卡器
DC电源购买链接:
https://ic-item.jd.com/10093010030514.html
3. USB转TLL模块
当时在买BPI-R4的时候,商家给我推荐了一个USB转TTL线,是2303芯片的,
PL2302模块图片
PL2302模块购买链接:
https://trade.taobao.com/trade/detail/trade_snap.htm?spm=a1z09.3.0.0.72a94a7fPEM5L4&tradeId=3706851350446339153
接上之后无法正常驱动,出现以下问题:
联系商家后,商家提供了解决方案,见下方链接:
解决"PL2303HXA自2012已停产,请联系供货商" USB不识别的问题
为方便起见,我将驱动程序搬运到此处:点此下载PL2302驱动
这个线使用后终于在启动BPI-R4后能看到屏幕输出了,但是却无法使用键盘进行输入,我一开始怀疑是这条线有问题,因此又买了第二个模块。
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卡,不要问我是怎么知道的...
TF卡图片
实验证明,上图的卡就很好用,8G容量够用了,价格便宜:14.9元,而且耐造,目前已经几十次的烧写镜像,使用没有出过任何问题。
TF卡购买链接:
https://item.jd.com/7250669.html#none
读卡器?上面买DC电源时不是送你读卡器了吗?
5. 5G模块
先说结论:BPI-R4在官方固件代码(OpenWrt-21.02)上可以使用移远通信(Quectel)的RM500U-CN
和RM500Q-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
也可以使用,但我手头没有,没有办法测试
Quectel RM500Q-GL实物图(图片来自闲鱼)
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宝购买的。
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卡才能正常工作,天线产品如下:
5G/4G通用棒状天线,型号:YECN009AA
天线射频转接线,型号: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模块
先说结论:MT7921
和MT7922
在OpenWrt-23.05
上确定可用,但是在官方固件源代码确定不可用;不可用的原因是官方源代码所采用的内核版本上mt76
和mac80211
驱动有BUG,根本就不能编译通过,使用OpenWrt-21.02.7
中相应的目录替换官方源代码的目录后能编译通过,也能搜到网络,但无法实现Wi-Fi AP或能,甚至也不能作用Wi-Fi Client使用。后经搜索发现是mt76
驱动在21.02
版本上无法正常使用,OpenWrt
官方Github上还有一个专门的mt76
项目用来解决这个问题,本着不放弃任何一个细节的原则,我毫不犹豫下载了该代码和官方源代码进行了合并编译,然后不出意外的编译失败了,原因是该mt76
代码库中有一个头文件并不在官方固件源代码的内核中...
好吧,世上无难事,只要肯放弃!只要我不坚持搞21.02
上使用MT7921
了,难题自然就会自动消失了。
不用7921我就下单了一个MT7915
,更确切点说是DR7915
要特别慎重,因为我没有用起来。
官方声明不支持7天无理由,非批量用户不提供技术支持,大家千万不要怀疑他们公司的执行力,绝对不会给你提供半个字有用的技术支持。发货可能是个看人品的事情,我可能人品不佳,我下单后直到淘宝官方客服介入才终于发了货。发货之前我想知道这个天线接口是IPEX1代还是IPEX4代,客服会客(ai)客(da)气(bu)气(li)的和你说5句话,但绝不会告诉你是1
还是4
,我只能到货后再自行观察,到货后更坑的来了,我以为这个模块仅仅是正面使用了凸起来的封装,拿到手后发现原来背面也是凸起来的封装啊!杯具啊!!! 根本不能安装在BPI-R4上,这个造型很可能难以安装在很多板子上!
本着买都买了的想法,我还想再抢救一下,在买转接线和转线板之前纠结一番后觉得转子可能看起来更清爽,更好固定一些,经过两次折腾,转接板终于到了,插到BPI-R4上使用官方镜像,额..没有发现PCI-E设备,这一定是OpenWrt-21.02
版本过低的原因!马上插上OpenWrt-23.05
SD卡,上电...好吧,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功能对我而言本就不是刚需,我也不想折腾了。
为什么第二次我在闲鱼上买7922,原因是我觉得淘宝上一手的MT7921
全新质量太次,反而是闲鱼上从品牌笔记本上拆机的无线网卡质量和做工更好一些,各位自行评估。
7. 散热片
- 20x20x4的带背胶纯铜散热片看着还不错,大小也正合适,主要是贴上后心理上觉得安全了一些,适用于CPU,NVMe硬盘,无线网卡和5G模块。
购买链接:
https://detail.tmall.com/item.htm?_u=vkb3av3e8f&id=641177162397&spm=a1z09.2.0.0.19852e8dpbPx1k
- 5G模块专用散热片
8. 风扇
也许能用到,也许用不着,6元一个,我看BPI官方也在用这个风扇,就备一个吧
注意:如果在BPI-R4背面安装NVMe硬盘的话,这个风扇的卡子是无法插到对应的位置的,需要使用硬盘的兄弟慎重购买
到现在为止,BPI-R4折腾之旅可以发车了 😃
三、Banana PI BPI-R4资料和固件
官方资料和固件:
搜索到的几个有用的文章:
根据上面文章提到的线索,我找到了据称将来要合并到OpenWrt-23.05
主线的BPI-R4可用的固件源码,感谢不吝分享知识的大佬们!
-
官方提供的固件源代码是
21.02
版,该代码提供了RM500U-CN
和RM520N-GL
和RM-500Q-GL
的支持
然而官方源代码对于无线网卡的支持并不好,因此本文我主要演示dangowrt大佬提供的固件源代码,该固件支持RM520N-GL
和RM500Q-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. 安装编译依赖项
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
需要下载的依赖项比较多,建议最好将Ubuntu的apt
源设置为清华镜像站或其他国内镜像站。
建议在Ubuntu上保留足够的可用磁盘空间,至少应具有64GB可用空间,推荐128G及以上。
编译使用的电脑推荐使用主频高、CPU核心数多的台式电脑,使用普通笔记本编译可能浪费您大量的时间。
3. 设置http和git代理
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"
如果您没有代理服务器,不建议继续以下步骤
4. 下载OpenWrt-23.05源代码
git clone -b bpi-r4 https://github.com/dangowrt/openwrt.git
本文所有的操作均在用户根目录下,例:/home/joseph
或~/
下拉代码结束后进入源代码目录,并且查看代码是否是bpi-r4
分支
cd openwrt
git show
5. 下载安装交叉编译依赖项
./scripts/feeds update -a
./scripts/feeds install -a
6. 配置编译项
make menuconfig
6.1 配置项如下:
- 首页
- Target System:
MediaTek Ralink ARM
- Subtarget:
Filogic 8x0 (MT798X)
- Target Profile:
Bananapi BPi-R4
- Target System:
- Base System:
- block-mount
- blocked
- Customize busybox options
- Base System > Linux System Utilities
- fdisk
- Kernel modules > Block Devices
- kmod-dax
- kmod-dm
- kmod-nvme
- kmod-scsi-core
- Kernel modules > Filesystems
- kmod-fs-exfat
- kmod-fs-ext4
- kmod-fs-ksmbd
- kmod-fs-ntfs3
- 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
- Kernel modules > Wireless Drivers
- kmod-mt7921-firmware
- kmod-mt7921e
- kmod-mt7922-firmware
此处手动添加kmod-mt7921-firmware
、kmod-mt7921e
和kmod-mt7922-firmware
, 取消kmod-mt7915e
,其他使用自动创建的依赖即可。
- LuCI > Collectioins
- luci
- luci-light
- LuCI > Modules
当在上一步骤中选择luci
选项后,配置程序会自动设置Modules选项,本文采用其默认值,仅在区域中加了中文
在LuCI > Modules > Translations
中添加中文支持
- LuCI > Modules > Translations
- Chinese Simplified (zh_Hans)
- LuCI > Applications
- luci-app-dockerman(注意:此处是
M
,非*
) - luci-app-ksmbd
- luci-app-dockerman(注意:此处是
- Network > SSH
- openssh-sftp-server
- Utilities
- dockerd(注意:此处是
M
,非*
) - pciutils
- usbutils
- dockerd(注意:此处是
- 最后,保存配置
6.2 添加5G上网和Wi-Fi所需的文件
请点击此处下载本章节中所需的文件
# 进入BPI-R4编译目标的目录
cd ~/openwrt/target/linux/mediatek/filogic/base-files
mkdir -p sbin && cd sbin
# 使用sftp或是其他工具将下列文件存入sbin目录中
# 1. quectel-atc-proxy
# 2. quectel-CM
# 3. quectel-mbim-proxy
# 4. quectel-qmi-proxy
# 设置执行权限
chmod +x ./*
# 进入/etc/init.d目录
cd ~/openwrt/target/linux/mediatek/filogic/base-files/etc/init.d
# 复制ltecalling文件至init.d目录中,该文件是5G模块连接网络的启动脚本
# 设置ltecalling执行权限
chmod +x ltecalling
# 创建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
# 添加网络接口配置
mkdir -p ~/openwrt/target/linux/mediatek/filogic/base-files/etc/config
# 将下列文件复制进刚才创建的config文件夹中
# 1. network (网络接口配置文件)
# 2. firewall (防火墙配置文件)
# 3. wireless (Wi-Fi配置文件)
其中network
文件配置如下:
config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fdd2:e351:889d::/48'
config device
option name 'br-lan'
option type 'bridge'
list ports 'lan1'
list ports 'lan2'
list ports 'lan3'
list ports 'eth1'
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
config device
option name 'br-wan'
option type 'bridge'
list ports 'wan'
list ports 'eth2'
config interface 'wan'
option device 'br-wan'
option proto 'dhcp'
config interface 'wan6'
option device 'br-wan'
option proto 'dhcpv6'
config interface '5G'
option device 'wwan0'
option proto 'dhcp'
firewall
如下:
config defaults
option syn_flood 1
option input REJECT
option output ACCEPT
option forward REJECT
# Uncomment this line to disable ipv6 rules
# option disable_ipv6 1
config zone
option name lan
list network 'lan'
option input ACCEPT
option output ACCEPT
option forward ACCEPT
config zone
option name wan
list network 'wan'
list network 'wan6'
list network '5G'
option input REJECT
option output ACCEPT
option forward REJECT
option masq 1
option mtu_fix 1
config forwarding
option src lan
option dest wan
# We need to accept udp packets on port 68,
# see https://dev.openwrt.org/ticket/4108
config rule
option name Allow-DHCP-Renew
option src wan
option proto udp
option dest_port 68
option target ACCEPT
option family ipv4
# Allow IPv4 ping
config rule
option name Allow-Ping
option src wan
option proto icmp
option icmp_type echo-request
option family ipv4
option target ACCEPT
config rule
option name Allow-IGMP
option src wan
option proto igmp
option family ipv4
option target ACCEPT
# Allow DHCPv6 replies
# see https://github.com/openwrt/openwrt/issues/5066
config rule
option name Allow-DHCPv6
option src wan
option proto udp
option dest_port 546
option family ipv6
option target ACCEPT
config rule
option name Allow-MLD
option src wan
option proto icmp
option src_ip fe80::/10
list icmp_type '130/0'
list icmp_type '131/0'
list icmp_type '132/0'
list icmp_type '143/0'
option family ipv6
option target ACCEPT
# Allow essential incoming IPv6 ICMP traffic
config rule
option name Allow-ICMPv6-Input
option src wan
option proto icmp
list icmp_type echo-request
list icmp_type echo-reply
list icmp_type destination-unreachable
list icmp_type packet-too-big
list icmp_type time-exceeded
list icmp_type bad-header
list icmp_type unknown-header-type
list icmp_type router-solicitation
list icmp_type neighbour-solicitation
list icmp_type router-advertisement
list icmp_type neighbour-advertisement
option limit 1000/sec
option family ipv6
option target ACCEPT
# Allow essential forwarded IPv6 ICMP traffic
config rule
option name Allow-ICMPv6-Forward
option src wan
option dest *
option proto icmp
list icmp_type echo-request
list icmp_type echo-reply
list icmp_type destination-unreachable
list icmp_type packet-too-big
list icmp_type time-exceeded
list icmp_type bad-header
list icmp_type unknown-header-type
option limit 1000/sec
option family ipv6
option target ACCEPT
config rule
option name Allow-IPSec-ESP
option src wan
option dest lan
option proto esp
option target ACCEPT
config rule
option name Allow-ISAKMP
option src wan
option dest lan
option dest_port 500
option proto udp
option target ACCEPT
wireless
如下:
config wifi-device 'radio0'
option type 'mac80211'
option path 'soc/11300000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
option channel '36'
option band '5g'
option htmode 'HE80'
option cell_density '0'
config wifi-iface 'default_radio0'
option device 'radio0'
option network 'lan'
option mode 'ap'
option ssid 'Szh-RS01'
option encryption 'psk2'
option key 'think8848'
至此,OpenWrt编译的准备工作完成,下面开始进行编译
7. 编译OpenWrt
7.1 预先下载内核和各类固件代码
# 虚拟机是8核虚拟CPU,我使用其中7个
# 可以不预先下载直接编译,如果不下载,有可能在编译的过程中某个代码下载失败造成编译失败,又得重新开始,我习惯上是先把所有除编译错误之外的故障排除完,然后定定心心的开始编译
make download -j7
看看这一排排的下载地址,没有代理是有点糟心(也可能使用国内源能够解决这个问题,我没有试过)
7.2 开始编译
# 开始时间 22:38 结束时间 23:16 编译总时长: 38m
make V=s -j7
编译时的CPU利用率,2016年的i7 7700K
编译成功,未出现致命错误
编译好输出目录
五、部署OpenWrt
1. 准备TF卡烧录工具
可以Windows上烧录TF卡,Windows使用Etchar工具;也可以在Linux上烧录TF卡,下面是Linux上烧录工具的下载安装方式。实验证明Windows上烧录TF卡真的很辣鸡,经常性烧录校验失败,而且每次将TF接入电脑后,电脑就卡死,推荐使用Linux烧录工具
sudo apt install -y pv
curl -sL https://github.com/BPI-SINOVOIP/bpi-tools/raw/master/bpi-tools | sudo -E bash
Linux下烧录工具
2. 将编译好的镜像烧录到TF卡上
# 将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
# 写入SD(TF)卡,注意:您的SD卡可能不一定和我一样是/dev/sdb,请按实际情况进行调整
sudo ./bpi-copy openwrt-mediatek-filogic-bananapi_bpi-r4-sdcard.img /dev/sdb
到此,可以将TF插入BPI-R4,将跳线设置为SD卡启动
3. 查看OpenWrt
使用Terminal登录进系统,可以看到Banner界面。
# 查看5G模块和PCI-E设备,可以看到`Quectel RM500Q-Gl`5G模块,`Mediatek MT7922`无线网卡和`Intel SSD 600P`NVMe固态硬盘
lsusb
lspci
cd /dev && ls
ping www.baidu.com
# 查看5G模块拨号情况(注意,启动系统后大概过30秒再查看)
ps | grep quectel
# 查看网络接口(同样待系统启动30秒后再查看)
ifconfig
下图上phy0-ap0
为无线网卡,wwan0
为5G模块
此时我正在写文档的电脑通过有线连接在BPI-R4的Lan口上,已经可以正常上网,注意:当电脑连上BPI-R4后,一开始的时候是可以ping
通域名的(如:www.baidu.com),过一会儿后就ping
不通了,再过一会儿又会ping
通,然后就稳定下来了。
换个姿势来看OpenWrt
😃
概览
端口和5G网络
无线(无线网卡驱动可能不对,另外使用了笔记本天线,请无视渣渣信号)
磁盘挂载
六、配置应用服务
1. 将NVMe固态硬盘挂载为OpenWrt的/overlay
目录
- 选择NVMe固态硬盘挂载点,点击
编辑
按钮,在打开的弹出框中将挂载点
设置为/overlay
,选中已启用
,然后点击保存
按钮。
注意:在挂载磁盘之前,最好将磁盘上清空,避免发生未知错误
- 关闭弹出框后,点击屏幕下方的
保存与应用
按钮。
- 重启BPI-R4
- 重启后可以看到NVMe固态硬盘已经被挂载为
/
和/overlay
2. 部署Docker
- 准备
opkg
源
如果您计划直接使用Ubuntu
上编译目录(~/openwrt/bin
)中的文件作为opkg源,则可以考虑使用python
的http.server
(http.server文档)挂载http服务;因为我编译使用的是Ubuntu
虚拟机,而且网络设置为nat
模式,如果要让OpenWrt访问该虚拟机还需要重新设置网络,因此我直接将编译目录中的文件复制到写该Blog的Windows
上。
Ubuntu
文件层级见下图:
Windows
文件层级见下图:
Windows
环境上配置HTTP服务器
a. 把base
,luci
,packages
,routing
,telephony
和targets/mediatek/filogic
目录复制到Windows
环境中。
b. 下载Windows
下轻量化HTTP服务器Rebex Tiny Web Server(官网)。解压,并设置wwwroot
目录
<!-- Root directory of the web server. -->
<add key="webRootDir" value="D:\self\packages\aarch64_cortex-a53" />
启动Rebex Tiny Web Server
c. 修改OpenWrt
中opkg
配置,将/etc/opkg/distfeeds.conf
设置如下:
src/gz openwrt_core http://192.168.1.147:1180/filogic/packages
src/gz openwrt_base http://192.168.1.147:1180/base
src/gz openwrt_luci http://192.168.1.147:1180/luci
src/gz openwrt_packages http://192.168.1.147:1180/packages
src/gz openwrt_routing http://192.168.1.147:1180/routing
src/gz openwrt_telephony http://192.168.1.147:1180/telephony
d. 更新opkg
源
opkg update
- 安装
docker
opkg install dockerd
opkg install docker
docker ps
可以看到docker
已经启动
- 配置
Docker
a. 配置开机启动
/etc/init.d/dockerd enable
b. 配置Docker
防火墙设置以及使用网易的Repository
vi /etc/config/dockerd
# 增加配置项
# 将option iptables 设置为 '0'
# list registry_mirrors 'https://hub-mirror.c.163.com'
此处可以重启BPI-R4检验Docker
是否可以正常开机启动
c. 测试Docker
测试Docker的时候不要和LuCI端口冲突
docker run -d --name nginx -p 8080:80 nginx
docker ps -a
打开nginx主页
3. 配置ksmbd
- 在
OpenWrt
根目录/
下创建文件共享目录
mkdir -p /smbroot
# 创建测试文件
echo hello think8848 >> /smbroot/readme.txt
设置只run许lan
口访问,因为我将来只是需要提供只读的工具共享,因此我允许匿名访问,并且是只读目录,见下图:
保存配置后查看共享文件夹
4. 某些情况下可能需要配置DNS
转发服务
安装部署OpenWrt
后,某些情况下LAN
网络上的设备可能无法正常解析域名,这个问题我没有去细究,解决方法是直接为dnsmasq
配置DNS
转发。
正好这时我的电脑是可以正常解析域名的,这个没有什么好测试的,上图演示了修改DNS转发的位置,有需要的筒子们请自行设置
七、后记
至此,本文一开始我确立的目标全部达到了,对于我而言,这篇文章是对近期折腾BPI-R4的一个记录,只有记录下来了,这次折腾就算是有一点点意义,不然半个月之后肯定全部忘却了。后续我计划在OpenWrt-21.02
上部署工作所需的正式环境,原理和23.05
类似。为什么我自己要在21.02
上部署?这不是RM500U-CN
不支持23.05
嘛,RM500Q-GL
留下来在必要的时候做测试用 😃
文内的所有代码和操作步骤我全部经过测试验证,如在参考过程出现错误,请仔细比对环境、版本是否和我使用的一致,建议使用干净的Ubuntu系统、NVMe硬盘进行测试。本文基本上一次成型,写作时间有限,后期非特殊情况也不会再行更新,对于本文语言组织欠佳,章节顺序混乱我深表歉意。
其实在折腾BPI-R4的这一段时间里,学习到不少有用的知识,感觉对于Linux、嵌入式、驱动迁移等好多知识都有涉及,感觉非常有意思,虽然本文可能是我所有博文中最长的一篇了,但实际上在折腾中遇到的、学到的远非这些,我基本上只描述了结果,过程和原理基本都没有讲,比方说为什么开机就自动拨号了,Wi-Fi没有配置为啥就可以连了,等等。没有更多细节的原因有两个,一个是我确实没有多少时间写文档,另一个是我对于OpenWrt算是浅尝辄止了,有些东西你让我说我也说不明白,后续也没有继续深入学习研究的条件,所以就只能这样了,希望能帮到有需要的朋友。
同时,也希望用到看到这篇文章的大佬们不吝指教,提出宝贵的意见建议,能够帮助到更多有需要的朋友,谢谢!