
On 12/17/2012 02:32:48 AM, Vipin Kumar wrote:
This patch adds support to list images in NAND flash through imls
Signed-off-by: Vipin Kumar vipin.kumar@st.com
Changes in v4
- Keep stdout dumps in one line
- Continue even after read errors for all the blocks
README | 3 +- common/cmd_bootm.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 166 insertions(+), 4 deletions(-)
diff --git a/README b/README index 2077c3b..46fd21d 100644 --- a/README +++ b/README @@ -831,7 +831,8 @@ The following options need to be configured: CONFIG_CMD_I2C * I2C serial bus support CONFIG_CMD_IDE * IDE harddisk support CONFIG_CMD_IMI iminfo
CONFIG_CMD_IMLS List all found images
CONFIG_CMD_IMLS List all images found in NOR
flash
CONFIG_CMD_IMLS_NAND List all images found in NAND
flash CONFIG_CMD_IMMAP * IMMR dump support CONFIG_CMD_IMPORTENV * import an environment CONFIG_CMD_INI * import data from an ini file into the env diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index d256ddf..938e500 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -80,9 +80,15 @@ static int image_info(unsigned long addr); #include <flash.h> #include <mtd/cfi_flash.h> extern flash_info_t flash_info[]; /* info for FLASH chips */ +#endif
+#if defined(CONFIG_CMD_IMLS) || defined(CONFIG_CMD_IMLS_NAND) static int do_imls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); #endif
+#include <linux/err.h> +#include <nand.h>
#ifdef CONFIG_SILENT_CONSOLE static void fixup_silent_linux(void); #endif @@ -1175,7 +1181,7 @@ U_BOOT_CMD( /* imls - list all images found in flash */ /*******************************************************************/ #if defined(CONFIG_CMD_IMLS) -static int do_imls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_imls_nor(void) { flash_info_t *info; int i, j; @@ -1224,6 +1230,161 @@ next_sector: ; } next_bank: ; }
- return 0;
+} +#endif
+#if defined(CONFIG_CMD_IMLS_NAND) +static int nand_imls_legacyimage(nand_info_t *nand, int nand_dev, loff_t off,
size_t len)
+{
- void *imgdata;
- int ret;
- imgdata = malloc(len);
- if (!imgdata) {
printf("May be a Legacy Image at NAND device %d offset
%08llX:\n",
nand_dev, off);
printf(" Low memory(cannot allocate memory for
image)\n");
return -ENOMEM;
- }
So, it looks like any reasonably-sized kernel image is going to hit this out-of-memory condition given how unreasonably small U-Boot malloc heaps generally are.
As a side note, running this showed U-Boot itself as "may be a legacy image"... it seems that for some reason all the ppc arches start with the uImage header, but otherwise aren't valid uImages.
-Scott