執行個體分析-在FLASH上構造JFFS2檔案系統

來源:互聯網
上載者:User

 我在製作JFFS2過程中參考了下面這個例子,
問題在:
root@172.16.115.7:/# 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即可以即可以。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.