OpenWrt support for Mikrotik KNOT IoT gateway

Hello,

We are interested in running OpenWRT on the Miktrotik KNOT gateway. I have a gateway on my desk but have not yet seen any OpenWRT release for it. I'm willing to add the device in trunk but before I started my efforts I wanted to make sure nobody else is already doing this. In any case I want to help :slight_smile:

Kind regards,
Daan

This might be using the very similar hw ? [wAP LR8 kit]
except without 3g and bluetooth and gpio pins

Initial support already done below
(https://mikrotik.com/product/wap_lr8_kit)

https://github.com/rogerpueyo/openwrt/tree/ath79-mikrotik-wapr-2nd

I don't have one of these, but am happy to help.
If you want some ideas to get started:

I think a RouterOS GPL dump that I requested in September has (new) rb924 sections which should make things a little easier
+static struct platform_device rb924_hb_led_device = {
+	.name	= "leds-rb",
+	.id	= -1,
+	.dev	= {
+		.platform_data = &(unsigned[]) {
+			PLED(ext_pin5, 0, GPIOLIB, PLED_CFG_INPUT),
+			PLED(power_led, 4, GPIOLIB, PLED_CFG_INV | PLED_CFG_ON),
+			PLDI(button, 16, GPIOLIB),
+			// keep lte in reset until usb drivers are loaded
+			PLED(lte_reset, 17, GPIOLIB, PLED_CFG_ON),
+
+			PLDI(eth_led, RB400_SSR_GPIO_BASE + 0, GPIOLIB),
+			PLDI(eth2_led, RB400_SSR_GPIO_BASE + 1, GPIOLIB),
+			PLDI(poe_led, RB400_SSR_GPIO_BASE + 2, GPIOLIB),
+			PLDI(gps_led, RB400_SSR_GPIO_BASE + 3, GPIOLIB),
+			PLDI(wlan_led, RB400_SSR_GPIO_BASE + 4, GPIOLIB),
+			PLED(pcie_power_off, RB400_SSR_GPIO_BASE + 5, GPIOLIB,
+				PLED_CFG_INV | PLED_CFG_KEEP),
+			PLED(uart_select, RB400_SSR_GPIO_BASE + 6, GPIOLIB,
+				PLED_CFG_ON),
+			0
+		},
+	},
+};
+
+static struct platform_device rb924r4_hb_led_device = {
+	.name	= "leds-rb",
+	.id	= -1,
+	.dev	= {
+		.platform_data = &(unsigned[]) {
+			PLED(ext_pin5, 0, GPIOLIB, PLED_CFG_INPUT),
+			PLED(power_led, 4, GPIOLIB, PLED_CFG_INV | PLED_CFG_ON),
+			PLD(usb_power_off, 13, GPIOLIB),
+			PLDI(button, 16, GPIOLIB),
+			// keep lte in reset until usb drivers are loaded
+			PLED(lte_reset, 17, GPIOLIB, PLED_CFG_ON),
+
+			PLDI(eth_led, RB400_SSR_GPIO_BASE + 0, GPIOLIB),
+			PLDI(eth2_led, RB400_SSR_GPIO_BASE + 1, GPIOLIB),
+			PLDI(poe_led, RB400_SSR_GPIO_BASE + 2, GPIOLIB),
+			PLDI(gps_led, RB400_SSR_GPIO_BASE + 3, GPIOLIB),
+			PLDI(wlan_led, RB400_SSR_GPIO_BASE + 4, GPIOLIB),
+			PLED(uart_select, RB400_SSR_GPIO_BASE + 6, GPIOLIB,
+				PLED_CFG_ON),
+			PLDI(pcie_power_off, RB400_SSR_GPIO_BASE + 7, GPIOLIB),
+			0
+		},
+	},
+};
+
+static struct spi_board_info rb924_ssr_spi_misc = {
+	.modalias = "rb400-spi-misc",
+	.max_speed_hz = 15000000,
+	.bus_num = 0,
+	.chip_select = 0,
+	.mode = SPI_MODE_3,
+	.platform_data = &(struct rb400_ssr_info) {
+		.strobe = 11,
+		.bytes = 1,
+		.val = 0x7f
+	},
+};
+static struct spi_board_info bt_spi_nRF52832 = {
+	.modalias = "spi-nRF52832",
+	.max_speed_hz = 8 * 1000 * 1000,
+	.bus_num = 0,
+	.chip_select = 2,
+	.mode = SPI_MODE_0,
+	.platform_data = &(struct nrf52_platform_data) {
+		.irq_gpio = 2,
+		.labels = {
+			HWMON_LBL_BOARD,
+			HWMON_LBL_SYSTEM,
+			HWMON_LBL_GPIO_EXT_PIN3,
+			HWMON_LBL_GPIO_EXT_PIN2,
+		},
+		.gpio = {
+			.pins = {
+				PLED(ext_pin4, 15, GPIOLIB, PLED_CFG_INV),
+				PLED(ext_pin6, 14, GPIOLIB, PLED_CFG_INV),
+			},
+			.names = {
+				"ext-pin4",
+				"ext-pin6",
+			},
+		},
+	},
+};
+static struct platform_device rb924_spi_device = {
+	.name	= "rb900-spi",
+	.id	= -1,
+	.dev	= {
+		.platform_data = &(struct spi_board_info *[]) {
+			&rb924_ssr_spi_misc,
+			&slow_large_spi_nor,
+			&bt_spi_nRF52832,
+			NULL
+		},
+	},
+};
+static struct platform_device rb924_uart_device = {
+	.name	= "rb924-at-uart",
+	.id	= -1,
+};
+
+
+static struct hwopt_device rb924_hb_devices[] = {
+	{ &rb700_ehci_device, HW_OPT_HAS_USB, 0 },
+	{ &ar9340_gpio_device, 0, 0 },
+	{ &rb924_spi_device, 0, 0 },
+	{ &rb924_uart_device, 0, 0 },
+	{ &rb924_hb_led_device, 0, HW_OPT_RB924_r4 },
+	{ &rb924r4_hb_led_device, HW_OPT_RB924_r4, 0 },
+	{ &ar9330_wlan_device, HW_OPT_HAS_WIFI, 0 },
+	{ &mAP2_poeout_device, 0, 0 },
+	{ &maphb_eth_device, 0, 0 }
+};
+
+static struct platform_device crs332_led_device = {
+	.name	= "leds-rb",
1 Like

Apart from getting actual OpenWRT support for the device, i have already listed some projects related to actually using the device on the previous post.

@dpape what functionality do you specifically require to get working in OpenWRT for this device ?

The maturity of LoRa use cases withing OpenWRT is not very high in my opinion at the moment
apart from connecting to the ThingsNetwork