NAND flash (SBC-i.MX51)

Aus BECOM Systems Support
Zur Navigation springen Zur Suche springen

The SBC-i.MX51 provides 2 GiB of NAND flash.

Linux kernel configuration

System Type  --->
  Freescale MXC Implementations  --->
    MX51 Options  --->
      [*] MXC NFC Hardware Version 3
      [*]   MXC NFC Hardware Version 3.2
Device Drivers  --->
  <*> Memory Technology Device (MTD) support  --->
    [*]   MTD partitioning support
    [*]     Command line partition table parsing
    <*>   Direct char device access to MTD devices
    -*-   Common interface to block layer for MTD 'translation layers'
    <*>   Caching block device access to MTD devices
    <*>   NAND Device Support  --->
      <*>   MXC NAND Version 3 support

Setting partitions on NAND flash

The default partitions on the NAND flash are as follows:

Name Size Offset
bootloader 0x300000 (3 MiB) 0x0
nand.kernel 0x500000 (5 MiB) 0x300000
nand.rootfs 0x40000000 (1 GiB) 0x800000
nand.userfs1 0x3E800000 (1000 MiB) 0x40800000

To customize this layout, follow the instructions below.

  • Open the file
btmxc-linux/arch/arm/mach-mx5/mx51_3stack.c

(Linux 2.6.31) or

btmxc-linux/arch/arm/mach-mx51/mx51_i.fly.c

(Linux 2.6.28) respectively.

  • Search for the following struct and edit it according to your wishes.
    NOTE: Leave at least 2 MiB (0x200000) bytes unassigned at the end of the flash. This is the location where the bad block table (BBT) and its copy are usually stored by Linux and Redboot.
static struct mtd_partition nand_flash_partitions[] = {
	{
		.name = "bootloader",
		.offset = 0,
		.size = 3 * 1024 * 1024,
	},
	{
		.name = "nand.kernel",
		.offset = MTDPART_OFS_APPEND,
		.size = 5 * 1024 * 1024,
	},
	{
		.name = "nand.rootfs",
		.offset = MTDPART_OFS_APPEND,
		.size = 1024 * 1024 * 1024,
	},
	{
		.name = "nand.userfs1",
		.offset = MTDPART_OFS_APPEND,
		.size = 1000 * 1024 * 1024,
	},
};

Test in Linux

We will copy some test file to the 4th partition (nand.userfs1).

  • Use some test file (e.g. 32 MiB large) and copy it to the SBC. "/randomfile" is assumed from now on.
  • Have a look at the available partitions:
cat /proc/mtd
cat /proc/partitions
  • Create a jffs2 file system by deleting the contents and simply mounting it:
mkdir /mnt/nanduserfs
flash_eraseall /dev/mtd3
mount -t jffs2 /dev/mtdblock3 /mnt/nanduserfs
  • Copy the file to this partition 10 times:
for i in `seq 1 10` ; do cp /randomfile /mnt/nanduserfs/file${i} ; done
  • Check files:
for i in `seq 1 10` ; do diff /randomfile /mnt/nanduserfs/file${i} ; done

Diff must not output anything, which means the files are all identical.

Boot from NAND flash (default)

The NAND boot mode and the NAND setup procedure are described on the Boot media page.