[PATCH V2] mtd: bcm47xxpart: detect block aligned Squashfs partition
Florian Fainelli
f.fainelli at gmail.com
Fri Sep 13 17:24:51 EDT 2013
Le vendredi 13 septembre 2013 22:25:30 Rafał Miłecki a écrit :
> Most of the bcm47xx devices use TRX format for storing kernel and some
> partition like Squashfs or JFFS2. This is pretty flexible solution, CFE
> (the bootloader) just writes (and later boots) TRX at some hardcoded
> place and paritions can vary in the size.
>
> However some devices don't use TRX format. Very recently we have
> discovered ZTE H218N that has kernel and rootfs partitions at some
> "random" places.
>
> This patch allows Linux find a rootfs partition after installing custom
> image with a CFE bootloader.
>
This looks much better, thanks! Couple of nitpicks below.
> Signed-off-by: Rafał Miłecki <zajec5 at gmail.com>
> ---
> drivers/mtd/bcm47xxpart.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
> index 9279a91..61213f9 100644
> --- a/drivers/mtd/bcm47xxpart.c
> +++ b/drivers/mtd/bcm47xxpart.c
> @@ -32,6 +32,7 @@
> #define ML_MAGIC1 0x39685a42
> #define ML_MAGIC2 0x26594131
> #define TRX_MAGIC 0x30524448
> +#define SQSH_MAGIC 0x71736873 /* shsq */
You could include uapi/linux/magic.h and use the SQUASHFS_MAGIC constant
directly, sorry for not noticing earlier.
>
> struct trx_header {
> uint32_t magic;
> @@ -167,6 +168,13 @@ static int bcm47xxpart_parse(struct mtd_info *master,
> offset = rounddown(offset + trx->length, blocksize);
> continue;
> }
> +
> + /* Squashfs on devices not using TRX */
> + if (buf[0x000 / 4] == SQSH_MAGIC) {
In theory le32_to_cpu() should be used to mimic what init/do_mounts_rd.c does
but we do not support big-endian BCM47xx devices yet so this probably does not
matter much.
--
Florian
More information about the linux-mtd
mailing list