routerbootpart: hard_config partition can be larger than a single block on MikroTik devices

Thibaut hacks at
Sat May 1 12:09:58 BST 2021

Following up on IRC conversation, for the record:

> Le 1 mai 2021 à 11:27, Thibaut <hacks at> a écrit :


> Yes, but only the first 4K is used. What’s needed is to check whether or not the rb_hardconfig driver will successfully process a 4K-only block from an 8K partition. I *think* it should, but haven’t looked back at the code or tested that yet.

After checking, the rb_hardconfig driver will handle this case with no problem.

> If that’s the case then adapting routerbootpart is relatively trivial.

There are two ways to deal with the hap-ac2 situation:

Either fix it globally, by making the hard_config partition auto-extend up to the next defined partition via the following patch:

--- a/target/linux/generic/files/drivers/mtd/parsers/routerbootpart.c
+++ b/target/linux/generic/files/drivers/mtd/parsers/routerbootpart.c
@@ -99,7 +99,7 @@ static struct routerboot_dynpart rb_dynparts[] = {
                .magic = RB_MAGIC_HARD, // stored in CPU-endianness on flash
                .size_fixup = NULL,
                .offset = 0x0,
-               .size = RB_BLOCK_SIZE,
+               .size = 0x0,
                .found = false,
        }, {
                .name = "soft_config »,

This would of course need to be confirmed working on all currently supported devices (I can’t think of a situation where this would break, but one never knows).

Alternatively, overriding the size= parameter in the hap-ac2 DTS should also work. It’s likely this change will be needed for other ipq-based mikrotik devices.


More information about the openwrt-devel mailing list