NAND flash 文件系统制作(2)

与内核一样,相比于只能通过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

-------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzpzz.html