aboutsummaryrefslogtreecommitdiffstats
path: root/include/image-commands.mk
Commit message (Collapse)AuthorAgeFilesLines
* Revert "image-commands.mk: Be consistent in command invocation"Hauke Mehrtens2022-12-221-1/+1
| | | | | | | | | | This reverts commit fcff234fd89e8b24aa3ad2f352ddbb5304c38dc1. $(STAGING_DIR_HOST)/bin/gzip is not available in openwrt-22.03. The change broke the build because the build process could not find this file. For example ath79/generic netgear_wndap360 was affected. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
* image-commands.mk: Be consistent in command invocationOlliver Schinagl2022-12-221-1/+1
| | | | | | | | Most/all other tools use the staging dir prefix, gzip should as well. Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> Acked-by: Christian Marangi <ansuelsmth@gmail.com> (cherry picked from commit 47df168dd279d52127f6bbc623e79bdeeb6c8fd4)
* image: add support for Netgear encrypted imageWenli Looi2022-07-211-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | Netgear encrypted image is used in various devices including WAX202, WAX206, and EX6400v3. This image format also requires a dummy squashfs4 image which is added here as well. References in WAX202 GPL source: https://www.downloads.netgear.com/files/GPL/WAX202_V1.0.5.1_Source.rar * openwrt/bootloader/u-boot-mt7621-2018.09-gitb178829-20200526/board/ralink/common/dual_image.c Bootloader code that verifies the presence of a squashfs4 image, thus a dummy image is added here. * openwrt/tools/imgencoder/src/gj_enc.c Contains code that generates the encrypted image. There is support for adding an RSA signature, but it does not look like the signature is verified by the stock firmware or bootloader. * openwrt/tools/imgencoder/src/imagekey.h Contains the encryption key and IV. It appears the same key/IV is used for other Netgear devices including WAX206 and EX6400v3. Signed-off-by: Wenli Looi <wlooi@ucalgary.ca> (cherry picked from commit efca76ffce5cf464e82d8269d79877f442209a0a)
* image: strip metadata from images when used in other artifactsDaniel Golle2022-04-151-3/+11
| | | | | | | | | | Image metadata and signature is of no use for images which are included inside other artifacts (like an SD-card image). Strip them off before using images in artifacts or stashing them for the ImageBuilder as the contained signature breaks reproducibility. Signed-off-by: Daniel Golle <daniel@makrotopia.org> (cherry picked from commit 7a256d97d9ded84d1bfd531e775099774e7b6b06)
* build: store sha256_unsigned in JSONPaul Spooren2022-04-061-0/+1
| | | | | | | | | | | | | Introduce `sha256_unsigned` which is a checksum of the image _before_ a signature is attached. This is helpful to compare image reproducibility. Since the `.sha256sum` file is located in the $(KDIR) folder, switch $(BIN_DIR) with $(KDIR) to simplify the code. The value of $(BIN_DIR) itself is not stored inside the resulting JSON file, so it can be replaced. Signed-off-by: Paul Spooren <mail@aparcar.org> (cherry picked from commit 8822a8d850ba2df69b81289758959bb90643a696)
* tools: zip: fetch SOURCE_DATE_EPOCH directlySungbo Eo2022-03-091-1/+0
| | | | | | | | | Remove "--mtime" option introduced in commit 18c9faa03211 ("tools: zip: add option for reproducible archives") and instead fetch SOURCE_DATE_EPOCH environment variable directly in the code. Ref: https://sourceforge.net/p/infozip/patches/25/ Signed-off-by: Sungbo Eo <mans0n@gorani.run>
* build: image: use UTC for zip timestampSungbo Eo2022-03-091-2/+1
| | | | | | | | Zip uses DOS timestamp for mtime which is stored in local time and hence depends on the timezone of the build system. Force zip to use UTC timezone to make image builds more reproducible. Signed-off-by: Sungbo Eo <mans0n@gorani.run>
* image-commands.mk: Use ERROR_MESSAGE for imagesize failsPaul Spooren2022-02-281-1/+1
| | | | | | | | | | | | | If a image is bigger than the device can handle, an error message is printed. This is usually silenced and silently ignored, making it harder to debug. While it's possible to run the build in verbose mode (via `make V=s`) and grep for *is too big*, it's more intuitive to print the error message directly. For that use the newly unlocked `$(call ERROR_MESSAGE,...)` definition which now also print in non-verbose mode. Fixes: FS#50 (aka #7604) Signed-off-by: Paul Spooren <mail@aparcar.org>
* ramips: add support for ipTIME AX2004MSungbo Eo2022-02-111-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ipTIME AX2004M is an 802.11ax (Wi-Fi 6) router, based on MediaTek MT7621A. Specifications: * SoC: MT7621A * RAM: 256 MiB * Flash: NAND 128 MiB * Wi-Fi: * MT7915D: 2.4/5 GHz (DBDC) * Ethernet: 5x 1GbE * Switch: SoC built-in * USB: 1x 3.0 * UART: J4 (115200 baud) * Pinout: [3V3] (TXD) (RXD) (GND) MAC addresses: | interface | MAC address | source | comment |-----------|-------------------|----------------|--------- | LAN | 58:xx:xx:00:xx:9B | | [1] | WAN | 58:xx:xx:00:xx:99 | | | WLAN 2G | 58:xx:xx:00:xx:98 | factory 0x4 | | WLAN 5G | 5A:xx:xx:40:xx:98 | | | | 58:xx:xx:00:xx:98 | config ethaddr | [1] Used in this patch as WLAN 5G MAC address with the local bit set Load addresses: * stock * 0x80010000: FIT image * 0x81001000: kernel image -> entry * OpenWrt * 0x80010000: FIT image * 0x82000000: uncompressed kernel+relocate image * 0x80001000: relocated kernel image -> entry Notes: * This device has a dual-boot partition scheme, but this firmware works only on boot partition 1. The stock web interface will flash only on the inactive boot partition, but the recovery web page will always flash on boot partition 1. Installation via recovery mode: 1. Press reset button, power up the device, wait >10s for CPU LED to stop blinking. 2. Upload recovery image through the recovery web page at 192.168.0.1. Revert to stock firmware: 1. Install stock image via recovery mode. Signed-off-by: Sungbo Eo <mans0n@gorani.run>
* Revert "ramips: add support for ipTIME AX2004M"Stijn Tintel2022-02-011-5/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit f4a79148f8cb ("ramips: add support for ipTIME AX2004M") seems to leak KERNEL_LOADADDR 0x82000000 to other devices, causing the to no longer boot. The leak is visible in u-boot: Using 'config-1' configuration Trying 'kernel-1' kernel subimage Description: MIPS OpenWrt Linux-5.10.92 Type: Kernel Image Compression: lzma compressed Data Start: 0x840000e4 Data Size: 10750165 Bytes = 10.3 MiB Architecture: MIPS OS: Linux Load Address: 0x82000000 Entry Point: 0x82000000 Normally, it should look like this: Using 'config-1' configuration Trying 'kernel-1' kernel subimage Description: MIPS OpenWrt Linux-5.10.92 Type: Kernel Image Compression: lzma compressed Data Start: 0xbfca00e4 Data Size: 2652547 Bytes = 2.5 MiB Architecture: MIPS OS: Linux Load Address: 0x80001000 Entry Point: 0x80001000 Revert the commit to avoid more people soft-bricking their devices. This reverts commit f4a79148f8cbb7dfbcddfb0c1128caec45a01596. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
* ramips: add support for ipTIME AX2004MSungbo Eo2022-01-291-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ipTIME AX2004M is an 802.11ax (Wi-Fi 6) router, based on MediaTek MT7621A. Specification: * SoC: MT7621A * RAM: 256 MiB * Flash: NAND 128 MiB * Wi-Fi: * MT7915D: 2.4/5 GHz (DBDC) * Ethernet: 5x 1GbE * Switch: SoC built-in * USB: 1x 3.0 * UART: J4 (115200 baud) * Pinout: [3V3] (TXD) (RXD) (GND) MAC address: | interface | MAC | source | comment |-----------|-------------------|----------------|--------- | LAN | 58:XX:XX:00:XX:9B | | [1] | WAN | 58:XX:XX:00:XX:99 | | | WLAN 2G | 58:XX:XX:00:XX:98 | factory 0x4 | | WLAN 5G | 5A:XX:XX:40:XX:98 | | | | | | | | 58:XX:XX:00:XX:98 | config ethaddr | [1] Used in this patch as WLAN 5G MAC address with the local bit set Load address: * stock * 0x80010000: FIT image * 0x81001000: kernel image -> entry * OpenWrt * 0x80010000: FIT image * 0x82000000: uncompressed kernel+relocate image * 0x80001000: relocated kernel image -> entry Installation via **recovery** mode: 1. Press reset button, power up the device, wait >10s for CPU LED to stop blinking. 2. Upload recovery image through the recovery web page at 192.168.0.1. Revert to stock firmware: 1. Install stock image via recovery mode. Signed-off-by: Sungbo Eo <mans0n@gorani.run>
* kirkwood: add support for ipTIME NAS1Sungbo Eo2022-01-291-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | ipTIME NAS1 is a 1-bay NAS, based on Marvell Kirkwood SoC. Specifications: * SoC: 88F6281 * RAM: 256 MiB * Flash: SPI NOR 16 MiB * SATA: 1x 3Gb/s * Ethernet: 1x 1GbE * USB: 1x 2.0 * Fan: 2 speed level * UART: JP1 (115200 8N1) * Pinout: [3V3] (TXD) (RXD) (GND) Notes: * There are several variants of the model name: "NAS-I", "NASI", "NAS1". Here "NAS1" is adopted for consistent naming scheme. * The reset button is also a USB copy button in stock FW, but in this patch the former is the only default behavior. Installation via web interface: 1. Flash sysupgrade image through the stock web interface. Revert to stock firmware: 1. Perform sysupgrade with stock image. Signed-off-by: Sungbo Eo <mans0n@gorani.run>
* build: move Build/copy-file to image-commands.mkChristian Lamparter2022-01-151-0/+4
| | | | | | This is makro is present in more than one place. Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
* build: image: improve zip build recipeSungbo Eo2021-12-121-3/+5
| | | | | | | | | * clean before build * specify executable path * allow adding extra options for zip * use basename of $@ Signed-off-by: Sungbo Eo <mans0n@gorani.run>
* x86: added support to generate VHDX imagesOldřich Jedlička2021-12-051-1/+1
| | | | | | | Added support to generate dynamic-sized VHDX images for Hyper-V. Compile-tested on x86 and run-tested on Windows 10 21H2 (Hyper-V). Signed-off-by: Oldřich Jedlička <oldium.pro@gmail.com>
* build: image: add command to ubinize the kernel imageRobert Marko2021-11-281-0/+12
| | | | | | | | | | | | | | Newer NAND devices from MikroTik like the hAP ac3 require the kernel to be packed into UBIFS and then ubinized. So, since the ubinize-image.sh script can now ubinize kernel only as well lets add a command for it. This now allows calling ubinize-kernel in the kernel packaging at then end. Signed-off-by: Robert Marko <robimarko@gmail.com>
* build: image: explicitly pass --rootfs to append-ubiRobert Marko2021-11-281-1/+1
| | | | | | | | | | Rootfs is now optional in ubinize-image.sh and requires --rootfs flag instead of just passing the rootfs image as the argument before ubinize opts. So, simply add --rootfs flag before the $(IMAGE_ROOTFS). Signed-off-by: Robert Marko <robimarko@gmail.com>
* build: image: add UBIFS kernel packerRobert Marko2021-11-281-0/+9
| | | | | | | This allows packing the kernel into UBIFS like newer MikroTik NAND devices require. Signed-off-by: Robert Marko <robimarko@gmail.com>
* build: move elecom-wrc-gs-factory to image-commands.mkINAGAKI Hiroshi2021-10-301-0/+13
| | | | | | | | ELECOM WRC-X3200GST3 uses the same header/footer as WRC-GS/GST devices in ramips/mt7621 subtarget, so move "Build/elecom-wrc-gs-factory" to image-commands.mk to use from mediatek/mt7622 subtarget. Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
* scripts: mkits.sh: Allow legacy @ mode for dts creationDamien Mascord2021-09-231-0/+1
| | | | | | | | | | | | | | | | | | commit 5ec60cbe9d94 ("scripts: mkits.sh: replace @ with - in nodes") broke support for Meraki MR32 and this patch makes the replacement configurable allowing for specifying the @ or - or whatever character that is desired to retain backwards compatibility with existing devices. For example, this patch includes the fix for the Meraki MR32 in target/linux/bcm53xx/image for meraki_mr32: DEVICE_DTS_DELIMITER := @ DEVICE_DTS_CONFIG := config@1 Fixes: 5ec60cbe9d94 ("scripts: mkits.sh: replace @ with - in nodes") Signed-off-by: Damien Mascord <tusker@tusker.org> [Added tags, checkpatch.pl fixes, noted that this is for old stuff] Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
* build: introduce $(MKHASH)Leonardo Mörlein2021-05-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this commit, it was assumed that mkhash is in the PATH. While this was fine for the normal build workflow, this led to some issues if make TOPDIR="$(pwd)" -C "$pkgdir" compile was called manually. In most of the cases, I just saw warnings like this: make: Entering directory '/home/.../package/gluon-status-page' bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found bash: line 1: mkhash: command not found [...] While these were only warnings and the package still compiled sucessfully, I also observed that some package even fail to build because of this. After applying this commit, the variable $(MKHASH) is introduced. This variable points to $(STAGING_DIR_HOST)/bin/mkhash, which is always the correct path. Signed-off-by: Leonardo Mörlein <me@irrelefant.net>
* build: kernel2minor: work around path length limitFrançois Chavant2021-05-121-2/+5
| | | | | | | | | | | | | | When building for MikroTik devices the kernel2minor tool will sometimes fail with: Can't get lstat from kernel file!: No such file or directory. This is because kernel2minor expects paths no longer than 250 chars. To work around this the include/image-commands.mk has been modified to copy the kernel to a temporary file (/tmp/tmp.XXXXXXXXXX) before calling kernel2minor. Signed-off-by: François Chavant <francois@chavant.info>
* image: use portable filename in 'append-image-stage'Daniel Golle2021-04-241-2/+2
| | | | | | | | | | | The 'append-image-stage' command doesn't work when setting the EXTRA_IMAGE_NAME option of the ImageBuilder as in that case DEVICE_IMG_PREFIX is modified and no longer matches the value it had in buildroot. Choose a filename independent of DEVICE_IMG_PREFIX for images staged using 'append-image-stage' to fix that. Fixes: de4b29dab9 ("image: introduce 'append-image-stage' build command") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* image: introduce 'append-image-stage' build commandDaniel Golle2021-04-231-0/+12
| | | | | | | | | | | Similar to 'append-image' this new command appends an existing binary. 'append-image-stage' also makes a copy of that binary and keeps it in $(STAGING_DIR_IMAGE). When called from within the ImageBuilder, this copy is used instead of expecting the binary to be present. This is useful for artifacts which include the initramfs/recovery image which is usually not included in the ImageBuilder. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* image: fix append-image when building multiple profilesDaniel Golle2021-03-241-1/+1
| | | | | | | | In case CONFIG_TARGET_MULTI_PROFILE is set, IMG_PREFIX cannot be expanded. Use DEVICE_IMG_PREFIX instead and make sure it's defined. Fixes: 8f89b1ab0f ("image: add 'append-image' build command") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* image: add 'append-image' build commandDaniel Golle2021-03-241-0/+4
| | | | | | | | | | | Commit 7ce1d9ce09 ("build: artifacts add dependency for built images") now makes sure that sysupgrade and initramfs images are available at the stage that artifacts are created. Allow making use of that with a new build command 'append-image' to be used in artifacts. See the next commit for an example. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* include/image*: add support for device-tree overlaysDaniel Golle2021-03-171-1/+4
| | | | | | | | | | | Add new target feature 'dt-overlay' which makes DTC keep the symbol names in the generated dtb. Make sure additional DT overlay sources specified by the new device variable DEVICE_DTS_OVERLAY get compiled together with the main DTS (currently overlays got to be in the same folder). Let Build/fit pass the generated DT overlay blobs to mkits.sh. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* build: use config-1 instead of config@1 as defaultRobert Marko2021-03-051-1/+1
| | | | | | | | | | U-boot will reject all nodes with @ since commit: https://gitlab.denx.de/u-boot/u-boot/-/commit/79af75f7776fc20b0d7eb6afe1e27c00fdb4b9b4 This will cause the OpenWrt images to fail booting, to rectify use the config-1 as default. Signed-off-by: Robert Marko <robert.marko@sartura.hr>
* mediatek: mt7622: make sure image generation can run in parallelDaniel Golle2021-03-021-4/+0
| | | | | | | | The previous approach of referencing artifacts in follow-up artifacts can't work with parallel builds in the current way image.mk is built. Refactor things so this is not needed. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* mediatek: mt7622: bpi-r64: simplify eMMC install procedureDaniel Golle2021-03-011-0/+4
| | | | | | | | Write everything needed for eMMC install into the gaps between partitions on SD card. In that way, installation to eMMC only needs the SD card, no additional files need to be loaded via TFTP any more. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* treewide: fix spelling 'seperate' -> 'separate'Daniel Golle2021-02-281-1/+1
| | | | | | | This popular spelling mistake was also introduced by myself lately. Fix it everywhere. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* image: remove bogus mkimage commandDaniel Golle2021-02-251-16/+0
| | | | | | | | That was a left-over from testing and should not have made it into the tree. Remove it. Fixes: 330bd380e8 ("image: allow building FIT and uImage with ramdisk") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* image: allow building FIT and uImage with ramdiskDaniel Golle2021-02-241-0/+27
| | | | | | | | | | | | | Instead of embedding the initrd cpio archive into the kernel, allow for having an external ramdisk added to the FIT or uImage. This is useful to overcome kernel size limitations present in many stock bootloaders, as the ramdisk is then loaded seperately and doesn't add to the kernel size. Hence we can have larger ramdisks to host ie. installers with all binaries to flash included (or a web-based firmware selector). In terms of performance and total size the differences are neglectible. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* image: add support for building FIT image with filesystemDaniel Golle2021-02-241-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow for single (external-data) FIT image to hold kernel, dtb and squashfs. In that way, the bootloader verifies the system integrity including the rootfs, because what's the point of checking that the hash of the kernel is correct if it won't boot in case of squashfs being corrupted? Better allow bootloader to check everything needed to make it at least up to failsafe mode. As a positive side effect this change also makes the sysupgrade process on nand potentially much easier as it is now. In short: mkimage has a parameter '-E' which allows generating FIT images with 'external' data rather than embedding the data into the device-tree blob itself. In this way, the FIT structure itself remains small and can be parsed easily (rather than having to page around megabytes of image content). This patch makes use of that and adds support for adding sub-images of type 'filesystem' which are used to store the squashfs. Now U-Boot can verify the whole OS and the new partition parsers added in the Linux kernel can detect the filesystem sub-images, create partitions for them, and select the active rootfs volume based on the configuration in FIT (passing configuration via device tree could be implemented easily at a later stage). This new FIT partition parser works for NOR flash (on top of mtdblock), NAND flash (on top of ubiblock) as well as classic block devices (ie. eMMC, SDcard, SATA, NVME, ...). It could even be used to mount such FIT images via `losetup -P` on a user PC if this patch gets included in Linux upstream one day ;) Signed-off-by: John Crispin <john@phrozen.org> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* image: add ModelNameLimit16Álvaro Fernández Rojas2021-02-221-0/+4
| | | | | | This script returns the model name limited to 16 characters. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
* build: move elx-header into image-commands.mkYanase Yuki2021-02-051-0/+20
| | | | | | | ELECOM WAB-I1750-PS will need this in ath79, so move it to common Makefile. Signed-off-by: Yanase Yuki <dev@zpc.sakura.ne.jp>
* ramips: add support for ELECOM WRC-2533GHBK-IINAGAKI Hiroshi2021-01-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ELECOM WRC-2533GHBK-I is a 2.4/5 GHz band 11ac (Wi-Fi 5) router, based on MT7621A. Specification: - SoC : MediaTek MT7621A - RAM : DDR3 128 MiB - Flash : SPI-NOR 16 MiB - WLAN : 2.4/5 GHz 4T4R (2x MediaTek MT7615) - Ethernet : 10/100/1000 Mbps x5 - Switch : MediaTek MT7530 (SoC) - LED/keys : 4x/3x (2x buttons, 1x slide-switch) - UART : through-hole on PCB - J4: 3.3V, RX, GND, TX from SoC side - 57600n8 - Power : 12VDC, 1.5A Flash instruction using factory image: 1. Boot WRC-2533GHBK-I normally 2. Access to "http://192.168.2.1/" and open firmware update page ("ファームウェア更新") 3. Select the OpenWrt factory image and click apply ("適用") button 4. Wait ~150 seconds to complete flashing MAC addresses: LAN : BC:5C:4C:xx:xx:89 (Config, ethaddr (text)) WAN : BC:5C:4C:xx:xx:88 (Config, wanaddr (text)) 2.4GHz : BC:5C:4C:xx:xx:8A (Factory, 0x4 (hex)) 5GHz : BC:5C:4C:xx:xx:8B (Factory, 0x8004 (hex)) Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com> Reviewed-by: Sungbo Eo <mans0n@gorani.run>
* build: add elecom-product-header for ELECOM devicesINAGAKI Hiroshi2021-01-291-0/+12
| | | | | | | | | A header used in ELECOM WRC-300GHBK2-I and WRC-1750GHBK2-I/C is also used in ELECOM WRC-2533GHBK-I, so split the code to generate the header and move it to image-commands.mk to use from ramips target. Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com> Reviewed-by: Sungbo Eo <mans0n@gorani.run>
* build/image: warn if missing qemu-img for VDI/VMDKPaul Spooren2021-01-101-2/+6
| | | | | | | | | | | | | | | Currently `qemu-img` is used to convert raw x86 images to VDI and VMDK images, used for virtual machines. Having `qemu-img` in tree requires us to maintain an ancient version of `qemu-utils`, which recently required extra work to compile with newer compiler version. This commit prints a warning message in case `qemu-img` is missing. As a next step the in-tree version of `qemu-img` can be removed. Signed-off-by: Paul Spooren <mail@aparcar.org>
* build: add UIMAGE_MAGIC to device variablesSander Vanheule2020-11-251-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Allow a device recipe to specify a custom UIMAGE_MAGIC value, as used by OpenWrt's -M flag for mkimage. This allows to automatically customize the magic bytes in all calls to Build/uImage for this device, similar to the behaviour of UIMAGE_NAME. Since the -M argument is inserted before the user arguments, it can be overriden. The following example would use 0x87654321 for the KERNEL image, but 0x12345678 for the KERNEL_INITRAMFS image: define Device/MyDevice UIMAGE_MAGIC := 0x87654321 KERNEL := ... | uImage lzma KERNEL_INITRAMFS := ... | uImage lzma -M 0x12345678 ... endef Fixes: df8e6be59a1f ("rtl838x: add new architecture") [UIMAGE_MAGIC was not declared as a device variable] Signed-off-by: Sander Vanheule <sander@svanheule.net> [rebase, improve formatting of "Fixes"] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: uImage: separate arguments into individual linesAdrian Schmutzler2020-11-251-4/+9
| | | | | | Having one line per argument increases overview dramatically. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: uImage: allow override of default argumentsSander Vanheule2020-11-251-2/+3
| | | | | | | | | | | | | For some build recipes, the argument to Build/uImage is used to sneak in extra arguments for mkimage, whereas this appears to have been intended to specificy the compression method only. Use the first provided word for -C to be backwards compatible with current calls to Build/uImage. Use the rest of the call arguments to override the provided defaults. Only the input file name (-d) and the output file name cannot overriden. Signed-off-by: Sander Vanheule <sander@svanheule.net>
* image: sort image-commands.mk alphabeticallyAdrian Schmutzler2020-10-301-214/+215
| | | | | | | | | The definitions in image-commands.mk seem to have no particular order. Sort them alphabetically to make it easier to actually find anything there. No other changes made beyond moving entire blocks. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* image: drop combined-image build recipeAdrian Schmutzler2020-10-301-8/+0
| | | | | | | Build/combined-image is only used in ath25 target, and that defines its own version. Thus, drop the unused definition in image-commands.mk. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: image: add append-dtb-elf helperJohn Thomson2020-10-291-0/+7
| | | | | | | | | | | | | | | | | | The mips kernel vmlinux image supports adding an empty ELF section for DTB to be later inserted into with MIPS_ELF_APPENDED_DTB. This ELF + inserted DTB image can then be directly booted on some devices. Example usage: image/subtarget.mk: KERNEL_NAME := vmlinux.elf KERNEL_INITRAMFS_NAME := vmlinux-initramfs.elf KERNEL := kernel-bin | append-dtb-elf On mt7621 memory size needed to be manually specified. Signed-off-by: John Thomson <git@johnthomson.fastmail.com.au>
* scripts: mkits.sh make it possible to specify fdt@#Christian Lamparter2020-09-251-0/+1
| | | | | | | | | | | | | | Some bootloaders are really keen on just one special fdt in a multi-image fit image. This is a problem, because currently this is fixed to "fdt@1". This patch introduces a new device variable: DEVICE_FDT_NUM that allows to specify the right fdt number. If the value is absent "1" will be chosen. Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
* build: improve message for incompatible image on "legacy" devicesAdrian Schmutzler2020-08-081-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It has been reported that the current message displayed during upgrade with compat_version change is misleading for "legacy" devices, i.e. those without the "new" fwtool. This is partially caused by the fact that we need to exploit the supported_devices string to get some message text displayed for these devices. This patch modifies the message to make it more helpful and include additional information, e.g. Device linksys,wrt3200acm not supported by this image Supported devices: linksys,wrt3200acm linksys-whateverelse - Image version mismatch: image 1.1, device 1.0. Please wipe config during upgrade (force required) or reinstall. Reason: Config cannot be migrated from swconfig to DSA Note that the line breaks (except the one before Supported devices) are added manually here, I hesitate to hack \n into the supported_devices as well. The "Reason:" will only be displayed if DEVICE_COMPAT_MESSAGE is set for the device, otherwise "Please check documentation ..." will be shown instead. While at it, also rearrange the code in image-commands.mk to make lines shorter and remove the double filter-out command. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: image: return sizes if check-size failsAdrian Schmutzler2020-08-031-2/+4
| | | | | | | | | | | | | Instead of just printing a warning that an image is too big, also print both actual size and limit in the string: WARNING: Image file somename.bin is too big: 2096101 > 1048576 Since the kernel size is checked via the same function (if KERNEL_SIZE is specified), this will also apply to the kernel image size check. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* build: image: drop unused check-kernel-size recipeAdrian Schmutzler2020-08-021-7/+0
| | | | | | | | | | The recipe check-kernel-size is not used in the entire tree. Instead, we already check the size of the kernel image in Device/Build/kernel in image.mk via check-size function if KERNEL_SIZE is defined. Therefore, drop the function. Using it would be redundant anyway. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
* base-files: fwtool: make compat_version backward compatibleAdrian Schmutzler2020-07-311-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | So far, the compatibility mechanism only works if both device and image are already updated to the new routines. This patch extends the sysupgrade metadata and fwtool_check_image() to account for "older" images as well: The basic mechanism for older devices to check for image compatibility is the supported_devices entry. This can be exploited by putting a custom message into this variable of the metadata, so older FW will produce a mismatch and print the message as it thinks it's the list of supported devices. So, we have two cases: device 1.0, image 1.0: The metadata will just contain supported_devices as before. device 1.0, image 1.1: The metadata will contain: "new_supported_devices":["device_string1", "device_string2", ...], "supported_devices":["Image version 1.1 incompatible to device: ..."] If the device is "legacy", i.e. does not have the updated fwtool.sh, it will just fail with image check and print the content of supported_devices. If DEVICE_COMPAT_MESSAGE is set, this will be printed on old devices as well through the same mechanism. Otherwise a generic "Please check documentation ..." is appended. Upgrade can still be performed with -F like when SUPPORTED_DEVICES has been removed to prevent bricking. If the device has updated fwtool.sh (but is 1.0), it will just use the new_supported_devices instead, and work as intended (flashing with -n will work, flashing without will print the appropriate warning). This mechanism should provide a fair tradeoff between simplicity and functionality. Since we touched a lot of fields in metadata, this also bumps metadata_version to 1.1. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>