Script Features
- Download and install necessary dependencies for compiling OpenWrt.
- Download OpenWrt 18.06.4 tar.gz from the OpenWrt Releases page. This can be changed by editing the script.
- Download and install OpenWrt Feeds.
- Minify CSS, JS, and Lua files from the OpenWrt Feeds.
View the script here.
Instructions to Compile Firmware
1. Download and execute script
Note:This script follows the Quick Image Building Guide. Refer to this guide to understand how this script works.
- Download script
wget -qO optimize-openwrt.sh https://gist.githubusercontent.com/sanchezpe/0d58591d128b31b7050e28b376f21981/raw
-
Optional: Edit the script to download a different OpenWRT release. For example, change line 15 in the script from:
wget -qO openwrt.tar.gz https://github.com/openwrt/openwrt/archive/v18.06.4.tar.gz
to:
wget -qO openwrt.tar.gz https://github.com/openwrt/openwrt/archive/v17.01.7.tar.gz
-
Run script
chmod +x optimize-openwrt.sh
./optimize-openwrt.sh
-
Wait for a few minutes until the script finishes the execution.
-
Go to the directory where OpenWrt tar.gz was extracted.
cd openwrt
2. Free space
Note: Refer to the Saving firmware space guide for more information.
- Open the
make menuconfig
window.
make menuconfig
- Free space by changing the following settings in the
make menuconfig
window:
Target System
(X) Atheros AR7xxx/AR9xxx
Subtarget (Generic)
(X) Devices with small flash
Target Profile (Default Profile (all drivers))
(X) Multiple devices
Target Devices
[*]{Select your router}
Target Images
[*] squashfs (NEW)
(256) Block size (in KiB)
1024
Kernel modules
Wireless Drivers
kmod-mac80211
[ ] Export mac80211 internals in DebugFS
[ ] Enable 802.11s mesh support
USB Support
[ ]{Disable all options}
Global build settings
Kernel build options
[ ] Enable support for printk
[ ] Crash logging
[ ] Compile the kernel with debug filesystem enabled
[ ] Support for paging of anonymous memory (swap)
[ ] Compile the kernel with symbol table information
[ ] Compile the kernel with debug information
[ ] Compile the kernel with SysRq support
[ ] Enable process core dump support
[ ] Enable printk timestamps
[ ] Enable IPv6 support in packages *OPTIONAL
[*] Strip unnecessary exports from the kernel image
[*] Strip unnecessary functions from libraries
3. Add Packages
- Add desired packages. For example, to add LuCI, Adblock, DDNS, OpenVPN, QoS, UPnP, Wake-on-LAN packages for LuCI, mbed TLS and mbed TLS for OpenVPN, change the following settings in the
make menuconfig
window:
LuCI
1. Collections
<*> luci
2. Modules
[*] Minify Lua sources
3. Applications
<*> luci-app-adblock
<*> luci-app-ddns
<*> luci-app-openvpn
<*> luci-app-qos OR <*> luci-app-sqm
<*> luci-app-upnp
<*> luci-app-wol
Libraries
<*> libustream-mbedtls
Network
VPN
<*> openvpn-mbedtls
Note: Keep in mind that routers with 4MB flash will not be able to store many packages. Refer to OpenWrt Packages Table for more information about packages size.
- Save your changes and exit.
3. Optimize kernel configuration
- Open the
make kernel_menuconfig
window.
make kernel_menuconfig CONFIG_TARGET=ar71xx
-
Wait for a few minutes until the kernel compiles and the
make kernel_menuconfig
window appears. -
Change the following settings in the
make kernel_menuconfig
window:
Machine selection
Atheros AR71XX/AR724X/AR913X machine selection
[*]{Select your router, if available}
Device Drivers
Character devices
Serial drivers
< > 8250/16550 and compatible serial support
[ ] USB support
File systems
Miscellaneous filesystems
[*] Additional option for memory-constrained systems
(3) Number of fragments cached
1
Kernel hacking
[ ] Early printk
- Save changes and exit.
4. Compile firmware
- Compile firmware using
make
.
make -i -j1 V=s 2>&1 | tee build.log | grep -i error
-
Wait until compilation finishes. This could take a long time.
-
Navigate to the directory that contains the compiled firmware images
cd /bin/targets/ar71xx/