diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2022-12-22 19:23:29 +0000 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2024-03-31 16:57:19 +0100 |
commit | 6ffd42548bf10cda13a01555ff4fa56d4213cdf2 (patch) | |
tree | 975d6a4f88a0a3469c1450476e841ef0bf8fbb85 /firmware/rolo.c | |
parent | af644e02a151bb6d4c229cc1d4846c7ffe952135 (diff) | |
download | rockbox-6ffd42548bf10cda13a01555ff4fa56d4213cdf2.tar.gz rockbox-6ffd42548bf10cda13a01555ff4fa56d4213cdf2.zip |
multiboot: Refactor boot data validation, add version numbers
Instead of verifying the CRC before every access of the boot data,
verify the CRC once at startup and set a flag to indicate the boot
data is valid.
Also add a framework to support multiple boot protocol versions.
Firmware declares the maximum supported protocol version using a
version byte in the boot data header. The bootloader chooses the
highest version supported by it and the firmware when deciding
what boot protocol to use.
Change-Id: I810194625dc0833f026d2a23b8d64ed467fa6aca
Diffstat (limited to 'firmware/rolo.c')
-rw-r--r-- | firmware/rolo.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/firmware/rolo.c b/firmware/rolo.c index a3e6d5c2b9..1b37b6f771 100644 --- a/firmware/rolo.c +++ b/firmware/rolo.c | |||
@@ -250,12 +250,9 @@ int rolo_load(const char* filename) | |||
250 | 250 | ||
251 | err = LOAD_FIRMWARE(filebuf, filename, filebuf_size); | 251 | err = LOAD_FIRMWARE(filebuf, filename, filebuf_size); |
252 | #if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) | 252 | #if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) |
253 | /* write the bootdata as if rolo were the bootloader */ | 253 | /* write the bootdata as if rolo were the bootloader |
254 | unsigned int crc = 0; | 254 | * FIXME: this won't work for root redirect... */ |
255 | if (strcmp(filename, BOOTDIR "/" BOOTFILE) == 0) | 255 | if (!strcmp(filename, BOOTDIR "/" BOOTFILE) && boot_data_valid) |
256 | crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); | ||
257 | |||
258 | if(crc > 0 && crc == boot_data.crc) | ||
259 | write_bootdata(filebuf, filebuf_size, boot_data.boot_volume); /* rb-loader.c */ | 256 | write_bootdata(filebuf, filebuf_size, boot_data.boot_volume); /* rb-loader.c */ |
260 | #endif | 257 | #endif |
261 | 258 | ||