1. 程式人生 > >ARM平臺建立JFFS2根檔案系統

ARM平臺建立JFFS2根檔案系統

開發板:TQ2440

核心版本:2.6.32

Nand flash:K9F2G08U0A

本文將對JFFS2檔案系統的編譯和燒寫做簡單記錄,本文的內容建立在如下三個基礎上:

1.  完成使用Busybox編譯出所需要的工具。

2.  完成新增根檔案系統所需的目錄和配置檔案。

3.  開發平臺上有mkfs.jffs2工具(ubuntu自帶該工具)

第一步:配置核心

選擇JFFS2檔案系統:


禁止ECC功能,根據參考資料2,JFFS2會採用自己的ECC演算法,因此無需開啟硬體ECC功能。


第二步:編譯檔案系統

使用如下命令:

mkfs.jffs2  -s 0x800 -e 0x20000 --pad=0x800000 -l -n -d ./myrootfs -o jffs2.bin

其中,

  -s 和 -e 分別為nand flash的頁大小和塊大小,開發板所使用的nandflash為K9F2G08U0A。

  檢視手冊可知其大小,


  頁大小=0x800 = 2048Byte = 2KB,

  塊大小=0x20000=131072Byte = 128KB。

  -l 表示使用小端模式..

  -n 表示不實用cleanmarkers,如果不新增該引數會有如下類似的警告:

  CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0

  --pad 用於填充空白區,填充內容為0XFF,如果產生的檔案小於0x800000,將填滿至0x800000。也可以直接使用-p引數。

  -d 表示檔案系統所在的位置。

  -o 表示生成的目標檔案的名字。

執行上述命令後,我們將得到編譯好的JFFS2根檔案系統。

第三步:修改Uboot的核心命令列

此步的目的是告訴核心根檔案系統的型別為jffs2。

setenv bootargs noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc rootfstype=jffs2 

第四步: 燒寫JFFS2檔案系統至nand flash 中

首先,看下我的分割槽表:

[root@yj423 /root]#cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00800000 00020000 "mtdram test device"
mtd1: 00040000 00020000 "Uboot"
mtd2: 00300000 00020000 "Kernel"
mtd3: 0fb00000 00020000 "filesystem"
[root@yj423 /root]#cat /proc/partitions
major minor  #blocks  name

  31        0       8192 mtdblock0
  31        1        256 mtdblock1
  31        2       3072 mtdblock2
  31        3     257024 mtdblock3

mtdblock3 為檔案系統所在的分割槽,起始地址為0x500000,長度為0xfb00000。

所以第三步的root引數為mtdblock3,請留意!

開始燒寫,請注意燒寫的起始地址和長度。

tftp 0x31000000 jffs2.bin
nand erase 0x500000 0x0FB00000
nand write.jffs2 0x31000000 0x500000 0x800000

0x500000 為mtdblock3分割槽的起始地址,0x800000為jffs2.bin的檔案大小,該值在tftp傳送成功時會顯示出來。

最後,來看下核心成功掛載JFFS2檔案系統時的輸出

......

VFS: Mounted root (jffs2 filesystem) on device 31:3.
Freeing init memory: 156K
eth0: link down
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[root@yj423 /root]#

PS: 如果掛載根檔案系統後有各種各樣報錯請閱讀參考資料2和3.

參考資料:

1. http://www.eetop.cn/blog/html/98/510998-20964.html

2. http://hi.baidu.com/rinehart/item/e1e885111f2415f89c778a3e

3. http://blog.csdn.net/hens007/article/details/7312550