BPI-R4 Snapshot vs MT7988A RFB 23.05.4 Stable Image

I know that it’s going to be a while yet before the BPI-R4 has anything other than a snapshot image via the OpenWRT firmware selector. I’ve been evaluating the snapshot images for a bit now and everything has been working, but the board is definitely not yet performing consistently. I’m not using the Wi-Fi capabilities. I’m only using this as a modem replacement to allow me to customize the IPv6 Prefix size I receive from my ISP (/60 instead of /64) and to increase the permitted connection buffer available to the WAN vs the ISP’s modem. I have a block of 16 static public IPs as well so I’m not using the OpenWRT masquerade or NAT capabilities at all. In fact, I’ve disabled them which should increase performance.

That all said, whilst connected directly to the WAN SFP+ port and the LAN SFP+ port, I’m lucky to get over 780Mbps download and 150Mbps upload. I have a gigabit symmetrical ISP and when connected to the ISP’s provided modem, I receive an actual 960Mbps download, 995Mbps upload, darn near line-rate.

I’ve noticed that there is an OpenWRT stable release for the MT7988 RFB v23.05.4, which from the best I can figure, is the same board the BPI-R4 is based on via the MediaTek <=> BananaPi collaboration on this project. They look nearly identical! When MediaTek + BPI debuted the BE1900 last year, MediaTek released an image of the BE1900 running on what looks like a release candidate board that is identical to the BPI-R4. See here: MediaTek | MediaTek Filogic 880 | BPI-R4 Wi-Fi 7 OpenWRT

This makes me wonder if I can just install the MT7988A-RFB image instead of the BPI-R4 snapshot based on the same hardware. Has anyone tried?

Also, what’s your LAN performance been like (not Wi-Fi)?

Isn’t this a mess?

I have yet to receive my board, I’m just learning how to the compile firmware at the moment. I’m using WSL and followed all instructions to the ‘T’. I was able to compile the official release of ‘BPI-R4-MT76-OPENWRT-V21.02’, but it creates sysupgrade files whereas i need a full firmware image (from what i understand)… Im not sure how to change that.

I cloned one of the openwrt releases and just compiled that and got the full firmware… Its has ‘RFB’ in the name… not even sure what version of openwrt i checked out anymore, but it compiled… Though im scared to death to actually try and flash it when I get my board… Even when I do, i doubt everything will work as it should… i have no idea what drivers to bake in for PCIe and whatnot…What I did notice right off the bat is the u-boot.bin file has ‘bl31’ whereas the ‘official’ files have u-boot bl2… im guessing thats bootloader version 2 vs 3.1? Hell if i know… again, scared to death to flash that and brick my device right off the jump.

Im finding it exceedingly frustrating there’s not a fully working tutorial/release that I can simply ‘make’ without issue and then add the packages I so choose. If i’m wrong about this, by all means please point me in the right direction.

Heres my buildinfo. If one of you guys thats much smarter than me notices anything wrong off the jump, please point that out!

CONFIG_TARGET_mediatek=y
CONFIG_TARGET_mediatek_filogic=y
CONFIG_TARGET_mediatek_filogic_DEVICE_mediatek_mt7988a-rfb=y
CONFIG_LIBQMI_COLLECTION_BASIC=y
CONFIG_LIBQMI_WITH_MBIM_QMUX=y
CONFIG_LIBQMI_WITH_QRTR_GLIB=y
CONFIG_MODEMMANAGER_WITH_MBIM=y
CONFIG_MODEMMANAGER_WITH_QMI=y
CONFIG_MODEMMANAGER_WITH_QRTR=y
CONFIG_PACKAGE_ca-certificates=y
CONFIG_PACKAGE_cgi-io=y
CONFIG_PACKAGE_dbus=y
# CONFIG_PACKAGE_dnsmasq is not set
CONFIG_PACKAGE_dnsmasq-dhcpv6=y
CONFIG_PACKAGE_glib2=y
CONFIG_PACKAGE_kmod-mii=y
CONFIG_PACKAGE_kmod-nls-base=y
CONFIG_PACKAGE_kmod-usb-core=y
CONFIG_PACKAGE_kmod-usb-net=y
CONFIG_PACKAGE_kmod-usb-net-cdc-ether=y
CONFIG_PACKAGE_kmod-usb-net-cdc-mbim=y
CONFIG_PACKAGE_kmod-usb-net-cdc-ncm=y
CONFIG_PACKAGE_kmod-usb-net-qmi-wwan=y
CONFIG_PACKAGE_kmod-usb-wdm=y
CONFIG_PACKAGE_libattr=y
CONFIG_PACKAGE_libdbus=y
CONFIG_PACKAGE_libexpat=y
CONFIG_PACKAGE_libffi=y
CONFIG_PACKAGE_liblucihttp=y
CONFIG_PACKAGE_liblucihttp-ucode=y
CONFIG_PACKAGE_libmbim=y
CONFIG_PACKAGE_libpcre2=y
CONFIG_PACKAGE_libqmi=y
CONFIG_PACKAGE_libqrtr-glib=y
CONFIG_PACKAGE_luci=y
CONFIG_PACKAGE_luci-app-firewall=y
CONFIG_PACKAGE_luci-app-opkg=y
CONFIG_PACKAGE_luci-base=y
CONFIG_PACKAGE_luci-light=y
CONFIG_PACKAGE_luci-mod-admin-full=y
CONFIG_PACKAGE_luci-mod-dashboard=y
CONFIG_PACKAGE_luci-mod-network=y
CONFIG_PACKAGE_luci-mod-status=y
CONFIG_PACKAGE_luci-mod-system=y
CONFIG_PACKAGE_luci-proto-ipv6=y
CONFIG_PACKAGE_luci-proto-mbim=y
CONFIG_PACKAGE_luci-proto-modemmanager=y
CONFIG_PACKAGE_luci-proto-ppp=y
CONFIG_PACKAGE_luci-proto-qmi=y
CONFIG_PACKAGE_luci-theme-bootstrap=y
CONFIG_PACKAGE_modemmanager=y
CONFIG_PACKAGE_rpcd=y
CONFIG_PACKAGE_rpcd-mod-file=y
CONFIG_PACKAGE_rpcd-mod-iwinfo=y
CONFIG_PACKAGE_rpcd-mod-luci=y
CONFIG_PACKAGE_rpcd-mod-rrdns=y
CONFIG_PACKAGE_rpcd-mod-ucode=y
CONFIG_PACKAGE_ucode-mod-html=y
CONFIG_PACKAGE_ucode-mod-math=y
CONFIG_PACKAGE_uhttpd=y
CONFIG_PACKAGE_uhttpd-mod-ubus=y
CONFIG_PACKAGE_umbim=y
CONFIG_PACKAGE_uqmi=y
CONFIG_PACKAGE_wwan=y
CONFIG_PACKAGE_zlib=y

I ended up comparing the differences in what packages would be installed using the latest 23.05.4-mediatek-filogic.Linux image builder vs the mediatek-filogic(SNAPSHOT) image builder. Once downloaded, I attempted to run:

make manifest PROFILE="mediatek_mt7988a-rfb" \
PACKAGES="kmod-hwmon-pwmfan kmod-i2c-mux-pca954x -wpad-basic-mbedtls kmod-eeprom-at24 \
kmod-mt7996-firmware kmod-rtc-pcf8563 kmod-sfp kmod-usb3 e2fsprogs f2fsck mkf2fs \
mt7988-2p5g-phy-firmware wpa-supplicant kmod-usb-storage kmod-usb-storage-uas usbutils \
block-mount libblkid gdisk kmod-fs-ext4 kmod-fs-exfat exfat-fsck f2fs-tools kmod-fs-f2fs \
hdparm vim parted kmod-nvme btrfs-progs kmod-macvlan curl vim fdisk luci luci-ssl \
luci-compat hd-idle luci-lib-ipkg luci-app-hd-idle kmod-nf-nat kmod-nf-nathelper bash \
kmod-nft-nat kmod-nft-core kmod-nf-log kmod-nf-log6 kmod-nf-reject kmod-nf-reject6 \
kmod-phy-aquantia kmod-phylink kmod-thermal kmod-usb-core kmod-mt7996e jsonfilter \
kmod-gpio-button-hotplug ca-bundle kmod-crypto-crc32c kmod-nft-core kmod-nf-flow \
kmod-nf-ipt kmod-ipt-core kmod-lib-crc16 kmod-nls-base kmod-ipt-nat6 libc coreutils \
fstools kmod-leds-gpio nano" STRIP_ABI=1

However, after doing so, I received the error:

Downloading file:packages/Packages Updated list of available packages in /OpenWRT-Image/openwrt-imagebuilder-23.05.4-mediatek-filogic.Linux-x86_64-15SEP2024/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/…/…/…/…/…/…/…/…/OpenWRT-Image/openwrt-imagebuilder-23.05.4-mediatek-filogic.Linux-x86_64-15SEP2024/dl/imagebuilder Downloading file:packages/Packages.sig Signature check passed. Collected errors:

  • opkg_install_cmd: Cannot install package mt7988-2p5g-phy-firmware.

Which in this case, would indicate that the package mt7988-2p5g-phy-firmware is not available currently for OpenWRT 23.05.4. Whilst I might be able to compile it without this package, as well as others, it likely wouldn’t run well so this idea is scrapped until the MediaTek MT7988 SoC firmware is added to the stable release track. I might even be able to force it in there with a little thought and time but that’s just not something I’m willing to do when I’d imagine that we’ll have a stable release hopefully, in the next 6 months.

I’m sure there are other packages that wouldn’t be included too but this error told me all I needed to know for the meantime in my case.

There actually is a really easy to use image builder here. You MUST install it on a X86-64bit (IE: a modern Intel or AMD based system) OS. I chose Ubuntu 22.04 LTS for its simplicity. I did try 24.04 LTS but I ran into SSL errors via OpenSSL with that so I fell back to 22.04 LTS (still supported BTW). Anyways, it took 5 minutes to get it setup to run the image builder via:

sudo apt install build-essential libncurses-dev zlib1g-dev gawk git \
gettext libssl-dev xsltproc rsync wget unzip python3 python3-distutils

If you decide to install on 24.04 LTS, that last package python3-distutils is no longer available (it’s deprecated). You must use python3-setuptools since it will have the newer python3.12 installed instead of the python3.10 that 22.04 LTS comes with.

I found it easier just to run the setup command for the OpenWRT Build System as well via:

sudo apt update
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev \
python3-setuptools rsync swig unzip zlib1g-dev file wget

After that, you Download the Image Builder (SNAPTSHOT) here.

Extract it via:

tar --zstd -xvf openwrt-imagebuilder-*.tar.zst

Then cd to the directory and run make info to get started.

The command I copied earlier is what I’m using to create my images right now. I’ve a lot of extra packages to enable extroot to a NVMe drive and so that I can use bash instead of ash when I prefer, amongst other things.

Keep in mind that the image builder will generate all of the packages that you need to install the production OS, preloader.bin, bl31 and u-boot images on your BPI-R4’s NAND, eMMC, and SD-Card via a .img.gz file. It will NOT include the recovery OS image, which I wanted to install on the NAND. I likely won’t need it but I don’t intend on the NAND running the production OS as I won’t be regularly booting from it. If you want the recovery OS, then you’ll need to download it (this is a SNAPTSHOT link) here.

Here’s the link to browse the directory where the image links I’ve shared are located: MediaTek Filogic OpenWRT Snapshots.

@btbutts,

Thank you for taking the time to write that up for me!

I was able to use the image builder to configure my image and as far as I can tell, have all the files necessary to flash my device once I finally get it…I just wish I could emulate it :slight_smile:

The only thing that irks me is I keep seeing a53 where the banana pi r4 is a a73, right? Does this have any impact on operation?

Regarding your concerns with 2.5g driver/firmware, would it be possible to mount the compiled image off one of these other builds, steal the driver and add it to your compiled firmware? Just a thought :thinking: