[openwrt/openwrt] realtek: rt-loader: allow piggy-backed uimage

LEDE Commits lede-commits at lists.infradead.org
Fri Jan 2 09:03:54 PST 2026


robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/cd13ed6fcfe7457e6c1539f1c0cf8e8ade33b4fb

commit cd13ed6fcfe7457e6c1539f1c0cf8e8ade33b4fb
Author: Markus Stockhausen <markus.stockhausen at gmx.de>
AuthorDate: Tue Dec 30 17:34:41 2025 +0100

    realtek: rt-loader: allow piggy-backed uimage
    
    Until now rt-loader expects a piggy-backed lzma compressed data
    stream. Be more flexible and allow a piggy-backed uimage as well.
    
    Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
    Link: https://github.com/openwrt/openwrt/pull/21332
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 target/linux/realtek/image/rt-loader/src/main.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/target/linux/realtek/image/rt-loader/src/main.c b/target/linux/realtek/image/rt-loader/src/main.c
index e8ac501607..80c8ba85d0 100644
--- a/target/linux/realtek/image/rt-loader/src/main.c
+++ b/target/linux/realtek/image/rt-loader/src/main.c
@@ -170,6 +170,27 @@ void load_uimage_from_flash(void *flash_start)
 	memcpy(_kernel_data_addr, flash_addr + UIMAGE_HDR_SIZE, _kernel_data_size);
 }
 
+bool search_piggy_backed_uimage(void)
+{
+	void *addr = _kernel_data_addr;
+
+	/*
+	 * Piggy-backed data might be an uImage or not. Run a lazy uImage check.
+	 * In case it fails it should be safe to assume an lzma data stream.
+	 */
+	search_image(&addr, &_kernel_data_size, &_kernel_load_addr);
+
+	if (!addr)
+		return false;
+
+	printf("piggy-backed uImage '%s' found at 0x%08x with load address 0x%08x\n",
+	       (char *)(addr + 32), addr, _kernel_load_addr);
+
+	_kernel_data_addr = addr + UIMAGE_HDR_SIZE;
+
+	return true;
+}
+
 void main(unsigned long reg_a0, unsigned long reg_a1,
 	  unsigned long reg_a2, unsigned long reg_a3)
 {
@@ -195,7 +216,7 @@ void main(unsigned long reg_a0, unsigned long reg_a1,
 	 */
 	if (flash_start)
 		load_uimage_from_flash(flash_start);
-	else if (kernel_addr)
+	else if (!search_piggy_backed_uimage() && kernel_addr)
 		_kernel_load_addr = kernel_addr;
 
 	/*




More information about the lede-commits mailing list