以下的部分软件可以存储和从NAND启动/运行:
X-Loader U-Boot (+ environment/configuration data) Linux kernel Linux file system这些软件在beagleboard上的存储分配如下:
-------------------------------------0x00000000-0x00080000 : "X-Loader"0x00080000-0x00260000 : "U-Boot"0x00260000-0x00280000 : "U-Boot Env"0x00280000-0x00680000 : "Kernel"
0x00680000-0x10000000 : "File System"
-------------------------------------为了能够写东西到nandflash,首先你需要从其他源,如MMC/SD卡启动。此外,你需要把那些从MMC/SD卡启动的文件(MLO & U-Boot),写进MMC/SD卡得第一个分区。然后你可以在那里读取到这些文件和写入到NAND。
X-Loader编译x-loader。放到MMC/SD卡的FAT分区,然后开始从存储卡中的引导和使用下面的命令写x-loader到NAND:
-------------------------------------mmc init
fatload mmc 0:1 80000000 x-load_revc_v3.bin.ift
nand unlock
nandecc hw
nand erase 0 80000
nand write 80000000 0 80000
------------------------------------------
注:命令nandecc hw 在这里是必须的。x-loader是OMAP引导ROM的第一段程序。在读NAND的时候,使用命令nandecc hw 。所以,在写NAND时,同样使用使用命令nandecc hw 。如果你使用nandecc hw 将不能从NAND 引导ROM。
U-Boot编译U-Boot。放到MMC/SD卡的FAT分区,然后开始从存储卡中的引导和使用下面的命令写U-Boot到NAND:
-------------------------------------mmc init
fatload mmc 0:1 80000000 u-boot.bin
nand unlock
nandecc sw
nand erase 80000 160000
nand write 80000000 80000 160000
-------------------------------------注意:你可以使用引导MMC/SD卡启动的u-boot.bin来引导NAND启动。他们之间没有区别。
注意:这儿,你不需要nandecc hw选项。X-loader用于加载和引导u-boot,能够识别u-boot写入的SW ECC。
Kernel相比于只能通过u-boot写入NAND的x-loader和u-boot,这里有两种方法将kernel和file system写入NAND:通过u-boot(与上面的x-loader和u-boot相似) 或者从运行中的内核(比如,从MMC卡引导)。
注意:x-loader和u-boot不能从运行中得内核中写入,因为从内核的角度, x-loader和u-boot的NAND分区是标记为只读的。
Writing kernel with U-Boot-------------------------------------mmc init
fatload mmc 0:1 80000000 uImage
nandecc sw
nand erase 280000 400000
nand write 80000000 280000 400000
-------------------------------------当做了上述工作之后,使用U-Boot命令从NAND引导kernel (uImage):
nand read 80000000 280000 400000 ; bootm 80000000
这里,你可以保存U-Boot命令,这样你的板子就可以自动的从NAND引导uImage。
Writing kernel with kernel当你有一个内核启动了,比如:从MMC卡。你可以使用该内核去写自己的kernel (uImage)去NAND。然后从MMC卡启;动切换到NAND卡启动。对于这一点,观察内核的引导信息。这些应该是这样的:-------------------------------------omap2-nand driver initializingNAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 1,8V 16-bit)cmdlinepart partition parsing not availableCreating 5 MTD partitions on "omap2-nand":0x00000000-0x00080000 : "X-Loader"0x00080000-0x00260000 : "U-Boot"0x00260000-0x00280000 : "U-Boot Env"0x00280000-0x00680000 : "Kernel"0x00680000-0x10000000 : "File System"-------------------------------------在内核的提示命令 cat /proc/mtd 下会给出类似的输出信息:
-------------------------------------root@beagleboard:~# cat /proc/mtddev: size erasesize namemtd0: 00080000 00020000 "X-Loader"mtd1: 001e0000 00020000 "U-Boot"mtd2: 00020000 00020000 "U-Boot Env"mtd3: 00400000 00020000 "Kernel"mtd4: 0f980000 00020000 "File System"-------------------------------------虽然前三个分区(x-loader,u-boot和u-boot Env),从内核的角度查看是只读的。但是kernel和file system 分区对于内核本身来说是可写的。要做到这一点,你需要有MTD用户模块在你的内核根文件系统里。
在这个例子中,我们挂在MMC卡得FAT分区去读kernel(uImage)。如果你的内核有网络连接,你可以使用此。或者把uImage放在你的根文件系统。这样做的目的是能够从正在运行的内核中将uImage写入到NAND。
-------------------------------------root@beagleboard:~# mkdir -p /mnt/fatroot@beagleboard:~# mount /dev/mmcblk0p1 /mnt/fat/root@beagleboard:~# ls -la /mnt/fat-rwxr-xr-x 1 root root 16740 Jul 7 17:28 mlo-rwxr-xr-x 1 root root 717116 Jul 24 2008 u-boot.bin-rwxr-xr-x 1 root root 2106940 Jul 26 2008 uImageroot@beagleboard:~# cp /mnt/fat/uImage .root@beagleboard:~# ls -la-rwxr-xr-x 1 root root 2106940 Jul 22 00:30 uImageroot@beagleboard:~# flash_eraseall /dev/mtd3Erasing 128 Kibyte @ 3e0000 -- 96 % complete.root@beagleboard:~# nandwrite -p /dev/mtd3 uImageWriting data to block 0 at offset 0x0<...>Writing data to block 20 at offset 0x280000root@beagleboard:~#------------------------------------- File system