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
andluci-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 inbin/targets/bcm27xx/bcm2711/packages/
can be installed manually usingopkg
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: