mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-01-28 03:37:17 +01:00
realtek: rt-loader: enhance is_uimage()
Until now is_uimage() is only a crc check and the caller still needs to check other bits of the uimage header. Make this function what it is meant to be. Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/21332 Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
parent
7a78dc4a5d
commit
8f66b33503
1 changed files with 11 additions and 7 deletions
|
|
@ -41,11 +41,20 @@ typedef void (*entry_func_t)(unsigned long reg_a0, unsigned long reg_a1,
|
|||
unsigned long reg_a2, unsigned long reg_a3);
|
||||
|
||||
|
||||
static bool is_uimage(void *m)
|
||||
static bool is_uimage(unsigned char *m)
|
||||
{
|
||||
unsigned int data[UIMAGE_HDR_SIZE / sizeof(int)];
|
||||
unsigned int image_crc;
|
||||
|
||||
/*
|
||||
* The most basic way to find a uImage is to lookup the operating system
|
||||
* opcode (for Linux it is 5). Then verify the header checksum. This is
|
||||
* reasonably fast and all other magic value or constants can be avoided.
|
||||
*/
|
||||
|
||||
if (m[28] != UIMAGE_OS_LINUX)
|
||||
return false;
|
||||
|
||||
memcpy(data, m, UIMAGE_HDR_SIZE);
|
||||
image_crc = data[1];
|
||||
data[1] = 0;
|
||||
|
|
@ -127,14 +136,9 @@ void search_image(void **flash_addr, int *flash_size, void **load_addr)
|
|||
|
||||
printf("Searching for uImage starting at 0x%08x ...\n", addr);
|
||||
|
||||
/*
|
||||
* The most basic way to find a uImage is to lookup the operating system
|
||||
* opcode (for Linux it is 5). Then verify the header checksum. This is
|
||||
* reasonably fast and all other magic value or constants can be avoided.
|
||||
*/
|
||||
*flash_addr = NULL;
|
||||
for (int i = 0; i < 256 * 1024; i += 4, addr += 4) {
|
||||
if ((addr[28] == UIMAGE_OS_LINUX) && is_uimage(addr)) {
|
||||
if (is_uimage(addr)) {
|
||||
*flash_addr = addr;
|
||||
*flash_size = *(int *)(addr + 12);
|
||||
*load_addr = *(void **)(addr + 16);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue