与内核一样,相比于只能通过u-boot写入NAND的x-loader和u-boot,这里有两种方法将file system写入NAND:通过u-boot(与上面的x-loader和u-boot相似) 或者 从运行中的内核(比如,从MMC卡引导)。很多用户反映,他们在用u-boot写根文件系统时遇到了问题。主要的问题是,u-boot必须格式化内核去写file system。如果有轻微的不兼容,内核将不能读取到被u-boot写入的文件系统。
所以,我们在这里记录了如何去用u-boot写入文件系统。推荐的方法是通过内核本身去写根文件系统。有了这个,可以确保用内核写入一个文件系统,稍后能够读取到。
Writing file system with U-Boot该方法不推荐,原因见上。
-------------------------------------OMAP3 beagleboard.org # mmc initOMAP3 beagleboard.org # fatload mmc 0:1 80000000 rootfs.jffs2reading rootfs.jffs212976128 bytes readOMAP3 beagleboard.org # nand unlockdevice 0 whole chipnand_unlock: start: 00000000, length: 268435456!NAND flash successfully unlockedOMAP3 beagleboard.org # nandecc swOMAP3 beagleboard.org # nand erase 680000 F980000NAND erase: device 0 offset 0x680000, size 0xf980000Erasing at 0xffe0000 -- 100% complete.OKOMAP3 beagleboard.org # nand write.jffs2 80000000 680000 ${file_size}NAND write: device 0 offset 0x680000, size 0xc60000Writing data at 0x12df800 -- 100% complete. 12976128 bytes written: OK------------------------------------- Writing file system with kernel推荐该方法。
首先,我们用SD卡上的根文件系统启动内核。在正在运行的内核中,用SD卡上的文件系统映像把根文件系统写入到Beagle的NAND上去。在这些做完之后,我们切换内核的启动参数去从NAND上执行根文件系统来替代SD卡得根文件系统。
然后,为了能够从内核的用户空间去操纵/擦除/写NAND,我们需要MTD Utils。如果你没有这个工具,你可以通过该方法获取:opkg install mtd-utils对于在Beagle’s NAND 中的文件系统,我们使用JFFS2。JFFS2是标准的git内核的一部分,只需要配置内核使能JFFS2。使用make menuconfig检查是否已启用。
-------------------------------------CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
-------------------------------------在内核支持JFFS2和MTD Utils后,我们先擦除文件系统分区并在该分区中创建JFFS2。
-------------------------------------root@beagleboard:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "X-Loader"
mtd1: 001e0000 00020000 "U-Boot"
mtd2: 00020000 00020000 "U-Boot Env"
mtd3: 00400000 00020000 "Kernel"
mtd4: 0f980000 00020000 "File System"
root@beagleboard:~# flash_eraseall -j /dev/mtd4
Erasing 128 Kibyte @ f960000 -- 99 % complete. Cleanmarker written at f960000.
-------------------------------------然后,我们可以挂载文件系统分区:
-------------------------------------root@beagleboard:~# cd /mnt
root@beagleboard:~# mkdir nand
root@beagleboard:~# mount -t jffs2 /dev/mtdblock4 /mnt/nand
-------------------------------------并提取到他的根文件系统映像:
-------------------------------------root@beagleboard:~# cd nand
root@beagleboard:~# tar xfz <where_ever_your_root_fs_image_is_at_sd_card>/rootfs.tar.gz .
... wait ...
root@beagleboard:~# cd ..
root@beagleboard:~# sync
root@beagleboard:~# umount nand
-------------------------------------现在,你应该重启你的主板并在u-boot中编辑启动参数去配置在NAND中的根文件系统。
-------------------------------------root=/dev/mtdblock4 rootfstype=jffs2
-------------------------------------