Skip to content

Commit cd13ed6

Browse files
plappermaulrobimarko
authored andcommitted
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@gmx.de> Link: openwrt/openwrt#21332 Signed-off-by: Robert Marko <robimarko@gmail.com>
1 parent 4491f1d commit cd13ed6

File tree

1 file changed

+22
-1
lines changed
  • target/linux/realtek/image/rt-loader/src

1 file changed

+22
-1
lines changed

target/linux/realtek/image/rt-loader/src/main.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,27 @@ void load_uimage_from_flash(void *flash_start)
170170
memcpy(_kernel_data_addr, flash_addr + UIMAGE_HDR_SIZE, _kernel_data_size);
171171
}
172172

173+
bool search_piggy_backed_uimage(void)
174+
{
175+
void *addr = _kernel_data_addr;
176+
177+
/*
178+
* Piggy-backed data might be an uImage or not. Run a lazy uImage check.
179+
* In case it fails it should be safe to assume an lzma data stream.
180+
*/
181+
search_image(&addr, &_kernel_data_size, &_kernel_load_addr);
182+
183+
if (!addr)
184+
return false;
185+
186+
printf("piggy-backed uImage '%s' found at 0x%08x with load address 0x%08x\n",
187+
(char *)(addr + 32), addr, _kernel_load_addr);
188+
189+
_kernel_data_addr = addr + UIMAGE_HDR_SIZE;
190+
191+
return true;
192+
}
193+
173194
void main(unsigned long reg_a0, unsigned long reg_a1,
174195
unsigned long reg_a2, unsigned long reg_a3)
175196
{
@@ -195,7 +216,7 @@ void main(unsigned long reg_a0, unsigned long reg_a1,
195216
*/
196217
if (flash_start)
197218
load_uimage_from_flash(flash_start);
198-
else if (kernel_addr)
219+
else if (!search_piggy_backed_uimage() && kernel_addr)
199220
_kernel_load_addr = kernel_addr;
200221

201222
/*

0 commit comments

Comments
 (0)