[U-Boot] Booting kernel from NAND flash on AT91SAM9 custom board using fsload
Nicholas Kinar
n.kinar at usask.ca
Tue Mar 29 22:35:26 CEST 2011
On 29/03/2011 11:56 AM, Scott Wood wrote:
> On Tue, 29 Mar 2011 11:37:25 -0600
> Nicholas Kinar<n.kinar at usask.ca> wrote:
>
>> On 29/03/2011 10:14 AM, Nicholas Kinar wrote:
>>> Also as instructed in the README.NAND, README.JFFS2 and
>>> README.JFFS2_NAND files found in the /doc/ directory, I've tried
>>> defining the following in my
>>> /include/configs/at91sam9rlek.h configuration file:
>>>
>>> #define CONFIG_JFFS2_NAND 1
>>> #define CONFIG_CMD_JFFS2
>>> #define CONFIG_SYS_MAX_FLASH_BANKS 1
>>> #define CONFIG_CMD_NAND 1
>>>
>> I've now added the following #undef to the list of defines above:
>>
>> #undef CONFIG_CMD_FLASH
>>
>> Now after typing "help" at the U-Boot command line, I can finally see
>> the fsload command listed. However running fsload gives the following
>> error:
>>
>> U-Boot> fsload
>> support for FLASH devices not present
>> incorrect device: nor0
>>
>> This appears to be due to some code in the /common/cmd_jffs2.c file.
>> Can fsload be only used for NOR memory, or is there a way to use it for
>> NAND flash as well?
> "support for FLASH devices not present" is printed when it's trying to act
> on a device labelled as NOR, but there's no NOR support present.
>
> Try the "chpart" command to switch to a NAND device, and/or make sure that
> your mtdparts variable is set correctly.
>
> -Scott
>
Thank you very much for your response, Scott; this is greatly
appreciated! To compile in support for the "chpart" command, I've now
added the following to my
/include/configs/at91sam9rlek.h file:
#define CFG_NAND_BOOT
#define CONFIG_JFFS2_NAND 1
#define CONFIG_JFFS2_CMDLINE
#define CONFIG_CMD_JFFS2
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define MTDIDS_DEFAULT "nand0=nand_flash"
#define MTDPARTS_DEFAULT "mtdparts=nand_flash:-(jffs2)"
#define CONFIG_SYS_MAX_FLASH_BANKS 1
#undef CONFIG_CMD_FLASH
U-boot compiles cleanly, but I find that after U-Boot loads on my
embedded hardware, the "mtdids" and "mtdparts" variables are not set in
the U-Boot environment. However, since these are environment variables,
I find that this can be done at the U-Boot command line:
U-Boot> nand info
Device 0: nand0, sector size 256 KiB
U-Boot> setenv mtdids nand0=nand_flash
U-Boot> setenv mtdparts mtdparts=nand_flash:-(jffs2)
U-Boot> chpart nand0,0
partition changed to nand0,0
U-Boot> ls
Scanning JFFS2 FS: ls: Failed to scan JFFSv2 file structure
U-Boot> fsload
### JFFS2 loading 'uImage' to 0x22000000
Scanning JFFS2 FS: load: Failed to scan JFFSv2 file structure
### JFFS2 LOAD ERROR<0> for uImage!
Of course, fsload cannot load the uImage, since I am working with a
blank flash and there is no image pre-loaded on the flash. Using the
"saveenv" command, I intend to save these environment variables.
Continuing on, I will load an image on the blank flash, and then I will
try to load the Linux kernel. I will then post my results on this
mailing list as a response.
I have two additional questions associated with booting the kernel from
NAND flash on my custom hardware:
(1) Does replacing jffs2_1pass.c with jffs2_nand_1pass.c in the fs/jffs2
directory influence the robustness of the fsload code?
(2) Does it take a long time to load the Linux kernel from a JFFS2
filesystem on NAND flash using the fsload command (i.e.
http://old.nabble.com/Performance-in-Booting-Linux-w--Device-Tree-via-U-Boot-out-of-JFFS2-on-NAND-td15879327.html),
or has this been cleaned up in the current u-boot-2010.09 code?
Nicholas
More information about the U-Boot
mailing list