Re: [OpenWrt-Devel] [PATCH RFT] kernel: mtdsplit_uimage: debug buf/header sizes
On 12 February 2015 at 21:04, John Crispin blo...@openwrt.org wrote: [0.564000] Creating 4 MTD partitions on spi32766.0: [0.568000] 0x-0x0001 : uboot [0.572000] 0x0001-0x0002 : uboot-env [0.58] 0x0002-0x0003 : calibration [0.584000] 0x0005-0x00ff : firmware [0.596000] mtdsplit_uimage: [__mtdsplit_parse_uimage] buf:c0049000 sizeof(*buf):1 [0.60] mtdsplit_uimage: [__mtdsplit_parse_uimage] sizeof(*header):64 [0.608000] mtdsplit_uimage: [read_uimage_header] buf:c0049000 header_len:1 [0.616000] mtdsplit_uimage: [uimage_find_edimax] buf:c0049000 len:1 FW_EDIMAX_OFFSET + sizeof(*header):84 [0.624000] mtdsplit_uimage: Buffer too small for checking Edimax header [0.784000] Dedicated partitioner didn't split firmware partition, please fill a bug report! [0.788000] 0x00172108-0x00ff : rootfs [0.796000] mtd: partition rootfs must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only [0.808000] mtd: device 4 (rootfs) set to be root filesystem [0.812000] 1 squashfs-split partitions found on MTD device rootfs [0.82] 0x0034-0x00ff : rootfs_data [1.916000] Realtek RTL8366RB ethernet switch driver version 0.2.4 [1.924000] rtl8366rb rtl8366rb: using GPIO pins 491 (SDA) and 493 (SCK) [1.928000] rtl8366rb rtl8366rb: RTL5937 ver. 3 chip found Thank you! My obvious bug was fixed in https://dev.openwrt.org/changeset/44424/ Please note that if you still get Dedicated partitioner didn't split firmware partition, please fill a bug report! with 44424, it means that there is something wrong in target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c and we/you should look for a working reference code in 405-mtd-old-firmware-uimage-splitter.patch ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Re: [OpenWrt-Devel] [PATCH RFT] kernel: mtdsplit_uimage: debug buf/header sizes
yep, fixes the problem. please push it :) On 12/02/2015 12:47, Rafał Miłecki wrote: --- John can you give it a try, please? --- .../generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c | 15 ++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c index 2bb5e9a..4abc4be 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c @@ -20,6 +20,8 @@ #include mtdsplit.h +static int first_try = 1; + /* * uimage_header itself is only 64B, but it may be prepended with another data. * Currently the biggest size is for Edimax devices: 20B + 64B @@ -60,6 +62,8 @@ read_uimage_header(struct mtd_info *mtd, size_t offset, u_char *buf, size_t retlen; int ret; + if (first_try) + pr_info([%s] buf:%p header_len:%zu\n, __FUNCTION__, buf, header_len); ret = mtd_read(mtd, offset, header_len, retlen, buf); if (ret) { pr_debug(read error in \%s\\n, mtd-name); @@ -106,11 +110,15 @@ static int __mtdsplit_parse_uimage(struct mtd_info *master, ret = -ENOMEM; goto err_free_parts; } + if (first_try) + pr_info([%s] buf:%p sizeof(*buf):%u\n, __FUNCTION__, buf, sizeof(*buf)); /* find uImage on erase block boundaries */ for (offset = 0; offset master-size; offset += master-erasesize) { struct uimage_header *header; + if (first_try) + pr_info([%s] sizeof(*header):%u\n, __FUNCTION__, sizeof(*header)); uimage_size = 0; ret = read_uimage_header(master, offset, buf, sizeof(*buf)); @@ -308,8 +316,13 @@ static ssize_t uimage_find_edimax(u_char *buf, size_t len) { struct uimage_header *header; + if (first_try) + pr_info([%s] buf:%p len:%zu FW_EDIMAX_OFFSET + sizeof(*header):%u\n, __FUNCTION__, buf, len, FW_EDIMAX_OFFSET + sizeof(*header)); + if (len FW_EDIMAX_OFFSET + sizeof(*header)) { - pr_err(Buffer too small for checking Edimax header\n); + if (first_try) + pr_err(Buffer too small for checking Edimax header\n); + first_try = 0; return -ENOSPC; } ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Re: [OpenWrt-Devel] [PATCH RFT] kernel: mtdsplit_uimage: debug buf/header sizes
[0.564000] Creating 4 MTD partitions on spi32766.0: [0.568000] 0x-0x0001 : uboot [0.572000] 0x0001-0x0002 : uboot-env [0.58] 0x0002-0x0003 : calibration [0.584000] 0x0005-0x00ff : firmware [0.596000] mtdsplit_uimage: [__mtdsplit_parse_uimage] buf:c0049000 sizeof(*buf):1 [0.60] mtdsplit_uimage: [__mtdsplit_parse_uimage] sizeof(*header):64 [0.608000] mtdsplit_uimage: [read_uimage_header] buf:c0049000 header_len:1 [0.616000] mtdsplit_uimage: [uimage_find_edimax] buf:c0049000 len:1 FW_EDIMAX_OFFSET + sizeof(*header):84 [0.624000] mtdsplit_uimage: Buffer too small for checking Edimax header [0.784000] Dedicated partitioner didn't split firmware partition, please fill a bug report! [0.788000] 0x00172108-0x00ff : rootfs [0.796000] mtd: partition rootfs must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only [0.808000] mtd: device 4 (rootfs) set to be root filesystem [0.812000] 1 squashfs-split partitions found on MTD device rootfs [0.82] 0x0034-0x00ff : rootfs_data [1.916000] Realtek RTL8366RB ethernet switch driver version 0.2.4 [1.924000] rtl8366rb rtl8366rb: using GPIO pins 491 (SDA) and 493 (SCK) [1.928000] rtl8366rb rtl8366rb: RTL5937 ver. 3 chip found On 12/02/2015 12:47, Rafał Miłecki wrote: --- John can you give it a try, please? --- .../generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c | 15 ++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c index 2bb5e9a..4abc4be 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c @@ -20,6 +20,8 @@ #include mtdsplit.h +static int first_try = 1; + /* * uimage_header itself is only 64B, but it may be prepended with another data. * Currently the biggest size is for Edimax devices: 20B + 64B @@ -60,6 +62,8 @@ read_uimage_header(struct mtd_info *mtd, size_t offset, u_char *buf, size_t retlen; int ret; + if (first_try) + pr_info([%s] buf:%p header_len:%zu\n, __FUNCTION__, buf, header_len); ret = mtd_read(mtd, offset, header_len, retlen, buf); if (ret) { pr_debug(read error in \%s\\n, mtd-name); @@ -106,11 +110,15 @@ static int __mtdsplit_parse_uimage(struct mtd_info *master, ret = -ENOMEM; goto err_free_parts; } + if (first_try) + pr_info([%s] buf:%p sizeof(*buf):%u\n, __FUNCTION__, buf, sizeof(*buf)); /* find uImage on erase block boundaries */ for (offset = 0; offset master-size; offset += master-erasesize) { struct uimage_header *header; + if (first_try) + pr_info([%s] sizeof(*header):%u\n, __FUNCTION__, sizeof(*header)); uimage_size = 0; ret = read_uimage_header(master, offset, buf, sizeof(*buf)); @@ -308,8 +316,13 @@ static ssize_t uimage_find_edimax(u_char *buf, size_t len) { struct uimage_header *header; + if (first_try) + pr_info([%s] buf:%p len:%zu FW_EDIMAX_OFFSET + sizeof(*header):%u\n, __FUNCTION__, buf, len, FW_EDIMAX_OFFSET + sizeof(*header)); + if (len FW_EDIMAX_OFFSET + sizeof(*header)) { - pr_err(Buffer too small for checking Edimax header\n); + if (first_try) + pr_err(Buffer too small for checking Edimax header\n); + first_try = 0; return -ENOSPC; } ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Re: [OpenWrt-Devel] [PATCH RFT] kernel: mtdsplit_uimage: debug buf/header sizes
On 12/02/2015 21:18, Rafał Miłecki wrote: On 12 February 2015 at 21:04, John Crispin blo...@openwrt.org wrote: [0.564000] Creating 4 MTD partitions on spi32766.0: [0.568000] 0x-0x0001 : uboot [0.572000] 0x0001-0x0002 : uboot-env [0.58] 0x0002-0x0003 : calibration [0.584000] 0x0005-0x00ff : firmware [0.596000] mtdsplit_uimage: [__mtdsplit_parse_uimage] buf:c0049000 sizeof(*buf):1 [0.60] mtdsplit_uimage: [__mtdsplit_parse_uimage] sizeof(*header):64 [0.608000] mtdsplit_uimage: [read_uimage_header] buf:c0049000 header_len:1 [0.616000] mtdsplit_uimage: [uimage_find_edimax] buf:c0049000 len:1 FW_EDIMAX_OFFSET + sizeof(*header):84 [0.624000] mtdsplit_uimage: Buffer too small for checking Edimax header [0.784000] Dedicated partitioner didn't split firmware partition, please fill a bug report! [0.788000] 0x00172108-0x00ff : rootfs [0.796000] mtd: partition rootfs must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only [0.808000] mtd: device 4 (rootfs) set to be root filesystem [0.812000] 1 squashfs-split partitions found on MTD device rootfs [0.82] 0x0034-0x00ff : rootfs_data [1.916000] Realtek RTL8366RB ethernet switch driver version 0.2.4 [1.924000] rtl8366rb rtl8366rb: using GPIO pins 491 (SDA) and 493 (SCK) [1.928000] rtl8366rb rtl8366rb: RTL5937 ver. 3 chip found Thank you! My obvious bug was fixed in https://dev.openwrt.org/changeset/44424/ they tend to be the hardest to find ;) Please note that if you still get Dedicated partitioner didn't split firmware partition, please fill a bug report! with 44424, it means that there is something wrong in target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c and we/you should look for a working reference code in 405-mtd-old-firmware-uimage-splitter.patch ___ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel