OpenWRT 24.10.x with MESHdesk packages

  • The minimum hardware requirements are:
    • 16M Flash
    • 64M RAM
  • Although the system can potentially support hardware with fewer resources, support is no longer practical in 2024.
  • The hardware does not need to be equipped with a radio.
  • Hardware without radios can be managed with APdesk.
  • Mediatek and Atheros / Qualcomm SOC devices are supported.
  • Other target systems are also supported, but have not yet been thoroughly tested.
  • If you are not sure if your hardware works, please visit the OpenWrt website and check it. The list of supported hardware is constantly expanding.
  • Next, let us look at the steps you need to take to compile OpenWrt with the included MESHdesk package.
  • To introduce a new device we will:
    1. We create an initial firmware image for development that contains all the required packages and files, but with centralized management disabled.
    2. Then we flash a device with this image and make the device-specific adjustments so that the device works as expected with central management.
    3. We can then use these optimized files to create a production image for the device that contains the device-specific files.
  • This approach allows us to:
    • Minimize the risk of bricking the device (a factory reset resets the device to a normal running OpenWrt)
    • Allow fine tuning of the device without having to create and flash a new firmware image every time we make a change.

These steps are performed ONLY ONCE when you introduce new hardware.

  1. Build OpenWRT with the MESHdesk package (MESHdesk disabled).
  2. Flash your device.
  3. Prepare the wan_network file for this specific device.
  4. Prepare the meshdesk config file for this specific device.
  5. Prepare the captive_config.json file for this specific device.

This is a one-time process. Once you have customized the files, you can skip this step in the future and simply use the device-specific files if you need to create new firmware for the same hardware.


  1. Create OpenWRT firmware with the MESHdesk package, which contains the device-specific files for
    1. wan_network
    2. captive_config.json
    3. meshdesk
  2. Flash your device with the production firmware.
  • So without further ado, let us start with the first development firmware.
  • We will take a Xiaomi 4A 100M access point as an example device.
  • You can use the hardware of your choice and simply apply the same principles.
  • Most of the packages you can include when building OpenWrt firmware are either part of the SDK or can be included via the package feeds, which are also part of the SDK.
  • You can also include packages that are not part of the SDK or the feeds.
  • The MESHdesk package is one such package.
  • The MESHdesk package is hosted on Github as part of a git repository.
  • This git repository also contains the other elements that we will use in the development of our firmware (the Luci application and some additional files)
  • Check out the openwrt-meshdesk package from the Github repository.
#Do this in the working directory e.g. cd 24.10.1 (on the same level as the openwrt directory)
git clone https://github.com/RADIUSdesk/openwrt-meshdesk.git openwrt-meshdesk
  • The repository consists of three main components. Each of them is located in its own folder.
    1. MESHdesk - This is the MESHdesk package that will be included in the SDK.
    2. files - This is the overwrite structure that contains files to be overwritten during the build process.
    3. luci-app-meshdesk - This is the Luci application that allows you to enable or disable centralized control of the device.
  • The MESHdesk folder must be copied under the package folder (openwrt/package).
#cd to the working directory
cp -R ./openwrt-meshdesk/MESHdesk ./openwrt/package 
  • The files folder needs to sit directly under the openwrt folder (root level).
#cd to the working directory
cp -R ./openwrt-meshdesk/files ./openwrt
  • The luci-app-meshdesk folder needs to be copied under the feeds/luci/applications folder.
#cd to the working directory
cp -R ./openwrt-meshdesk/luci-app-meshdesk ./openwrt/feeds/luci/applications
  • Since we added a Luci application, we need to tell the SDK about it.
  • After copying the packages, enter the following command:
#cd to the working directory
cd ./openwrt
scripts/feeds update -i
#Install the package to make it visible 
scripts/feeds install luci-app-meshdesk
  • The result is that the Luci application MESHdesk is listed as one of the available Luci applications.

  • The OpenWrt SDK has a cursors interface (similar to Midnight Commander for the old school readers 8-O)
  • To start this cursors interface, you have to change from the working directory to the openwrt directory.
  • Then issue the following:
#cd to the working directory
cd openwrt
make menuconfig
  • Here you select the hardware architecture of the device for which you want to create the firmware and its model.
  • Also select the following packages when creating the firmware.
  • When you select a package, you have the option of building it as a module (M) or including it completely (*).
  • Make sure you select the (*) option to fully include the package.
  • The package names in bold are required.
  • The Mosquitto packages are for MQTT support.
  • The Batman packages are for Mesh support.

Package selection

Location Package Comment
Base system MESHdesk
Base system sqm-scripts
Kernel Modules → Netfilter Extensions kmod-nft-bridge Include if you want to block or speed limit users
Kernel Modules → Network Devices kmod-dummy Include for internal VLAN (Dynamic RADIUS based VLANs on AP)
Kernel Modules → Network Support kmod-batman-adv Keep the default options
Languages → Lua lua-mosquitto
Languages → Lua libiwinfo-lua
Languages → Lua luasocket
Libraries libuci-lua
Luci → Collections luci
Luci → Modules luci-compat Needs this modules for our package VERY IMPORTANT
Luci → Applications luci-app-meshdesk Luci App to enable and disable central management
Luci → Applications luci-app-sqm
Luci → Themes luci-theme-material Modern theme that is easy to customize
Luci → Libraries luci-lib-httpclient
Luci → Libraries luci-lib-httpprotoutils
Luci → Libraries luci-lib-json
Luci → Libraries luci-lib-jsonc
Network → Captive Portals coova-chilli Select OpenSSL as SSL Library. Also select Enable the JSON interface.. and ..Coova miniportal…
Network → File Transfer curl
Network → Firewall iptables-nft Very important for backward compatibly of iptables
Network → Routing and Redirection relayd
Network → WirelessAPD wpad IEEE 802.1x Auth/Supplicant (built-in full) Un-select wpad-basic also required for Hotspot 2.0
Network batctl-full Un-select batctl-default
Network mosquitto-client-ssl Note the CLIENT package
Network iw-full Required for Hotspot 2.0

Advanced Package selection

Location Package Comment
Kernel modules → USB Support kmod-usb-net-cdc-mbim
Kernel modules → USB Support kmod-usb-net-qmi-wwan
Kernel modules → USB Support kmod-usb-serial-option optional - for AT commands
Kernel modules → USB Support kmod-usb-serial-qualcomm
Kernel modules → USB Support kmod-usb-serial-sierrawireless
Kernel modules → USB Support kmod-usb-wdm
Network → WWAN uqmi
Utilities usb-modeswitch Used with LTE USB dongles
Utilities → Terminal minicom
  • Once you have selected these packages, you can save the configuration and run make to create the firmware.
  • The finished firmware can then be found in the openwrt/bin/target/<architecture> folder.
  • In our case we will use openwrt/bin/targets/ramips/mt76x8/openwrt-ramips-mt76x8-xiaomi_mi-router-4a-100m-squashfs-sysupgrade.bin
  • The firmware you have just created is then a standard OpenWrt and you can flash your hardware like a normal OpenWRT and then access it via 192.168.1.1.
    • Username and Password is root and admin for Luci and ssh.
  • The next section covers the files you need to be attend to for the specific hardware tweaks.
  • When you run the make command, you may see these warnings.
  • They are harmless and can be ignored.
WARNING: Makefile 'package/utils/busybox/Makefile' has a dependency on 'libpam', which does not exist
WARNING: Makefile 'package/utils/busybox/Makefile' has a dependency on 'libpam', which does not exist
WARNING: Makefile 'package/utils/busybox/Makefile' has a build dependency on 'libpam', which does not exist
WARNING: Makefile 'package/network/services/lldpd/Makefile' has a dependency on 'libnetsnmp', which does not exist
WARNING: Makefile 'package/utils/policycoreutils/Makefile' has a dependency on 'libpam', which does not exist
WARNING: Makefile 'package/utils/policycoreutils/Makefile' has a dependency on 'libpam', which does not exist
WARNING: Makefile 'package/utils/policycoreutils/Makefile' has a build dependency on 'libpam', which does not exist
make[2]: Entering directory '/home/system/Documents/fw_sdk/24.10.1/openwrt/scripts/config'
make[2]: 'conf' is up to date.
make[2]: Leaving directory '/home/system/Documents/fw_sdk/24.10.1/openwrt/scripts/config'
make[1] world
make[2] target/compile
make[3] -C target/linux compile

Use ssh to gain access to the device to modify these files.

  • Once the customizations are complete, we can test everything.
  • Log in to your device with Luci (http://192.168.1.1)
  • The following image shows how to point the device to the controller via the GUI.

  • Point the device at your controller and restart it.
  • If all goes well, it will be displayed under New Arrivals - Hardware.
  • If it is a new hardware type add it to the controller as described here: Hardware (Again Once Off)
  • If everything works as intended on the device, you can use these optimized files to build a final version of the firmware for the specific hardware.
  • Copy the files to a temporary folder on the machine where you are building the firmware.
  • Use the following table to find the location for the optimized files in the SDK.

Files

On Device On SDK
/etc/MESHdesk/configs/wan_network openwrt/files/etc/MESHdesk/configs/
/etc/config/meshdesk openwrt/files/etc/config
/etc/MESHdesk/configs/captive_config.json openwrt/files/etc/MESHdesk/configs/
/etc/MESHdesk/reporting/report_to_server.lua openwrt/files/etc/MESHdesk/reporting
  • This brings us to the end of the page that describes how to create MESHdesk firmware for specific hardware.
  • network/firmware/meshdesk.txt
  • Last modified: 2025/04/15 05:18
  • by system