aredn/patches/610-mikrotik-sysupgrade-v7....

204 lines
9.0 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff --git a/include/image-commands.mk b/include/image-commands.mk
index 77a35f3eec0070..b8810bfbab305b 100644
--- a/include/image-commands.mk
+++ b/include/image-commands.mk
@@ -383,6 +383,11 @@ define Build/kernel-bin
cp $< $@
endef
+define Build/kernel-pack-npk
+ bash -c 'source $(STAGING_DIR_HOST)/share/npkpy-venv/bin/activate; python $(STAGING_DIR_HOST)/share/npkpy-venv/bin/pack_npk_kernel.py --kernel $@ --output $@.npk'
+ mv $@.npk $@
+endef
+
define Build/linksys-image
$(TOPDIR)/scripts/linksys-image.sh \
"$(call param_get_default,type,$(1),$(DEVICE_NAME))" \
diff --git a/target/linux/ath79/image/common-mikrotik.mk b/target/linux/ath79/image/common-mikrotik.mk
index b37c8b7197067c..3d8d354d443654 100644
--- a/target/linux/ath79/image/common-mikrotik.mk
+++ b/target/linux/ath79/image/common-mikrotik.mk
@@ -13,6 +13,10 @@ define Device/mikrotik_nor
IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 -e | \
pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
check-size | append-metadata
+ IMAGES += sysupgrade-v7.bin
+ IMAGE/sysupgrade-v7.bin := append-kernel | kernel-pack-npk | \
+ kernel2minor -b -s 1024 -e | pad-to $$$$(BLOCKSIZE) | \
+ append-rootfs | pad-rootfs | check-size | append-metadata
endef
define Device/mikrotik_nand
diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_minor.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_minor.c
index af6822e11ab344..db7198169e44e6 100644
--- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_minor.c
+++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_minor.c
@@ -35,6 +35,7 @@
#define YAFFS_OBJECTID_ROOT 0x1
#define YAFFS_SUM_UNUSED 0xFFFF
#define YAFFS_NAME "kernel"
+#define YAFFS_NAME_BOOTIMAGE "bootimage"
#define MINOR_NR_PARTS 2
@@ -77,7 +78,8 @@ static int mtdsplit_parse_minor(struct mtd_info *master,
if (hdr.yaffs_sum_unused != YAFFS_SUM_UNUSED)
return -EINVAL;
- if (memcmp(hdr.yaffs_name, YAFFS_NAME, sizeof(YAFFS_NAME)))
+ if ((memcmp(hdr.yaffs_name, YAFFS_NAME, sizeof(YAFFS_NAME)) != 0) &&
+ (memcmp(hdr.yaffs_name, YAFFS_NAME_BOOTIMAGE, sizeof(YAFFS_NAME)) != 0))
return -EINVAL;
err = mtd_find_rootfs_from(master, master->erasesize, master->size,
diff --git a/target/linux/ipq40xx/image/mikrotik.mk b/target/linux/ipq40xx/image/mikrotik.mk
index f0e1f1aad34d92..6142b4ad3371ad 100644
--- a/target/linux/ipq40xx/image/mikrotik.mk
+++ b/target/linux/ipq40xx/image/mikrotik.mk
@@ -5,9 +5,13 @@ define Device/mikrotik_nor
KERNEL_NAME := vmlinux
KERNEL := kernel-bin | append-dtb-elf
IMAGES = sysupgrade.bin
+ IMAGES += sysupgrade-v7.bin
IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 | \
pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
check-size | append-metadata
+ IMAGE/sysupgrade-v7.bin := append-kernel | kernel-pack-npk | \
+ kernel2minor -b -s 1024 | pad-to $$$$(BLOCKSIZE) | \
+ append-rootfs | pad-rootfs | check-size | append-metadata
endef
define Device/mikrotik_nand
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index 0d25fc1eb31790..b72e9dd16f0195 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -1545,9 +1545,16 @@ define Device/MikroTik
DEVICE_PACKAGES := kmod-usb3 -uboot-envtools
KERNEL_NAME := vmlinuz
KERNEL := kernel-bin | append-dtb-elf
+ LOADER_TYPE := elf
+ KERNEL_INITRAMFS_NAME := vmlinux-initramfs
+ KERNEL_INITRAMFS := $(KERNEL_DTB) | loader-kernel
IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 | \
pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size | \
append-metadata
+ IMAGES += sysupgrade-v7.bin
+ IMAGE/sysupgrade-v7.bin := append-kernel | kernel-pack-npk | \
+ kernel2minor -b -s 1024 | pad-to $$$$(BLOCKSIZE) | \
+ append-rootfs | pad-rootfs | check-size | append-metadata
endef
define Device/mikrotik_ltap-2hnd
diff --git a/tools/Makefile b/tools/Makefile
index bf525d34a052cd..7f9947756af5bc 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -84,5 +84,6 @@ tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USES_MINOR),y) += kernel2minor
tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USE_SPARSE),y) += sparse
tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USE_LLVM_BUILD),y) += llvm-bpf
+tools-$(if $(CONFIG_BUILD_ALL_HOST_TOOLS)$(CONFIG_USES_MINOR),y) += npkpy
# builddir dependencies
$(curdir)/autoconf/compile := $(curdir)/m4/compile
diff --git a/tools/kernel2minor/patches/001-bootimage-path-option.patch b/tools/kernel2minor/patches/001-bootimage-path-option.patch
new file mode 100644
index 00000000000000..6da5d6b408db8b
--- /dev/null
+++ b/tools/kernel2minor/patches/001-bootimage-path-option.patch
@@ -0,0 +1,55 @@
+--- a/kernel2minor.c
++++ b/kernel2minor.c
+@@ -38,6 +38,7 @@ static int info_block_size = 0;
+ #define INFO_BLOCK_VAR_LEN 8
+ //имя файла ядра в файловой система yaffs2
+ #define KERNEl_YAFFS_FILE_NAME "kernel"
++#define BOOTIMAGE_YAFFS_FILE_NAME "bootimage"
+ /* размер блока данных по которому считается ECC. для yaffs2 это 256 */
+ #define ECC_BLOCK_SIZE 256
+
+@@ -56,6 +57,7 @@ int verbose = 0; //говорливос<D0BE>
+ //добавить к образу блок с данными описывающими его параметры(размер, blocksize, chunksize, etc...)
+ int add_image_info_block = 0; //это нужно для образов используемых перепрошивальщиком openwrt(для nand флешей)
+ int align_size = 0; //нужно для openwrt-шного sysupgrade-а. размер блока который будет добавлен к нам сторонним скриптом(sysupgrade-ом)
++int use_bootimage = 0;
+
+ //параметры для создаваемой нами файловой системы yaffs2. рассчитываются ф-ей calc_needed_vars.
+ static int chunk_data_size = 0;
+@@ -83,6 +85,7 @@ void print_help(void){
+ "-s", "FLASH Unit(Chunk) size", chunk_size_str,
+ "-i", "Add image info block", add_image_info_block ? info_block_size_str : "No",
+ "-p", "Platform name", platform_name_str,
++ "-b", "Use \"bootimage\" for packed file name", "",
+ "-v", "Verbose output", verbose ? "Yes" : "No",
+ "-h", "Show help and exit", "" };
+ printf("Version := %s\nUsage:\n", PROGRAM_VERSION);
+@@ -365,7 +368,10 @@ int fill_and_write_obj_header(int r, int
+ memset(buf, 0xff, buf_size);
+ verb_printf("%u: Writing chunk = 0 for obj(%u) HEADER, seq = %u\n", (*n)++, obj_id, seq_number);
+ //заполним заголовок объекта
+- cook_object_header(buf, KERNEl_YAFFS_FILE_NAME);
++ if (use_bootimage)
++ cook_object_header(buf, BOOTIMAGE_YAFFS_FILE_NAME);
++ else
++ cook_object_header(buf, KERNEl_YAFFS_FILE_NAME);
+ //заполним данные tags + ecc(oob part)
+ cook_tags(buf, buf_size, chunk_data_size, obj_id, seq_number, chunk_id, n_bytes, 1);
+ len = write(r, buf, buf_size);
+@@ -592,7 +598,7 @@ int main(int argc, char *argv[]){
+ int r = 0;
+ int ch; //для парсинга параметров
+ //загружаем параметры командной строки
+- while( (ch = getopt(argc, argv, "k:r:s:i:p:cevh")) != -1){
++ while( (ch = getopt(argc, argv, "k:r:s:i:p:cebvh")) != -1){
+ switch(ch){
+ case 'k': snprintf(kernel_file, sizeof(kernel_file) - 1, "%s", optarg); break;
+ case 'r': snprintf(res_file, sizeof(res_file) - 1, "%s", optarg); break;
+@@ -601,6 +607,7 @@ int main(int argc, char *argv[]){
+ case 's': chunk_size = atoi(optarg); break;
+ case 'i': add_image_info_block = 1; align_size = atoi(optarg); break;
+ case 'p': strncpy(platform_name, optarg, sizeof(platform_name)); break;
++ case 'b': use_bootimage = 1; break;
+ case 'v': verbose = 1; break;
+ case 'h': print_help(); exit(0); break;
+ }
diff --git a/tools/npkpy/Makefile b/tools/npkpy/Makefile
new file mode 100644
index 00000000000000..78fe83aaec2d77
--- /dev/null
+++ b/tools/npkpy/Makefile
@@ -0,0 +1,33 @@
+#
+# Copyright (C) 2023 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=npkpy
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/john-tho/npkpy.git
+PKG_SOURCE_DATE:=2023-01-22
+PKG_SOURCE_VERSION:=771dddc5aaaff95a9b4160d6867152cfa1a9255f
+PKG_MIRROR_HASH:=4c0596218e8c1f78b38c0583c18a574da18ff4c000ecdd5fbf50c62a62a1fb03
+
+include $(INCLUDE_DIR)/host-build.mk
+
+define Host/Compile
+ python -m venv $(STAGING_DIR_HOST)/share/npkpy-venv
+ bash -c 'source $(STAGING_DIR_HOST)/share/npkpy-venv/bin/activate; pip install --editable $(HOST_BUILD_DIR)'
+endef
+
+define Host/Install
+ $(CP) $(HOST_BUILD_DIR)/tools/demo_pack_kernel/poc_pack_kernel.py $(STAGING_DIR_HOST)/share/npkpy-venv/bin/pack_npk_kernel.py
+endef
+
+define Host/Clean
+ rm -rf $(STAGING_DIR_HOST)/share/npkpy-venv
+endef
+
+$(eval $(call HostBuild))