Builld Openwrt for Raspberrypi 4B

1.  Preparing the Environment

Prerequisites

  • A Linux environment (Ubuntu/Debian recommended).

  • Install required packages:

    sudo apt-get update
    sudo apt-get install git-core subversion mercurial build-essential libssl-dev libncurses5-dev unzip gawk zlib1g-dev python3-all
    

Target board information (Raspberry Pi 4B):

  • Processor: Broadcom BCM2711, quad-core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5 GHz. 
  • Memory:  4GB LPDDR4 RAM (depending on model). 
  • Connectivity: Dual-band Wi-Fi (2.4 GHz and 5.0 GHz), Bluetooth 5.0, Gigabit Ethernet, two USB 3.0 ports, and two USB 2.0 ports.

 

2. Build OpenWrt for Raspberry Pi 4B

2.1 Clone OpenWrt Source

mkdir -p ~/workdir
cd ~/workdir
git clone https://github.com/openwrt/openwrt.git
cd openwrt

2.2 Update and Install Feeds

./scripts/feeds update -a
./scripts/feeds install -a

2.3 Configure Build

Run the menuconfig interface to select the target and packages:

make menuconfig
  • Target System: Broadcom BCM27xx

  • Subtarget: BCM2711 boards 64bit (for Raspberry Pi 4)

  • Target Profile: Raspberry Pi 4b

  • Target Images: squashfs > Block size 256

  • Kernel Modules: Enable USB support modules such as kmod-usb-hid, kmod-usb-net, kmod-usb-net-asix, kmod-usb-net-asix-ax88179, kmod-usb2, kmod-usb3

  • Libraries: libssh, libssh2

  • LuCI Web Interface:  LuCi > Collections > Include luci and luci-ssl-openssl collections

2.4 Build Firmware

make V=s -j$(nproc)

2.5 Output build

bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz

% ls -la  bin/targets/bcm27xx/bcm2711/*
-rw-r--r-- 1 neo neo     1832 May 20 22:11 bin/targets/bcm27xx/bcm2711/config.buildinfo
-rw-r--r-- 1 neo neo      487 May 20 22:11 bin/targets/bcm27xx/bcm2711/feeds.buildinfo
-rw-r--r-- 1 neo neo 19512216 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz
-rw-r--r-- 1 neo neo 19512531 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-sysupgrade.img.gz
-rw-r--r-- 1 neo neo     5257 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4.manifest
-rw-r--r-- 1 neo neo 17347634 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-squashfs-factory.img.gz
-rw-r--r-- 1 neo neo 17347949 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-squashfs-sysupgrade.img.gz
-rw-r--r-- 1 neo neo     2290 May 20 22:22 bin/targets/bcm27xx/bcm2711/profiles.json
-rw-r--r-- 1 neo neo      912 May 20 22:22 bin/targets/bcm27xx/bcm2711/sha256sums
-rw-r--r-- 1 neo neo       18 May 20 22:11 bin/targets/bcm27xx/bcm2711/version.buildinfo

bin/targets/bcm27xx/bcm2711/packages:
total 2000
drwxr-xr-x 3 neo neo   4096 May 20 22:22 .
drwxr-xr-x 3 neo neo   4096 May 20 22:22 ..
-rw-r--r-- 1 neo neo  56021 May 20 22:20 base-files-1658~75c69935fd.apk
-rw-r--r-- 1 neo neo    662 May 20 22:14 bcm27xx-gpu-fw-2025.03.05-r1.apk
-rw-r--r-- 1 neo neo 135156 May 20 22:17 bcm27xx-utils-2025.03.14-r1.apk
-rw-r--r-- 1 neo neo 113092 May 20 22:15 dropbear-2024.86-r1.apk
-rw-r--r-- 1 neo neo  22481 May 20 22:19 fstools-2024.12.02~49d36ba2-r1.apk
-rw-r--r-- 1 neo neo   4972 May 20 22:13 fwtool-2019.11.12~8f7fe925-r1.apk
-rw-r--r-- 1 neo neo   2195 May 20 22:22 index.json
-rw-r--r-- 1 neo neo   4054 May 20 22:16 kernel-6.6.90~549f4d64e37137713dc7b14c05ada9a0-r1.apk
-rw-r--r-- 1 neo neo 148962 May 20 22:21 kmod-brcmfmac-6.6.90.6.12.6-r1.apk
-rw-r--r-- 1 neo neo   5140 May 20 22:21 kmod-brcmutil-6.6.90.6.12.6-r1.apk
-rw-r--r-- 1 neo neo 183886 May 20 22:21 kmod-cfg80211-6.6.90.6.12.6-r1.apk
-rw-r--r-- 1 neo neo    904 May 20 22:16 kmod-crypto-crc32c-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    871 May 20 22:16 kmod-crypto-hash-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    903 May 20 22:16 kmod-fixed-phy-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  46794 May 20 22:16 kmod-fs-vfat-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  54474 May 20 22:16 kmod-hid-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   2032 May 20 22:16 kmod-hid-generic-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   8069 May 20 22:16 kmod-hwmon-core-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    720 May 20 22:16 kmod-input-core-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  10882 May 20 22:16 kmod-input-evdev-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   2059 May 20 22:16 kmod-lib-crc32c-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   2839 May 20 22:16 kmod-lib-crc-ccitt-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    866 May 20 22:16 kmod-libphy-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    833 May 20 22:16 kmod-mdio-devres-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    856 May 20 22:16 kmod-mii-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    888 May 20 22:16 kmod-mmc-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    845 May 20 22:16 kmod-net-selftests-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    726 May 20 22:16 kmod-nf-conntrack6-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  53164 May 20 22:16 kmod-nf-conntrack-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  16349 May 20 22:16 kmod-nf-flow-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    717 May 20 22:16 kmod-nf-log6-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   8607 May 20 22:16 kmod-nf-log-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  15746 May 20 22:16 kmod-nf-nat-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   5899 May 20 22:16 kmod-nfnetlink-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   4616 May 20 22:16 kmod-nf-reject6-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   4165 May 20 22:16 kmod-nf-reject-6.6.90-r1.apk
-rw-r--r-- 1 neo neo 129474 May 20 22:16 kmod-nft-core-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   7019 May 20 22:16 kmod-nft-fib-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   5418 May 20 22:16 kmod-nft-nat-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   5661 May 20 22:16 kmod-nft-offload-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    723 May 20 22:16 kmod-nls-base-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   2951 May 20 22:16 kmod-nls-cp437-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   2629 May 20 22:16 kmod-nls-iso8859-1-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   1924 May 20 22:16 kmod-nls-utf8-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   2212 May 20 22:16 kmod-phy-ax88796b-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  18143 May 20 22:16 kmod-phylink-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   3689 May 20 22:16 kmod-phy-microchip-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   8687 May 20 22:16 kmod-phy-realtek-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  29175 May 20 22:16 kmod-ppp-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   8968 May 20 22:16 kmod-pppoe-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   2803 May 20 22:16 kmod-pppox-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  38940 May 20 22:16 kmod-r8169-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   4440 May 20 22:16 kmod-slhc-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   9066 May 20 22:16 kmod-sound-arm-bcm2835-6.6.90-r1.apk
-rw-r--r-- 1 neo neo 171687 May 20 22:16 kmod-sound-core-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   9969 May 20 22:16 kmod-usb2-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    750 May 20 22:16 kmod-usb3-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    905 May 20 22:16 kmod-usb-core-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  30055 May 20 22:16 kmod-usb-ehci-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  17646 May 20 22:16 kmod-usb-hid-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  14949 May 20 22:16 kmod-usb-net-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  14400 May 20 22:16 kmod-usb-net-asix-6.6.90-r1.apk
-rw-r--r-- 1 neo neo   9608 May 20 22:16 kmod-usb-net-asix-ax88179-6.6.90-r1.apk
-rw-r--r-- 1 neo neo  23678 May 20 22:16 kmod-usb-net-lan78xx-6.6.90-r1.apk
-rw-r--r-- 1 neo neo    958 May 20 22:16 kmod-usb-xhci-hcd-6.6.90-r1.apk
-rw-r--r-- 1 neo neo 301270 May 20 22:12 libc-1.2.5-r4.apk
-rw-r--r-- 1 neo neo  50800 May 20 22:12 libgcc1-14.2.0-r4.apk
-rw-r--r-- 1 neo neo    718 May 20 22:12 libpthread-1.2.5-r4.apk
-rw-r--r-- 1 neo neo    738 May 20 22:12 librt-1.2.5-r4.apk
-rw-r--r-- 1 neo neo  11311 May 20 22:17 mtd-26.apk
-rw-r--r-- 1 neo neo   9122 May 20 22:22 packages.adb
drwxr-xr-x 2 neo neo   4096 May 20 22:12 tmp

-> % ls -la bin/targets/bcm27xx/bcm2711/*img*
-rw-r--r-- 1 neo neo 19512216 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz
-rw-r--r-- 1 neo neo 19512531 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-sysupgrade.img.gz
-rw-r--r-- 1 neo neo 17347634 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-squashfs-factory.img.gz
-rw-r--r-- 1 neo neo 17347949 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-squashfs-sysupgrade.img.gz

3. Flash image

3.1 Flashing Factory Image to SD Card

  • Use the factory image (*-factory.img.gz) to flash a fresh OpenWrt system onto a microSD card for Raspberry Pi 4B.

Example using dd on Linux (after decompressing openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz):

-> % gzip -d bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz
-> % ls -la  bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img                                  
-rw-r--r-- 1 neo neo 184549376 May 20 22:22 bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img

-> % lsblk
...
sdb      8:16   1   29.7G  0 disk 
|-sdb1   8:17   1    256M  0 part /media/neo/boot
`-sdb2   8:18   1   29.5G  0 part /media/neo/rootfs

-> % sudo umount /dev/sdb1
-> % sudo umount /dev/sdb2

-> % lsblk ...
sdb 8:16 1 29.7G 0 disk 
|-sdb1 8:17 1 64M 0 part 
`-sdb2 8:18 1 104M 0 part 

# Replace /dev/sdb with your SD card device.
-> % sudo dd if=bin/targets/bcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img of=/dev/sdb bs=4M status=progress conv=fsync
[sudo] password for neo: 
44+0 records in
44+0 records out
184549376 bytes (185 MB, 176 MiB) copied, 27.2488 s, 6.8 MB/s

# After dd completes, sync to ensure all data is written: -> % sync # Then safely eject the SD card: -> % sudo eject /dev/sdb

 

3.2 Upgrading Existing OpenWrt

  • Use the sysupgrade image (*-sysupgrade.img.gz) for upgrading an existing OpenWrt installation on the device.

  • Upload it via the OpenWrt web interface or use sysupgrade command line.

    scp openwrt-*-sysupgrade.img.gz root@192.168.1.1:/tmp/ 
    sysupgrade -v /tmp/openwrt-*-sysupgrade.img.gz

     

3.3 Installing Additional Packages

  • The .apk files in bin/targets/bcm27xx/bcm2711/packages/ can be installed manually using opkg if you transfer them to the device.

  • Example:

    scp bcm27xx-utils-2025.03.14-r1.apk root@openwrt:/tmp/
    ssh root@openwrt
    opkg install /tmp/bcm27xx-utils-2025.03.14-r1.apk
    

     

4. Check openwrt after flashing

 Insert SD Card into Device and Boot

  • Insert the SD card into your Raspberry Pi 4B.

  • Power on the device.

  • Connect via Ethernet or serial console.

Console log:

BusyBox v1.37.0 (2025-05-18 14:18:42 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r29665-75c69935fd
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------

 OpenWrt recently switched to the "apk" package manager!

 OPKG Command           APK Equivalent      Description
 ------------------------------------------------------------------
 opkg install <pkg>     apk add <pkg>       Install a package
 opkg remove <pkg>      apk del <pkg>       Remove a package
 opkg upgrade           apk upgrade         Upgrade all packages
 opkg files <pkg>       apk info -L <pkg>   List package contents
 opkg list-installed    apk info            List installed packages
 opkg update            apk update          Update package lists
 opkg search <pkg>      apk search <pkg>    Search for packages
 ------------------------------------------------------------------

For more https://openwrt.org/docs/guide-user/additional-software/opkg-to-apk-cheatsheet

root@OpenWrt:~#
root@OpenWrt:~# uname -a
Linux OpenWrt 6.6.90 #0 SMP Sun May 18 14:18:42 2025 aarch64 GNU/Linux
root@OpenWrt:~# cat /etc/openwrt_release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='SNAPSHOT'
DISTRIB_REVISION='r29665-75c69935fd'
DISTRIB_TARGET='bcm27xx/bcm2711'
DISTRIB_ARCH='aarch64_cortex-a72'
DISTRIB_DESCRIPTION='OpenWrt SNAPSHOT r29665-75c69935fd'
DISTRIB_TAINTS='no-all'
root@OpenWrt:~# uptime
 14:20:27 up 1 min,  load average: 0.01, 0.00, 0.00
root@OpenWrt:~# cat /proc/cpuinfo
processor       : 0
BogoMIPS        : 108.00
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd08
CPU revision    : 3

processor       : 1
BogoMIPS        : 108.00
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd08
CPU revision    : 3

processor       : 2
BogoMIPS        : 108.00
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd08
CPU revision    : 3

processor       : 3
BogoMIPS        : 108.00
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd08
CPU revision    : 3

Revision        : c03114
Serial          : 100000004612ecb5
Model           : Raspberry Pi 4 Model B Rev 1.4
root@OpenWrt:~# free -h
              total        used        free      shared  buff/cache   available
Mem:        3891752       46076     3819220         160       26456     3796092
Swap:             0           0           0
root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                98.3M     30.7M     65.6M  32% /
tmpfs                     1.9G    160.0K      1.9G   0% /tmp
/dev/mmcblk0p1           63.9M     19.5M     44.3M  31% /boot
tmpfs                   512.0K         0    512.0K   0% /dev
root@OpenWrt:~# ifconfig
br-lan    Link encap:Ethernet  HWaddr E4:5F:01:31:A6:3D
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fdd3:b06c:e8ef::1/60 Scope:Global
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr E4:5F:01:31:A6:3D
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:19968 (19.5 KiB)  TX bytes:19968 (19.5 KiB)

root@OpenWrt:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br-lan
root@OpenWrt:~# 

 

WebUI:

 

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments