實例分析-在FLASH上構造JFFS2文件系統

我在製作JFFS2過程中參考了下面這個例子,
問題在:
[email protected]:/# cp jffs2.image /dev/mtdblock2
cp: writing `/dev/mtdblock2': No space left on device
怎麼創建MTDBLOCK2??

4.7.3 實例分析-在FLASH上構造JFFS2文件系統
最後,我以一個實際的例子來敘述一下如何在FLASH構造一個JFFS2文件系統。
由於在我的目標系統FLASH太小,只有2M,而且還要去掉將近1M空間用於存放U-BOOT、
內核映象,所以沒有用建立的JFFS2文件系統作爲根文件系統,只是介紹了在FLASH上製作一個文件系統的過程。
我把FLASH 2M的空間分爲了3個區,分區的實現在linux根目錄下/drivers/mtd/maps/目錄下,我對TQM8xxL(tqm8xxl.c)的分區做了改動,作爲我的分區,實際只要修改代碼中的結構體tqm8xxl_partitions[]即可以:
static struct mtd_partition tqm8xxl_partitions[] = {
{
name: “u-boot”,
offset: 0x0000000,
size: 0x00020000,
},
{
name: “kernel”,
offset: 0x00020000,
size: 0x000a0000,
},
{
name: “jffs2”,
offset: 0x000c0000,
size: 0x00140000,
}
}
很簡單,第一行是你partition的名字,第二行是在FLASH中的偏移量,第三行是partition的大小。緊隨其後的還有一個結構體:
static struct mtd_partition tqm8xxl_fs_partitions[]{}是用於linux2.4.x以前版本的,在linux2.4.x版本中不用,我將它屏蔽掉了。
源文件中要改的就這麼多,然後重新編譯內核:
#make menuconfig
打開內核選項:
選擇<*>Memory Technology Device(MTD) support 記着選擇爲“built-in”而不是“module”(前面的選項爲“*”而不是“M”)
選擇<*>Mtd partitioning support MTD分區支持
選擇<*>Caching block device access to MTD devices 支持MTD 作爲BLOCK設備訪問
進入【RAM/ROM/FLASH chip drivers- 】選項選擇加載FLASH的驅動
選擇<*> Detect flash chips by Common Flash Interface (CFI) probe
自動探測CFI接口的FLASH設備
選擇<*> Support for AMD/Fujistu flash chips 選擇對AMD/Fujistu FLASH設備選擇<*> Support for ROM chips in bus mapping 支持ROM設備總線MAP
其它選項不選,退回到上一級。
進入【Mapping drivers for chip access- 】選項
選擇<*> CFI Flash device mapped on TQM8xxL 支持TQM8xxL的FLASH分區
其它選項都不用選中。
編譯內核:
#make dep
#make pImage
生成內核映象文件在arch/ppc/mbxboot/目錄下,重新引導內核,進入linux系統,運行命令:
#more /proc/mtd查看
dev: size erasesize name
mtd0: 00020000 00010000 "ppcboot"
mtd1: 000a0000 00010000 "kernel"
mtd2: 00140000 00010000 "jffs2"
這裏顯示的mtd0-2是FLASH分區後模擬的三個設備,是字符型的設備,我們後面用的mtdblock0-2是對應三個partitions的block設備。
此時用的是NFS文件系統,退到根目錄,運行:
#mkfs.jffs2 –d filesystem –o jffs2.image
製作jffs2文件系統,filesystem是我製作的一個很小的包含幾個文件的目錄,生成的jffs2文件系統文件爲jffs2.image。在/mnt/下建立目錄jffs2:
#mkdir /mnt/jffs2
將jffs2文件系統拷貝到FLASH:
#cp jffs2.image /dev/mtdblock2
掛接flash設備到/mnt/jffs2
#mount /dev/mtdblock2 /mnt/jffs2 –t jffs2
ffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc000: 0xe6a7 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc004: 0x626f id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc008: 0x636d id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc00c: 0x626f id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc010: 0x6d20 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc014: 0x3030 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc018: 0x3000 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc01c: 0x7564 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc020: 0x7465 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc024: 0x3932 id
Further such events for this erase block will not be printed
JFFS2: Erase block at 0x001d0000 is not formatted. It will be erased
不知這些信息是否不正確,正在查詢這個問題。
查看jffs2文件系統:
sh-2.05a# cd /mnt/jffs2
sh-2.05a# ls
app bin dev etc home lib mnt proc root sbin tmp usr var
sh-2.05a#
OK!製作的文件系統都在裏面了,就這麼簡單。如果你將一個完整的文件系統拷貝到FLASH,然後想用它作爲根文件系統,可以在U-BOOT啓動時設置啓動參數:
#setenv bootargs root=/dev/mtdblock2然後保存參數並重新引導U-BOOT即可以即可以。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章