1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
DEVICE_VARS += UBOOT_TARGET UBOOT_OFFSET UBOOT_IMAGE
# 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.
define Build/mt7623-mbr
cp $@ $@.tmp 2>/dev/null || true
ptgen -o $@.tmp -h 4 -s 63 -a 0 -l 1024 \
-t 0x41 -N uboot -p 1M@$(UBOOT_OFFSET) \
-t 0xea -N recovery -p 40M@4M \
-t 0x2e -N production -p $(CONFIG_TARGET_ROOTFS_PARTSIZE)M@48M
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
endef
define Build/append-preloader
cat $(STAGING_DIR_IMAGE)/$1-preloader.bin >> $@
endef
define Build/append-bootloader
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)" > $@
endef
define Device/bananapi_bpi-r2
DEVICE_VENDOR := Bananapi
DEVICE_MODEL := BPi-R2
DEVICE_DTS := mt7623n-bananapi-bpi-r2
DEVICE_PACKAGES := mkf2fs e2fsprogs kmod-usb3 kmod-ata-ahci
UBOOT_OFFSET := 320k
UBOOT_TARGET := mt7623n_bpir2
UBOOT_IMAGE := u-boot.bin
UBOOT_PATH := $(STAGING_DIR_IMAGE)/$$(UBOOT_TARGET)-$$(UBOOT_IMAGE)
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
IMAGE_SIZE := $$(shell expr 48 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
IMAGE/sysupgrade.itb := append-kernel | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb external-static-with-rootfs | append-metadata
ARTIFACT/preloader.bin := mt7623-mbr emmc |\
pad-to 2k | append-preloader $$(UBOOT_TARGET)
ARTIFACT/u-boot.bin := append-uboot
ARTIFACT/sdcard.img.gz := mt7623-mbr sdmmc |\
pad-to 2k | append-preloader $$(UBOOT_TARGET) |\
pad-to $$(UBOOT_OFFSET) | append-bootloader $$(UBOOT_TARGET) |\
pad-to 4092k | mt7623-mbr emmc |\
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),\
pad-to 4M | append-image-stage initramfs-recovery.itb | check-size 48m |\
) \
$(if $(CONFIG_TARGET_ROOTFS_SQUASHFS),\
pad-to 48M | append-image squashfs-sysupgrade.itb | check-size |\
) \
gzip
ARTIFACTS := u-boot.bin preloader.bin sdcard.img.gz
SUPPORTED_DEVICES := bananapi,bpi-r2
endef
TARGET_DEVICES += bananapi_bpi-r2
define Device/unielec_u7623-02
DEVICE_VENDOR := UniElec
DEVICE_MODEL := U7623-02
# 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.
DEVICE_DTS := mt7623a-unielec-u7623-02
DEVICE_DTS_DIR := ../dts
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
UBOOT_OFFSET := 256k
UBOOT_TARGET := mt7623a_unielec_u7623
UBOOT_IMAGE := u-boot-mtk.bin
UBOOT_PATH := $(STAGING_DIR_IMAGE)/$$(UBOOT_TARGET)-$$(UBOOT_IMAGE)
IMAGE_SIZE := $$(shell expr 48 + $$(CONFIG_TARGET_ROOTFS_PARTSIZE))m
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) |\
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),\
pad-to 4M | append-image-stage initramfs-recovery.itb | check-size 48m |\
) \
$(if $(CONFIG_TARGET_ROOTFS_SQUASHFS),\
pad-to 48M | append-image squashfs-sysupgrade.itb | check-size |\
) \
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 >> $@
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
DEVICE_VENDOR := UniElec
DEVICE_MODEL := U7623-02
DEVICE_VARIANT := eMMC/512MiB RAM (legacy image)
DEVICE_DTS := mt7623a-unielec-u7623-02-emmc-512m
DEVICE_DTS_DIR := ../dts
KERNEL_NAME := zImage
KERNEL := kernel-bin | append-dtb | uImage none
KERNEL_INITRAMFS := kernel-bin | append-dtb | uImage none
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 \
partx-utils
IMAGES := sysupgrade.bin.gz
IMAGE/sysupgrade.bin.gz := append-kernel |\
pad-to 4864k | fat-recovery-fs |\
pad-to 7936k | append-rootfs |\
gzip | append-metadata
SUPPORTED_DEVICES := unielec,u7623-02-emmc-512m
endef
TARGET_DEVICES += unielec_u7623-02-emmc-512m-legacy
|