2021-08-20 20:11:32 +00:00
|
|
|
DEVICE_VARS += UBOOT_TARGET UBOOT_OFFSET UBOOT_IMAGE
|
2020-05-04 14:28:11 +00:00
|
|
|
|
2021-07-10 15:35:47 +00:00
|
|
|
# The bootrom of MT7623 expects legacy MediaTek headers present in
|
|
|
|
# exactly the location also used for the primary GPT partition table.
|
|
|
|
# (*MMC_BOOT and BRLYT)
|
|
|
|
# Hence only MSDOS/MBR partitioning can work here.
|
|
|
|
#
|
|
|
|
# ------------------------ Sector Offset
|
|
|
|
# | MBR + SDMMC_BOOT | 0 0x0
|
|
|
|
# |----------------------|
|
|
|
|
# | BRLYT header | 1 0x200
|
|
|
|
# |----------------------|
|
|
|
|
# . .
|
|
|
|
# . .
|
|
|
|
# |----------------------|
|
|
|
|
# | | 4 0x800
|
|
|
|
# | |
|
|
|
|
# | Preloader |
|
|
|
|
# . .
|
|
|
|
# . .
|
|
|
|
# | | 639
|
|
|
|
# |----------------------|
|
|
|
|
# | MBR partition #1 | 640 0x50000
|
|
|
|
# | |
|
|
|
|
# | U-Boot |
|
|
|
|
# . .
|
|
|
|
# . .
|
|
|
|
# | | 1663
|
|
|
|
# |----------------------|
|
|
|
|
# | MBR partition #2 |
|
|
|
|
# | |
|
|
|
|
# | Recovery |
|
|
|
|
# . .
|
|
|
|
# . (uImage.FIT) .
|
|
|
|
# | |
|
|
|
|
# |----------------------|
|
|
|
|
# | MBR partition #3 |
|
|
|
|
# | |
|
|
|
|
# | Production |
|
|
|
|
# | |
|
|
|
|
# | (uImage.FIT, |
|
|
|
|
# . rootfs_Data.) .
|
|
|
|
# . .
|
|
|
|
# | |
|
|
|
|
# ------------------------
|
|
|
|
#
|
|
|
|
# For eMMC boot, everything up to and including the preloader must be
|
|
|
|
# written to /dev/mmcblk0boot0, with the SDMMC_BOOT header changed to
|
|
|
|
# read EMMC_BOOT\0 instead.
|
|
|
|
#
|
|
|
|
# The contents of the main eMMC are identical to the SD card layout,
|
|
|
|
# with the preloader loading 512KiB of U-Boot starting at 0x50000.
|
2020-06-12 10:06:38 +00:00
|
|
|
|
2021-07-10 15:35:47 +00:00
|
|
|
define Build/mt7623-mbr
|
|
|
|
cp $@ $@.tmp 2>/dev/null || true
|
|
|
|
ptgen -o $@.tmp -h 4 -s 63 -a 0 -l 1024 \
|
2021-08-20 20:11:32 +00:00
|
|
|
-t 0x41 -N uboot -p 1M@$(UBOOT_OFFSET) \
|
2021-07-10 15:35:47 +00:00
|
|
|
-t 0xea -N recovery -p 40M@4M \
|
2022-01-31 00:45:10 +00:00
|
|
|
-t 0x2e -N production -p $(CONFIG_TARGET_ROOTFS_PARTSIZE)M@48M
|
2020-06-12 10:06:38 +00:00
|
|
|
|
2021-07-10 15:35:47 +00:00
|
|
|
echo -en \
|
|
|
|
$(if $(findstring sdmmc,$1),"SDMMC_BOOT\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00") \
|
|
|
|
$(if $(findstring emmc,$1),"EMMC_BOOT\x00\x00\x00\x01\x00\x00\x00\x00\x02\x00\x00") \
|
|
|
|
| dd bs=1 of="$@.tmp" seek=0 conv=notrunc
|
|
|
|
|
|
|
|
echo -en "BRLYT\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x00\x00\x08\x00\x00\x42\x42\x42\x42\x08\x00\x01\x00\x00\x08\x00\x00\x00\x08\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\
|
|
|
|
| dd bs=1 of="$@.tmp" seek=512 conv=notrunc
|
|
|
|
|
|
|
|
cat $@.tmp >> $@
|
|
|
|
rm $@.tmp
|
2020-06-12 10:06:38 +00:00
|
|
|
endef
|
|
|
|
|
2021-07-10 15:35:47 +00:00
|
|
|
define Build/append-preloader
|
|
|
|
cat $(STAGING_DIR_IMAGE)/$1-preloader.bin >> $@
|
2020-07-21 16:43:12 +00:00
|
|
|
endef
|
|
|
|
|
2021-07-10 15:35:47 +00:00
|
|
|
define Build/append-bootloader
|
2021-08-20 20:11:32 +00:00
|
|
|
cat $(STAGING_DIR_IMAGE)/$1-$(UBOOT_IMAGE) >> $@
|
|
|
|
endef
|
|
|
|
|
|
|
|
define Build/scatterfile
|
|
|
|
./gen_scatterfile.sh $(subst mt,MT,$(SUBTARGET)) "$1" \
|
|
|
|
$(subst -scatter.txt,,$(notdir $@)) "$(DEVICE_TITLE)" > $@
|
2020-07-21 16:43:12 +00:00
|
|
|
endef
|
|
|
|
|
2021-07-10 15:35:47 +00:00
|
|
|
define Device/bananapi_bpi-r2
|
|
|
|
DEVICE_VENDOR := Bananapi
|
|
|
|
DEVICE_MODEL := BPi-R2
|
2020-05-29 11:49:44 +00:00
|
|
|
DEVICE_DTS := mt7623n-bananapi-bpi-r2
|
2021-07-20 16:00:11 +00:00
|
|
|
DEVICE_PACKAGES := mkf2fs e2fsprogs kmod-usb3 kmod-ata-ahci
|
2020-07-21 18:07:47 +00:00
|
|
|
UBOOT_OFFSET := 320k
|
2020-06-12 10:06:38 +00:00
|
|
|
UBOOT_TARGET := mt7623n_bpir2
|
2021-08-20 20:11:32 +00:00
|
|
|
UBOOT_IMAGE := u-boot.bin
|
|
|
|
UBOOT_PATH := $(STAGING_DIR_IMAGE)/$$(UBOOT_TARGET)-$$(UBOOT_IMAGE)
|
2021-07-10 15:35:47 +00:00
|
|
|
IMAGES := sysupgrade.itb
|
|
|
|
KERNEL := kernel-bin | gzip
|
|
|
|
KERNEL_INITRAMFS_SUFFIX := -recovery.itb
|
|
|
|
KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb with-initrd
|
2023-06-15 14:11:27 +00:00
|
|
|
ifeq ($(DUMP),)
|
2023-05-26 09:26:49 +00:00
|
|
|
IMAGE_SIZE := $$(shell expr 48 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
|
2023-06-15 14:11:27 +00:00
|
|
|
endif
|
2021-07-10 15:35:47 +00:00
|
|
|
IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb external-static-with-rootfs | append-metadata
|
2021-08-20 20:11:32 +00:00
|
|
|
ARTIFACT/preloader.bin := mt7623-mbr emmc |\
|
|
|
|
pad-to 2k | append-preloader $$(UBOOT_TARGET)
|
2021-07-10 15:35:47 +00:00
|
|
|
ARTIFACT/u-boot.bin := append-uboot
|
|
|
|
ARTIFACT/sdcard.img.gz := mt7623-mbr sdmmc |\
|
|
|
|
pad-to 2k | append-preloader $$(UBOOT_TARGET) |\
|
2021-08-20 20:11:32 +00:00
|
|
|
pad-to $$(UBOOT_OFFSET) | append-bootloader $$(UBOOT_TARGET) |\
|
2021-07-10 15:35:47 +00:00
|
|
|
pad-to 4092k | mt7623-mbr emmc |\
|
2023-05-22 21:58:58 +00:00
|
|
|
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),\
|
2023-05-26 09:26:49 +00:00
|
|
|
pad-to 4M | append-image-stage initramfs-recovery.itb | check-size 48m |\
|
2023-05-22 21:58:58 +00:00
|
|
|
) \
|
|
|
|
$(if $(CONFIG_TARGET_ROOTFS_SQUASHFS),\
|
2023-05-26 09:26:49 +00:00
|
|
|
pad-to 48M | append-image squashfs-sysupgrade.itb | check-size |\
|
2023-05-22 21:58:58 +00:00
|
|
|
) \
|
2021-07-10 15:35:47 +00:00
|
|
|
gzip
|
2021-08-20 20:11:32 +00:00
|
|
|
ARTIFACTS := u-boot.bin preloader.bin sdcard.img.gz
|
2020-07-21 15:28:54 +00:00
|
|
|
SUPPORTED_DEVICES := bananapi,bpi-r2
|
2020-05-29 11:49:44 +00:00
|
|
|
endef
|
2021-07-10 15:35:47 +00:00
|
|
|
TARGET_DEVICES += bananapi_bpi-r2
|
|
|
|
|
2021-08-20 20:11:32 +00:00
|
|
|
define Device/unielec_u7623-02
|
2020-07-21 18:19:40 +00:00
|
|
|
DEVICE_VENDOR := UniElec
|
2021-08-20 20:11:32 +00:00
|
|
|
DEVICE_MODEL := U7623-02
|
2020-07-21 18:19:40 +00:00
|
|
|
# When we use FIT images, U-Boot will populate the /memory node with the correct
|
|
|
|
# memory size discovered from the preloader, so we don't need separate builds.
|
2021-08-20 20:11:32 +00:00
|
|
|
DEVICE_DTS := mt7623a-unielec-u7623-02
|
2021-02-19 09:16:19 +00:00
|
|
|
DEVICE_DTS_DIR := ../dts
|
2021-08-20 20:11:32 +00:00
|
|
|
DEVICE_PACKAGES := kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1 kmod-mmc \
|
|
|
|
mkf2fs e2fsprogs kmod-usb-ohci kmod-usb2 kmod-usb3 kmod-ata-ahci
|
2020-07-21 18:19:40 +00:00
|
|
|
UBOOT_OFFSET := 256k
|
|
|
|
UBOOT_TARGET := mt7623a_unielec_u7623
|
2021-08-20 20:11:32 +00:00
|
|
|
UBOOT_IMAGE := u-boot-mtk.bin
|
|
|
|
UBOOT_PATH := $(STAGING_DIR_IMAGE)/$$(UBOOT_TARGET)-$$(UBOOT_IMAGE)
|
2023-06-15 14:11:27 +00:00
|
|
|
ifeq ($(DUMP),)
|
2023-05-26 09:26:49 +00:00
|
|
|
IMAGE_SIZE := $$(shell expr 48 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
|
2023-06-15 14:11:27 +00:00
|
|
|
endif
|
2021-08-20 20:11:32 +00:00
|
|
|
IMAGES := sysupgrade.itb
|
|
|
|
KERNEL := kernel-bin | gzip
|
|
|
|
KERNEL_INITRAMFS_SUFFIX := -recovery.itb
|
|
|
|
KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
|
|
|
|
IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb external-static-with-rootfs | append-metadata
|
|
|
|
ARTIFACT/u-boot.bin := append-uboot
|
|
|
|
# vendor Preloader seems not to care about SDMMC_BOOT/EMMC_BOOT header,
|
|
|
|
# but OpenWrt expects 'SDMM' magic for sysupgrade.
|
|
|
|
ARTIFACT/emmc.img.gz := mt7623-mbr sdmmc |\
|
|
|
|
pad-to $$(UBOOT_OFFSET) | append-bootloader $$(UBOOT_TARGET) |\
|
2023-05-22 21:58:58 +00:00
|
|
|
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),\
|
2023-05-26 09:26:49 +00:00
|
|
|
pad-to 4M | append-image-stage initramfs-recovery.itb | check-size 48m |\
|
2023-05-22 21:58:58 +00:00
|
|
|
) \
|
|
|
|
$(if $(CONFIG_TARGET_ROOTFS_SQUASHFS),\
|
2023-05-26 09:26:49 +00:00
|
|
|
pad-to 48M | append-image squashfs-sysupgrade.itb | check-size |\
|
2023-05-22 21:58:58 +00:00
|
|
|
) \
|
2021-08-20 20:11:32 +00:00
|
|
|
gzip | append-metadata
|
|
|
|
ARTIFACT/scatter.txt := scatterfile emmc.img.gz
|
|
|
|
ARTIFACTS := u-boot.bin scatter.txt emmc.img.gz
|
|
|
|
SUPPORTED_DEVICES += unielec,u7623-02-emmc-512m
|
|
|
|
endef
|
|
|
|
TARGET_DEVICES += unielec_u7623-02
|
|
|
|
|
|
|
|
|
|
|
|
# Legacy helper for U7623 board
|
|
|
|
define Build/fat-recovery-fs
|
|
|
|
rm -f $@.recovery
|
|
|
|
mkfs.fat -C $@.recovery 3070
|
|
|
|
cat $@.recovery >> $@
|
2020-07-21 18:19:40 +00:00
|
|
|
endef
|
|
|
|
|
|
|
|
# Legacy partial image for U7623
|
|
|
|
# This preserves the vendor U-Boot and starts with a uImage at 0xA00
|
|
|
|
define Device/unielec_u7623-02-emmc-512m-legacy
|
2019-09-25 21:56:13 +00:00
|
|
|
DEVICE_VENDOR := UniElec
|
|
|
|
DEVICE_MODEL := U7623-02
|
2020-07-21 18:19:40 +00:00
|
|
|
DEVICE_VARIANT := eMMC/512MiB RAM (legacy image)
|
2020-01-14 14:38:51 +00:00
|
|
|
DEVICE_DTS := mt7623a-unielec-u7623-02-emmc-512m
|
2021-02-19 09:16:19 +00:00
|
|
|
DEVICE_DTS_DIR := ../dts
|
2020-07-21 15:28:54 +00:00
|
|
|
KERNEL_NAME := zImage
|
|
|
|
KERNEL := kernel-bin | append-dtb | uImage none
|
|
|
|
KERNEL_INITRAMFS := kernel-bin | append-dtb | uImage none
|
2020-06-15 08:47:09 +00:00
|
|
|
DEVICE_PACKAGES := kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1 kmod-mmc \
|
2022-01-25 00:05:43 +00:00
|
|
|
mkf2fs e2fsprogs kmod-usb-ohci kmod-usb2 kmod-usb3 kmod-ata-ahci \
|
2021-08-20 20:11:32 +00:00
|
|
|
partx-utils
|
2022-01-10 17:09:27 +00:00
|
|
|
IMAGES := sysupgrade.bin.gz
|
|
|
|
IMAGE/sysupgrade.bin.gz := append-kernel |\
|
|
|
|
pad-to 4864k | fat-recovery-fs |\
|
|
|
|
pad-to 7936k | append-rootfs |\
|
|
|
|
gzip | append-metadata
|
2020-07-21 18:19:40 +00:00
|
|
|
SUPPORTED_DEVICES := unielec,u7623-02-emmc-512m
|
mediatek: Add support for the UniElec U7623-02
This commit adds support for the MT7623A-based UniElec U7623-02 router,
with eMMC storage and 512MB RAM. The router can be delivered with NAND
Flash and more memory, but I only have access to the one configuration.
The DTS is structured in such a way that adding support for
more/different storage/memory should be straight forward.
The device has the following specifications:
* MT7623A (quad-core, 1.3 GHz)
* 512MB RAM (DDR3)
* 8GB storage (eMMC 4.5)
* 2x normal miniPCIe slots
* 1x miniPCIe slot that is connected via an internal USB OTG port
* 5x 1Gbps Ethernet (MT7530 switch)
* 1x UART header
* 1x USB 3.0 port
* 1x SATA 3.0
* 1x 40P*0.5mm FPC for MIPI LCD
* 1x SIM slot
* 12x LEDs (2 GPIO controlled)
* 1x reset button
* 1x DC jack for main power (12V)
The following has been tested and is working:
* Ethernet switch
* miniPCIe slots (tested with Wi-Fi cards)
* USB 3.0 port
* sysupgrade
* reset button
Not working:
* The miniPCIe connected via USB OTG. For the port to work, some MUSB
glue must be added. I am currently in the process of porting the glue
from the vendor SDK.
Not tested:
* SATA 3.0
* MIPI LCD
Installation:
The board ships with u-boot, and the first installation needs to be done
via the bootloader using tftp. Step number one is to update the MBR of
the eMMC, as the one that ships with the device is broken. Since the
device can ship with different storage sizes, I will not provide the
exact steps for creating a valid MBR. However, I have made some
assumptions about the disk layout - there must be one 8MB recovery
partition (FAT32) and a partition for the rootfs (Linux).
The board loads the kernel from block 0xA00 (2560) and I have reserved
32MB for the kernel (65536 blocks). I have aligned the partitions on the
erase block size (4096 byte), so the recovery partition must start on
block 69632 and end on 86016 (16385 sectors). The rootfs is assumed to
start on sector 90112.
In order to install the mbr, you run the following commands from the
u-boot command line:
* tftpboot ${loadaddr} <name of mbr file>
* mmc device 0
* mmc write ${loadaddr} 0x00 1
Run the following commands to install + boot OpenWRT:
* tftpboot ${loadaddr} openwrt-mediatek-mt7623-7623a-unielec-u7623-02-emmc-512m-squashfs-sysupgrade-emmc.bin.gz
* run boot_wr_img
* run boot_rd_img
* bootm
Recovery:
In order to recover the router, you need to follow the installation
steps above (no need to replace MBR).
Notes:
* F2FS is used as the overlay filesystem.
* The device does not ship with any valid MAC address, so a random
address has to be generated. As a work-around, I write the initial
random MAC to a file on the recovery partition. The MAC of the WAN
interface is set to the MAC-address contained in this file on each boot,
and the address of the LAN-interfaces are WAN + 1. The MAC file is kept
across sysupgrade/firstboot.
My approach is slightly different than what the stock image does. The
first fives bytes of the MAC addresses in the stock image are static,
and then the last byte is random. I believe it is better to create fully
random MAC addresses.
* In order to support the miniPCIe-slots, I needed to add missing
pcie-nodes to mt7623.dtsi. The nodes are just c&p from the upstream
dtsi.
* One of the USB3.0 phys (u3phy2) on the board can be used as either USB
or PCI, and one of the wifi-cards is connected to this phy. In order to
support switching the phy from USB to PCI, I needed to patch the
phy-driver. The patch is based on a rejected (at least last time I
checked) PCI-driver submitted to the linux-mediatek mailing list.
* The eMMC is configured to boot from the user area, and according to
the data sheet of the eMMC this value can't be changed.
* I tried to structure the MBR more nicely and use for example a
FAT32-parition for the kernel, so that we don't need to write/read from
some offset. The bootloader does not support reading from
FAT32-paritions. While the command (fatload) is there, it just throws an
error when I try to use it.
* I will submit and hope to get the DTS for the device accepted
upstream. If and when that happens, I will update the patches
accordingly.
Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
2018-06-19 23:17:40 +00:00
|
|
|
endef
|
2020-07-21 18:19:40 +00:00
|
|
|
TARGET_DEVICES += unielec_u7623-02-emmc-512m-legacy
|