前段時間忙着找工作。項目的事情又拖了好一陣子,今天正好趁着ZTE面試的間隙把掛載JFFS2可寫文件系統的事情解決一下,其實挺快的,半天時間理清了思路,實踐成功了呵呵
具體步驟如下:
1.內核配置:根據官網上面的兩篇帖子
http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:mtd
http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:jffs
Device Drivers --->
Memory Technology Devices (MTD) --->
<*> Memory Technology Device (MTD) support
[*] Direct char device access to MTD devices
[*] Caching block device access to MTD devices
RAM/ROM/Flash chip drivers --->
<*> Detect flash chips by Common Flash Interface (CFI) probe
<*> Support for Intel/Sharp flash chips
<*> Support for RAM chips in bus mapping
<*> Support for ROM chips in bus mapping
Mapping drivers for chip access --->
<*> CFI Flash device in physical memory map
(the address/length options are ignored)
File systems --->
Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support
(sub-options are up to you)
以上4個子步驟完成了內核對MTD配置以及JFSS2支持的配置
2.user下面的MTD utils配置
Flash Tools --->
[*] mtd-utils
[*] erase
[*] eraseall
[*] mkfs.jff2
3.修改uClinux-dist-2008R1-RC8/linux-2.6.x/arch/blackfin/mach-bf561/boards中對應的板子初始化文件efevm.c
相應的mtd劃分改爲
static struct mtd_partition ezkit_partitions[] = {
{
.name = "Bootloader",/*uboot 256KB*/
.size = 0x40000,
.offset = 0,
}, {
.name = "Kernel",/*kernel 896KB*/
.size = 0xE0000,
.offset = MTDPART_OFS_APPEND,
}, {
.name = "RootFS",/*rootfs 6MB*/
.size = 0x600000,
.offset = MTDPART_OFS_APPEND,
}, {
.name = "jffs2-njupt",/*jffs2 896KB*/
.size = MTDPART_SIZ_FULL,
.offset = MTDPART_OFS_APPEND,
}
};
4.make生成內核加文件系統的鏡像
5.uboot載入剛編譯完的內核加文件系統
root:/> cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00020000 "bootloader"
mtd1: 000E0000 00020000 "kernel"
mtd2: 00600000 00020000 "romfs"
mtd3: 000e0000 00020000 "jffs2-njupt"
NOR FLASH分了4塊,對應mtd0至mtd3
root:/> eraseall /dev/mtd3 擦除相應的存放jffs2文件系統的塊
root:~> mount -t jffs2 /dev/mtdblock3 /mnt/ 把該塊以jffs2格式掛載到mnt下
這樣在mnt目錄下面就能執行任何寫操作了。
6.掉電重啓,需要重新執行一遍mount -t jffs2 /dev/mtdblock3 /mnt/
把mtd3掛載到mnt下,可以發現原先創建的文件沒有丟失!!可以把mount的部分加載到rc中,這樣每次自啓動的時候直接把mtd3掛載到mnt下面了
至此,NOR FLASH開闢空間完成JFFS2格式寫保存的工作全部完成。:)