openwrt/target/linux/ipq40xx/image/mikrotik.mk

101 lines
2.9 KiB
Makefile
Raw Normal View History

define Device/mikrotik_nor
DEVICE_VENDOR := MikroTik
BLOCKSIZE := 64k
IMAGE_SIZE := 16128k
KERNEL_NAME := vmlinux
KERNEL := kernel-bin | append-dtb-elf
IMAGES = sysupgrade.bin
mikrotik: switch to Yafut for building MikroTik NOR images The Yafut tool now has limited capabilities for working on filesystem images stored in regular files. This enables preparing Yaffs2 images for devices with NOR flash using upstream Yaffs2 filesystem code instead of the custom kernel2minor tool. Since minimizing the size of the resulting filesystem image size is important and upstream Yaffs2 code requires two allocator reserve blocks to be available when writing a file to the filesystem, a trick is employed while preparing an OpenWRT image: the blank filesystem image that Yafut operates on initially contains two extra erase blocks that are chopped off after the kernel file is written. This is safe to do because Yaffs2 has a true log structure and therefore only ever writes sequentially (and the size of the kernel file is known beforehand). While the two extra erase blocks are necessary for writes, Yaffs2 code seems to be perfectly capable of reading back files from a "truncated" filesystem that does not contain these extra erase blocks. In terms of image size, this new approach is only marginally worse than the current kernel2minor-based one: specifically, upstream Yaffs2 code needs to write three object headers (each of which takes up an entire data chunk) when the kernel file is written to the filesystem: - an object header for the kernel file when it is created, - an object header for the root directory when the kernel file is created, - an updated object header for the kernel file when the latter is fully written (so that its new size can be recorded). kernel2minor only writes two of these headers, which is the absolute minimum required for reading the file back. This means that the Yafut-based approach causes firmware images to be at most one erase block (64 kB) larger than those created using kernel2minor, but only in the very unfortunate scenario where the size of the kernel file is really close to a multiple of the erase block size. The rest of the calculations performed when the empty filesystem image is first prepared stems from the Yaffs2 layout used by MikroTik NOR devices: each 65,536-byte erase block contains 63 chunks, each of which consists of 1024 bytes of data followed by 16-byte Yaffs tags without ECC data; each such group of 63 chunks is then followed by 16 bytes of padding, which translates to "-C 1040 -B 64k -E" in the Yafut invocation. Yaffs2 checkpoints and summaries are disabled (using Yafut's -P and -S switches, respectively) as they are merely performance optimizations that require extra storage space. The -L and -M switches are used to force little-endian or big-endian byte order (respectively) in the resulting filesystem image, no matter what byte order the build host uses. The tr invocation is used to ensure that the filesystem image is initialized with 0xFF bytes (which are an indicator of unused space for Yaffs2 code). Signed-off-by: Michał Kępień <openwrt@kempniu.pl> Link: https://github.com/openwrt/openwrt/pull/13453 Signed-off-by: Robert Marko <robimarko@gmail.com>
2024-05-13 17:26:15 +00:00
IMAGE/sysupgrade.bin := append-kernel | yaffs-filesystem -L | \
pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
check-size | append-metadata
endef
define Device/mikrotik_nand
DEVICE_VENDOR := MikroTik
KERNEL_NAME := vmlinux
KERNEL_INITRAMFS := kernel-bin | append-dtb-elf
KERNEL := kernel-bin | append-dtb-elf | package-kernel-ubifs | \
ubinize-kernel
IMAGES := sysupgrade.bin
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
endef
define Device/mikrotik_cap-ac
$(call Device/mikrotik_nor)
DEVICE_MODEL := cAP ac
SOC := qcom-ipq4018
DEVICE_PACKAGES := -kmod-ath10k-ct kmod-ath10k-ct-smallbuffers
endef
TARGET_DEVICES += mikrotik_cap-ac
define Device/mikrotik_hap-ac2
$(call Device/mikrotik_nor)
DEVICE_MODEL := hAP ac2
SOC := qcom-ipq4018
DEVICE_PACKAGES := -kmod-ath10k-ct kmod-ath10k-ct-smallbuffers
endef
TARGET_DEVICES += mikrotik_hap-ac2
define Device/mikrotik_hap-ac3
$(call Device/mikrotik_nand)
DEVICE_MODEL := hAP ac3
SOC := qcom-ipq4019
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL_UBIFS_OPTS = -m $$(PAGESIZE) -e 124KiB -c $$(PAGESIZE) -x none
DEVICE_PACKAGES := kmod-ledtrig-gpio
endef
TARGET_DEVICES += mikrotik_hap-ac3
define Device/mikrotik_hap-ac3-lte6-kit
$(call Device/mikrotik_nor)
DEVICE_MODEL := hAP ac3 LTE6 kit
SOC := qcom-ipq4019
DEVICE_PACKAGES := kmod-ledtrig-gpio kmod-usb-acm kmod-usb-net-rndis
endef
TARGET_DEVICES += mikrotik_hap-ac3-lte6-kit
define Device/mikrotik_lhgg-60ad
$(call Device/mikrotik_nor)
DEVICE_MODEL := Wireless Wire Dish LHGG-60ad
DEVICE_DTS := qcom-ipq4019-lhgg-60ad
DEVICE_PACKAGES += -kmod-ath10k-ct -ath10k-firmware-qca4019-ct kmod-wil6210
endef
TARGET_DEVICES += mikrotik_lhgg-60ad
define Device/mikrotik_sxtsq-5-ac
$(call Device/mikrotik_nor)
DEVICE_MODEL := SXTsq 5 ac (RBSXTsqG-5acD)
SOC := qcom-ipq4018
DEVICE_PACKAGES := rssileds
endef
TARGET_DEVICES += mikrotik_sxtsq-5-ac
ipq40xx: add MikroTik wAP ac (RBwAPG-5HacD2HnD) support The MikroTik wAP ac (RBwAPG-5HacD2HnD) is a dual-band dual-radio 802.11ac wireless access point with integrated antenna and two Ethernet ports in a weatherproof enclosure. See https://mikrotik.com/product/wap_ac for more information. Important: this is the new ipq40xx-based wAP ac, not the older ath79-based wAP ac (RBwAPG-5HacT2HnD), already supported in OpenWrt. Specifications: - SoC: Qualcomm Atheros IPQ4018 - CPU: 4x ARM Cortex A7 - RAM: 128MB - Storage: 16MB NOR flash - Wireless - 2.4GHz: Built-in IPQ4018 (SoC) 802.11b/g/n 2x2:2, 2.5 dBi antennae - 5GHz: Built-in IPQ4018 (SoC) 802.11a/n/ac 2x2:2, 2.5 dBi antennae - Ethernet: Built-in IPQ4018 (SoC, QCA8075), 2x 1000/100/10Mb/s ports, one with 802.3af/at PoE in Installation: Boot the initramfs image via TFTP, then flash the sysupgrade image using sysupgrade. Details at https://openwrt.org/toh/mikrotik/common. Notes: This preserves the MAC addresses of the physical Ethernet ports: - eth0 corresponds to the physical port labeled ETH1 and has the base MAC address. This port can be used to power the device. - eth1 corresponds to the physical port labeled ETH2 and has a MAC address one greater than the base. MAC addresses are set from /lib/preinit/05_set_iface_mac_ipq40xx.sh rather than /etc/board.d/02_network so that they are in effect for preinit. This should likely be done for other MikroTik devices and possibly other non-MikroTik devices as well. As this device has 2 physical ports, they are each connected to their respective PHYs, allowing the link status to be visible to software. Since they are not marked on the case with any role (such as LAN or WAN), both are bridged to the lan network by default, although this can easily be changed if needed. Signed-off-by: Mark Mentovai <mark@mentovai.com>
2021-10-04 14:48:29 +00:00
define Device/mikrotik_wap-ac
$(call Device/mikrotik_nor)
DEVICE_MODEL := wAP ac
SOC := qcom-ipq4018
DEVICE_PACKAGES := -kmod-ath10k-ct kmod-ath10k-ct-smallbuffers
endef
TARGET_DEVICES += mikrotik_wap-ac
define Device/mikrotik_wap-r-ac
$(call Device/mikrotik_wap-ac)
DEVICE_MODEL := wAP R ac
DEVICE_PACKAGES := kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi \
kmod-usb-acm kmod-usb-net-rndis
DEVICE_DTS := qcom-ipq4018-wap-r-ac
endef
TARGET_DEVICES += mikrotik_wap-r-ac
define Device/mikrotik_wap-ac-lte
$(call Device/mikrotik_wap-ac)
DEVICE_MODEL := wAP ac LTE
DEVICE_PACKAGES := kmod-usb-net-qmi-wwan kmod-usb-serial-option uqmi \
kmod-usb-acm kmod-usb-net-rndis
DEVICE_DTS := qcom-ipq4018-wap-ac-lte
DEVICE_ALT0_VENDOR = Mikrotik
DEVICE_ALT0_MODEL := wAP ac LTE6
endef
TARGET_DEVICES += mikrotik_wap-ac-lte