BPI-R4 Lite Ubuntu Image

Do you think I need to add the custom kernel build into buildimg.sh? Is there anything special that happens there that would provide support for the kernel change? I did add a bunch of stuff to the kernel I made.

CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=m
CONFIG_IP_SET_BITMAP_IPMAC=m
CONFIG_IP_SET_BITMAP_PORT=m
CONFIG_IP_SET_HASH_IP=m
CONFIG_IP_SET_HASH_IPMARK=m
CONFIG_IP_SET_HASH_IPPORT=m
CONFIG_IP_SET_HASH_IPPORTIP=m
CONFIG_IP_SET_HASH_IPPORTNET=m
CONFIG_IP_SET_HASH_IPMAC=m
CONFIG_IP_SET_HASH_MAC=m
CONFIG_IP_SET_HASH_NETPORTNET=m
CONFIG_IP_SET_HASH_NET=m
CONFIG_IP_SET_HASH_NETNET=m
CONFIG_IP_SET_HASH_NETPORT=m
CONFIG_IP_SET_HASH_NETIFACE=m
CONFIG_IP_SET_LIST_SET=m


CONFIG_NF_NAT=m
CONFIG_NF_NAT_AMANDA=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_SIP=m
CONFIG_NF_NAT_TFTP=m
CONFIG_NF_NAT_REDIRECT=y
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NF_NAT_OVS=y
CONFIG_NFT_NAT=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_NAT=m
CONFIG_IP6_NF_NAT=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_SNAT=m

CONFIG_NETFILTER_XT_MARK=m
CONFIG_NETFILTER_XT_CONNMARK=m
CONFIG_NETFILTER_XT_SET=m
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_RATEEST=m
CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
CONFIG_NETFILTER_XT_TARGET_TEE=m
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_CPU=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ECN=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_L2TP=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
CONFIG_NETFILTER_XT_MATCH_OSF=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_RECENT=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_TIME=m
CONFIG_NETFILTER_XT_MATCH_U32=m

CONFIG_NETFILTER_ADVANCED=y
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_EGRESS=y
CONFIG_NETFILTER_SKIP_EGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_BPF_LINK=y
CONFIG_NETFILTER_NETLINK_HOOK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NETFILTER_NETLINK_OSF=m
CONFIG_NETFILTER_CONNCOUNT=m
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
CONFIG_NETFILTER_SYNPROXY=m
CONFIG_NETFILTER_XTABLES=m
CONFIG_NETFILTER_XTABLES_COMPAT=y

CONFIG_NF_CONNTRACK=m
CONFIG_NF_LOG_SYSLOG=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_TIMEOUT=y
CONFIG_NF_CONNTRACK_TIMESTAMP=y
CONFIG_NF_CONNTRACK_LABELS=y
CONFIG_NF_CONNTRACK_OVS=y
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_BROADCAST=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
CONFIG_NF_CONNTRACK_SNMP=m
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SANE=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
CONFIG_NF_CT_NETLINK_TIMEOUT=m
CONFIG_NF_CT_NETLINK_HELPER=m
CONFIG_NF_NAT=m
CONFIG_NF_NAT_AMANDA=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_SIP=m
CONFIG_NF_NAT_TFTP=m
CONFIG_NF_NAT_REDIRECT=y
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NF_NAT_OVS=y
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NF_DUP_NETDEV=m
CONFIG_NF_FLOW_TABLE_INET=m
CONFIG_NF_FLOW_TABLE=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_SOCKET_IPV4=m
CONFIG_NF_TPROXY_IPV4=m
CONFIG_NF_TABLES_IPV4=y
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_DUP_IPV4=m
CONFIG_NF_LOG_ARP=m
CONFIG_NF_LOG_IPV4=m
CONFIG_NF_REJECT_IPV4=m
CONFIG_NF_NAT_SNMP_BASIC=m
CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_RPFILTER=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_SECURITY=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
CONFIG_NF_SOCKET_IPV6=m
CONFIG_NF_TPROXY_IPV6=m
CONFIG_NF_TABLES_IPV6=y
CONFIG_NF_DUP_IPV6=m
CONFIG_NF_REJECT_IPV6=m
CONFIG_NF_LOG_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
CONFIG_IP6_NF_MATCH_FRAG=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_HL=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RPFILTER=m
CONFIG_IP6_NF_MATCH_RT=m
CONFIG_IP6_NF_MATCH_SRH=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_NF_DEFRAG_IPV6=m
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NF_CONNTRACK_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m

CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_FIB_TRIE_STATS=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y
CONFIG_NET_IP_TUNNEL=m
CONFIG_IP_MROUTE_COMMON=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_IP_SET=m
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=m
CONFIG_IP_SET_BITMAP_IPMAC=m
CONFIG_IP_SET_BITMAP_PORT=m
CONFIG_IP_SET_HASH_IP=m
CONFIG_IP_SET_HASH_IPMARK=m
CONFIG_IP_SET_HASH_IPPORT=m
CONFIG_IP_SET_HASH_IPPORTIP=m
CONFIG_IP_SET_HASH_IPPORTNET=m
CONFIG_IP_SET_HASH_IPMAC=m
CONFIG_IP_SET_HASH_MAC=m
CONFIG_IP_SET_HASH_NETPORTNET=m
CONFIG_IP_SET_HASH_NET=m
CONFIG_IP_SET_HASH_NETNET=m
CONFIG_IP_SET_HASH_NETPORT=m
CONFIG_IP_SET_HASH_NETIFACE=m
CONFIG_IP_SET_LIST_SET=m
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_TAB_BITS=12
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_FO=m
CONFIG_IP_VS_OVF=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_MH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
CONFIG_IP_VS_TWOS=m
CONFIG_IP_VS_SH_TAB_BITS=8
CONFIG_IP_VS_MH_TAB_INDEX=12
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_RPFILTER=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_SECURITY=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
CONFIG_IP_SCTP=m
CONFIG_ALTERA_PR_IP_CORE=m

CONFIG_NFT_NUMGEN=m
CONFIG_NFT_CT=m
CONFIG_NFT_FLOW_OFFLOAD=m
CONFIG_NFT_CONNLIMIT=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
CONFIG_NFT_MASQ=m
CONFIG_NFT_REDIR=m
CONFIG_NFT_NAT=m
CONFIG_NFT_TUNNEL=m
CONFIG_NFT_QUEUE=m
CONFIG_NFT_QUOTA=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_REJECT_INET=m
CONFIG_NFT_COMPAT=m
CONFIG_NFT_HASH=m
CONFIG_NFT_FIB=m
CONFIG_NFT_FIB_INET=m
CONFIG_NFT_XFRM=m
CONFIG_NFT_SOCKET=m
CONFIG_NFT_OSF=m
CONFIG_NFT_TPROXY=m
CONFIG_NFT_SYNPROXY=m
CONFIG_NFT_DUP_NETDEV=m
CONFIG_NFT_FWD_NETDEV=m
CONFIG_NFT_FIB_NETDEV=m
CONFIG_NFT_REJECT_NETDEV=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NFT_DUP_IPV4=m
CONFIG_NFT_FIB_IPV4=m
CONFIG_NFT_REJECT_IPV6=m
CONFIG_NFT_DUP_IPV6=m
CONFIG_NFT_FIB_IPV6=m
CONFIG_NFT_BRIDGE_META=m
CONFIG_NFT_BRIDGE_REJECT=m

CONFIG_SECURITY

Build.sh only uses precompiled kernel either kernelfile when skipkerneldownload=1 or download latest 6.12 from my repos releases. First way is how you add your own kernel package.

But if you already have sdcard with the flashed image you can also install new kernel with kernel repos build.sh after building. You do not need to create new image.

I got a working kernel built that lets my iptables overlay fully function.

🔍 Checking kernel ../build/.config against update-kernel-config.config...

✅  CONFIG_NETFILTER=y
✅  CONFIG_NETFILTER_XTABLES=m
✅  CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
✅  CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
✅  CONFIG_IP_SET=m
✅  CONFIG_IP_SET_MAX=256
✅  CONFIG_IP_SET_HASH_IP=m
✅  CONFIG_IP_SET_HASH_NET=m
✅  CONFIG_IP_SET_HASH_NETPORT=m
✅  CONFIG_NETFILTER_XT_SET=m
✅  CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
✅  CONFIG_NETFILTER_XT_NAT=m
✅  CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
✅  CONFIG_NF_NAT=m
✅  CONFIG_NF_NAT_MASQUERADE=y
✅  CONFIG_NETFILTER_ADVANCED=y
✅  CONFIG_IP_SET_BITMAP_IP=m
✅  CONFIG_IP_SET_BITMAP_IPMAC=m
✅  CONFIG_IP_SET_BITMAP_PORT=m
✅  CONFIG_NETFILTER_XT_SET=m
✅  CONFIG_NF_NAT_REDIRECT=y
✅  CONFIG_NF_CONNTRACK=m
✅  CONFIG_NF_CONNTRACK_MARK=y
✅  CONFIG_NF_CONNTRACK_EVENTS=y
✅  CONFIG_NF_CONNTRACK_TIMEOUT=y
✅  CONFIG_NF_TABLES_BRIDGE=m
✅  CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
✅  CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m

✅ Check complete.

Now to see what else is needs to be fixed lol :upside_down_face:

Hi @frank-w things are working out well. Thanks again for all your help. I have one more question. What make/model 2.5Gbe SFP is supported for this build? Should be plug-n-play right? Which has best results in your opinion?

@frank-w

Is r4lite currently supporting up to kernel 6.17.0?

Since that I flashed it with noble_6.18.0-main, and it booted kernel in 6.17.0.

gunzip -c bpi-r4lite_noble_6.18.0-main_sdmmc.img.gz | dd bs=512 conv=notrunc,fsync of=/dev/mmcblk0

Kernel

BPI-R4L> run newboot
## Error: "initrd" not defined
EXT_CSD[179], PARTITION_CONFIG:
BOOT_ACK: 0x1
BOOT_PARTITION_ENABLE: 0x1 (boot0)
PARTITION_ACCESS: 0x0 (user)
emmc available
SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
NOR available
bootconf=#conf-base-r4lite#ov-lite-emmc#ov-lite-nor
fit=bpi-r4.itb
10045884 bytes read in 228 ms (42 MiB/s)
No UBIFS volume mounted!
## Loading kernel (any) from FIT Image at 46000000 ...
   Using 'conf-base-r4lite' configuration
   Trying 'kernel-1' kernel subimage
     Description:  Linux Kernel 6.17.0-main
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x460000e8
     Data Size:    9860553 Bytes = 9.4 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x44000000
     Entry Point:  0x44000000
     Hash algo:    sha1
     Hash value:   220d1ec5c6d8dad9b606cbcadc6ac700d1ae0300
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'conf-base-r4lite' configuration
   Trying 'fdt-base-lite' fdt subimage
     Description:  Flattened Device Tree blob BPI-R4 Lite
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x4698a440
     Data Size:    31042 Bytes = 30.3 KiB
     Architecture: AArch64
     Load Address: 0x47000000
     Hash algo:    sha1
     Hash value:   464f5c52fc7e8c532568afea9963cbe072ea6b9c
   Verifying Hash Integrity ... sha1+ OK
   Loading fdt from 0x4698a440 to 0x47000000
   Loading Device Tree to 00000000be7ed000, end 00000000be7f7fff ... OK
Working FDT set to be7ed000
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'ov-lite-emmc' configuration
   Trying 'fdt-ov-lite-emmc' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x469929ec
     Data Size:    878 Bytes = 878 Bytes
     Architecture: Unknown Architecture
   Verifying Hash Integrity ... OK
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'ov-lite-nor' configuration
   Trying 'fdt-ov-lite-nor' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x46993318
     Data Size:    919 Bytes = 919 Bytes
     Architecture: Unknown Architecture
   Verifying Hash Integrity ... OK
   Booting using the fdt blob at 0xbe7ed000
Working FDT set to be7ed000
   Uncompressing Kernel Image to 44000000
   Loading Device Tree to 00000000be7e2000, end 00000000be7eccce ... OK
Working FDT set to be7e2000

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 6.17.0-bpi-r4-main (ubuntu@c40702609f18) (aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #1 SMP Wed Oct 15 11:40:22 CST 2025
[    0.000000] Machine model: Bananapi BPI-R4-LITE
[    0.000000] earlycon: uart8250 at MMIO32 0x0000000011000000 (options '')

...
...
...
root@bpi-r4:~# uname -a
Linux bpi-r4 6.17.0-bpi-r4-main #1 SMP Wed Oct 15 11:40:22 CST 2025 aarch64 aarch64 aarch64 GNU/Linux
root@bpi-r4:~#
root@bpi-r4:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
root@bpi-r4:~#

Possibly i created image a day before 6.18 was officially out,so tagging is still 6.17-rcX…will recreate image soon.thanks for reporting. You can also install actual kernwl in the flashed system by simply unpacking the folder content in the tar.gz to the right foldr or when building yourself with install option after build

I have already used the u-boot (2016.01) and kernel (6.18-main) images that I built for r4lite instead of yours. However, it booted in kernel 6.17-main logged as above.

Here is the sourcefiles_bpi-r4.conf:

variant=bpi-r4lite
replacehostapd=1
replaceiperf=1
skipubootdownload=1
skipkerneldownload=1
imgfile=bpi-r4lite_emmc.img.gz
kernelfile=bpi-r4lite_6.18.0-main.tar.gz

Are there things that I misunderstood or the build script(s) not work?

Should be right…wonder why 6.17 is shown…is the kernel tar latest available?

Yes, this is the first time I build r4lite with kernel 6.18.

As we can observe the kernel is booting with r4lite config but Linux Kernel 6.17.0-main.

I’m also wondering this part

[    0.000000] Linux version 6.17.0-bpi-r4-main (ubuntu@c40702609f18) (aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #1 SMP Wed Oct 15 11:40:22 CST 2025
[    0.000000] Machine model: Bananapi BPI-R4-LITE

that shows the system loaded 6.17.0-bpi-r4-main which I built in Oct 15 11:40:22 CST 2025? But I never build it for r4lite before, except r4.

I will try to clean up the workspace and recreate the noble image next week.

But date says october…so obvously an older kernel. Please download latest tarball.

Kernel is same for r4,r4ro and r4lite and also for all r4variants the same config in images repo is used.

@frank-w

Now I know the root cause.

Last week I ran “useusb” before “newboot” so the system may fetched “fit=bpi-r4.itb” which was kernel 6.17-main I built and stored in the USB drive:

BPI-R4L> run useusb
USB is stopped. Please issue 'usb start' first.
starting USB...
xhci-mtk xhci@11200000: hcd: 0x0000000011200000, ippc: 0x0000000011203e00
xhci-mtk xhci@11200000: ports disabled mask: u3p-0x1, u2p-0x0
xhci-mtk xhci@11200000: u2p:1, u3p:1
Starting the controller
USB XHCI 1.20
Bus xhci@11200000: 3 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found
            System Volume Information/
 16546559   rootfs_arm64.cpio.zst
   200072   bl2_emmc.img
   249432   bl2_emmc-r4.img
  9518220   bpi-r3.itb
 99284725   bpi-r3_6.12.47-main.tar.gz
   200793   bpi-r3_emmc_bl2.img
   281953   bpi-r3_emmc_fip.bin
 846386199   bpi-r3_noble_6.12.47-main_sdmmc.img.gz
   209616   bpi-r3_spim-nand_bl2.img
   279581   bpi-r3_spim-nand_fip.bin
 10045884   bpi-r4.itb
 105967381   bpi-r4_6.12.47-main.tar.gz
 111991587   bpi-r4_6.17.0-main.tar.gz
   250190   bpi-r4_emmc_bl2.img
   382661   bpi-r4_emmc_fip.bin
 836406326   bpi-r4_noble_6.12.47-main_sdmmc.img.gz
 857623777   bpi-r4_noble_6.17.0-main_sdmmc.img.gz
   254821   bpi-r4_spim-nand_bl2.img
   373037   bpi-r4_spim-nand_fip.bin
    17408   gpt_emmc_100m6g.img
 69584284   mtk-bpi-r3-EMMC-WAN1-RJ45-20220720-single-image.img
 38666240   mtk-bpi-r3-NAND-WAN1-RJ45-20220720-single-image.bin
 27956672   mtk-bpi-r3-NOR-WAN1-RJ45-20220720-single-image.bin
 107114041   mtk-bpi-r4-EMMC-20240620.img
 77725696   mtk-bpi-r4-NAND-20240620.img
 107114041   mtk-bpi-r4-SD-20240620.img
  9699328   openwrt-mediatek-filogic-bananapi_bpi-r3-initramfs-recovery.itb
 55967744   mtk-bpi-r4-NAND.img
   124146   r8125-9.016.01.tar.bz2
 114332214   bpi-r4lite_6.18.0-main.tar.gz
   250288   bpi-r4lite_emmc_bl2.img
   365572   bpi-r4lite_emmc_fip.bin
 888990647   bpi-r4lite_noble_6.18.0-main_sdmmc.img.gz

33 file(s), 1 dir(s)

BPI-R4L> run newboot
## Error: "initrd" not defined
EXT_CSD[179], PARTITION_CONFIG:
BOOT_ACK: 0x1
BOOT_PARTITION_ENABLE: 0x1 (boot0)
PARTITION_ACCESS: 0x0 (user)
emmc available
SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
NOR available
bootconf=#conf-base-r4lite#ov-lite-emmc#ov-lite-nor
fit=bpi-r4.itb
10045884 bytes read in 228 ms (42 MiB/s)
No UBIFS volume mounted!
## Loading kernel (any) from FIT Image at 46000000 ...
   Using 'conf-base-r4lite' configuration
   Trying 'kernel-1' kernel subimage
     Description:  Linux Kernel 6.17.0-main
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x460000e8
     Data Size:    9860553 Bytes = 9.4 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x44000000
     Entry Point:  0x44000000
     Hash algo:    sha1
     Hash value:   220d1ec5c6d8dad9b606cbcadc6ac700d1ae0300
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'conf-base-r4lite' configuration
   Trying 'fdt-base-lite' fdt subimage
     Description:  Flattened Device Tree blob BPI-R4 Lite
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x4698a440
     Data Size:    31042 Bytes = 30.3 KiB
     Architecture: AArch64
     Load Address: 0x47000000
     Hash algo:    sha1
     Hash value:   464f5c52fc7e8c532568afea9963cbe072ea6b9c
   Verifying Hash Integrity ... sha1+ OK
   Loading fdt from 0x4698a440 to 0x47000000
   Loading Device Tree to 00000000be7ed000, end 00000000be7f7fff ... OK
Working FDT set to be7ed000
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'ov-lite-emmc' configuration
   Trying 'fdt-ov-lite-emmc' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x469929ec
     Data Size:    878 Bytes = 878 Bytes
     Architecture: Unknown Architecture
   Verifying Hash Integrity ... OK
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'ov-lite-nor' configuration
   Trying 'fdt-ov-lite-nor' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x46993318
     Data Size:    919 Bytes = 919 Bytes
     Architecture: Unknown Architecture
   Verifying Hash Integrity ... OK
   Booting using the fdt blob at 0xbe7ed000
Working FDT set to be7ed000
   Uncompressing Kernel Image to 44000000
   Loading Device Tree to 00000000be7e2000, end 00000000be7eccce ... OK
Working FDT set to be7e2000

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 6.17.0-bpi-r4-main (ubuntu@c40702609f18) (aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #1 SMP Wed Oct 15 11:40:22 CST 2025
[    0.000000] Machine model: Bananapi BPI-R4-LITE

Once I do nothing and just let the system boots, it comes up correctly in 6.18-main:

Hit any key to stop autoboot: 0
33 bytes read in 0 ms


  *** U-Boot Boot Menu ***

      1. Enter kernel-name to boot from SD/EMMC.
      2. Boot kernel from TFTP.
      3. Boot from SD/EMMC.
      4. Boot kernel from NVME.
      5. Boot kernel from UBI.
      0. Exit


  Press UP/DOWN to move, ENTER to select, ESC to quit




## Error: "initrd" not defined
EXT_CSD[179], PARTITION_CONFIG:
BOOT_ACK: 0x1
BOOT_PARTITION_ENABLE: 0x1 (boot0)
PARTITION_ACCESS: 0x0 (user)
emmc available
SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
NOR available
bootconf=#conf-base-r4lite#ov-lite-emmc#ov-lite-nor
fit=bpi-r4.itb
10338416 bytes read in 767 ms (12.9 MiB/s)
No UBIFS volume mounted!
## Loading kernel (any) from FIT Image at 46000000 ...
   Using 'conf-base-r4lite' configuration
   Trying 'kernel-1' kernel subimage
     Description:  Linux Kernel 6.18.0-main
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x460000e8
     Data Size:    10154190 Bytes = 9.7 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x44000000
     Entry Point:  0x44000000
     Hash algo:    sha1
     Hash value:   642943a4b95a6819d7623913236aa512afe2f67d
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'conf-base-r4lite' configuration
   Trying 'fdt-base-lite' fdt subimage
     Description:  Flattened Device Tree blob BPI-R4 Lite
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x469d124c
     Data Size:    31002 Bytes = 30.3 KiB
     Architecture: AArch64
     Load Address: 0x47000000
     Hash algo:    sha1
     Hash value:   394f22549ac95838afcf11fe12630463893b3a13
   Verifying Hash Integrity ... sha1+ OK
   Loading fdt from 0x469d124c to 0x47000000
   Loading Device Tree to 00000000be7ed000, end 00000000be7f7fff ... OK
Working FDT set to be7ed000
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'ov-lite-emmc' configuration
   Trying 'fdt-ov-lite-emmc' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x469d97ec
     Data Size:    878 Bytes = 878 Bytes
     Architecture: Unknown Architecture
   Verifying Hash Integrity ... OK
## Loading fdt (any) from FIT Image at 46000000 ...
   Using 'ov-lite-nor' configuration
   Trying 'fdt-ov-lite-nor' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x469da118
     Data Size:    919 Bytes = 919 Bytes
     Architecture: Unknown Architecture
   Verifying Hash Integrity ... OK
   Booting using the fdt blob at 0xbe7ed000
Working FDT set to be7ed000
   Uncompressing Kernel Image to 44000000
   Loading Device Tree to 00000000be7e2000, end 00000000be7ecca6 ... OK
Working FDT set to be7e2000

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 6.18.0-bpi-r4-main (ubuntu@c40702609f18) (aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #1 SMP Fri Jan  2 16:17:22 CST 2026
[    0.000000] Machine model: Bananapi BPI-R4-LITE

Things are cleared.

Ah,i expected that you do nothing and just let it boot…

@frank-w

Do you know how to save variables in u-boot-env?

BPI-R4L> setenv abc 123
BPI-R4L> saveenv
Unknown command 'saveenv' - try 'help'
BPI-R4L> save
save - save file to a filesystem

Usage:
save <interface> <dev[:part]> <addr> <filename> bytes [pos]
    - Save binary file 'filename' to partition 'part' on device
      type 'interface' instance 'dev' from addr 'addr' in memory.
      'bytes' gives the size to save in bytes and is mandatory.
      'pos' gives the file byte position to start writing to.
      If 'pos' is 0 or omitted, the file is written from the start.
BPI-R4L> mmc part

Partition Map for mmc device 0  --   Partition Type: EFI

Part    Start LBA       End LBA         Name
        Attributes
        Type GUID
        Partition GUID
  1     0x00000022      0x00001fff      "bl2"
        attrs:  0x0000000000000004
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   a95a2d79-9396-4c29-99fd-bb8287a5933b
  2     0x00002000      0x000023ff      "u-boot-env"
        attrs:  0x8000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   072e8ae9-5886-438e-b01f-b0c2069c59ac
  3     0x00002400      0x000033ff      "factory"
        attrs:  0x8000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   2d4b5754-eb1c-4a63-88dc-bac607bd0747
  4     0x00003400      0x000043ff      "fip"
        attrs:  0x8000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   a03952c9-6242-43d9-b650-6cf7eee026e7
  5     0x00004400      0x000363ff      "boot"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   74cd60ec-4934-46c4-a15a-1200b90f976b
  6     0x00036400      0x00d1a400      "rootfs"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
                (linux)
        guid:   de35fe6a-d354-43de-b9a5-922cede44946
BPI-R4L>

Btw, my USB stick often not detectable in r4lite u-boot, but kernel.

BPI-R4L> run useusb
USB is stopped. Please issue 'usb start' first.
starting USB...
xhci-mtk xhci@11200000: hcd: 0x0000000011200000, ippc: 0x0000000011203e00
xhci-mtk xhci@11200000: ports disabled mask: u3p-0x1, u2p-0x0
xhci-mtk xhci@11200000: u2p:1, u3p:1
Starting the controller
USB XHCI 1.20
Bus xhci@11200000: 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
** Bad device specification usb 0 **
Couldn't find partition usb 0:1
BPI-R4L>
root@bpi-r4:~# fdisk -l | tail
Disk /dev/sda: 117.19 GiB, 125829120000 bytes, 245760000 sectors
Disk model: USB DISK 3.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x074409f4

Device     Boot  Start       End   Sectors  Size Id Type
/dev/sda1       292480 245759999 245467520  117G  c W95 FAT32 (LBA)
root@bpi-r4:~#

For uboot variables you can use uEnv.txt on BPI-BOOT partition. Have not configured saveenv yet (which could use a mmc or ubi partition which are prepared in layout).

At least for R4 variants there should be one existing to set the variant :slight_smile:

I see uEnv_r4.txt and I used to set the pre-build custom variables there. As I want to save something in runtime, do you have the exact command to do so or just wait for “saveenv” support?

on your card, not in source :slight_smile: not sure if i implement saveenv completely for all boards, as i find it more useful to set variables via textfile to modify externally (on card) or from linux. i know that there is fw_setenv binary for linux, but also this needs to be configured for the specific system and bootdevice (mmc/spi).

What is the command to save uEnv.txt on BPI-BOOT partition?

You have implemented “saveenv” for BPI-R4.

@frank-w

And do you know why the u-boot can’t detect the PCIe plug-in?

It has pcie node set to okay in u-boot DTS.

BPI-R4L> pci enum
BPI-R4L> pci 0
No such bus
BPI-R4L> pci 1
No such bus
BPI-R4L> pci 2
No such bus
BPI-R4L>

It is possible that command is enabled,but maybe with wrong config (used default from sdk or openwrt).

It is a textfile so either change it from host pc or linux,not way from inside uboot.

Afair i have not tested pcie on r4lite in uboot yet,only the mpcie for wifi in linux. Seems that mt7987 has only 2 pcie which are routed to mpcie slots. Second lane is routed over a pcie switch to either route to first mcpie or second slot…wonder where pcie connection is done for m.2 key-e (but i guess this is a leftover/alternate design as this is missing in block schematic and titled as reserved)

In uboot 2026-01-bpi, it has enabled CONFIG_CMD_SAVEENV and CONFIG_ENV_SUPPORT, built nvedit.o for “saveenv” but still not supported in reality.

Therefore as I said, no “saveenv” for r4lite so at this moment we can just edit the uEnv_r4.txt for pre-build variables. Not supporting runtime save.

Complicated. It would be nice if one day the r4lite uboot does support PCIe detection.