製作jffs2根檔案系統,分割槽資訊錯誤的問題

2021-08-07 12:14:12 字數 1272 閱讀 8134

在做jffs2根檔案系統燒錄之後,執行時串列埠列印錯誤資訊。

在做這個根檔案系統的過程中,要弄懂三點,

第一,jffs2檔案系統需要有引數進行填充。

第二,在燒錄檔案系統的過程中nand erase, nand write為什麼要在16m的位置開始燒錄。

第三,bootargs傳參是怎麼知道核心啟動根檔案系統的。

首先遇到的問題是,分割槽大小設定與燒錄位址不匹配。

bootargs 傳遞的jffs2根檔案系統是存放在root=/dev/mtdblock(?) 分割槽上,我在所要燒錄的分割槽設定過小,檔案系統溢位,所以列印錯誤資訊,無法啟動。   

在重新設定分割槽之後,解決部分問題。

設定bootargs傳參的指令為  set bootargs  'root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttys0,115200'(rootfstype指明所要啟動的檔案系統型別)

重新進行分割槽,設定了bootargs傳遞引數後,把分割槽和燒錄檔案匹配的問題解決了。

遇到第二個問題是,jffs2系統填充的問題。

只有jffs2檔案系統,它有乙個特殊性,要進行填充。jffs2僅僅算檔案系統的話只有4m左右,但是要想預留空間必須要對其進行填充,我給檔案系統留的分割槽有40m,因此填充到40m,否則會不停的列印重複的資訊。填充指令如下

mkfs.jffs2 -n -s 2048 -e 128kib -d rootfs -o rootfs.jffs2 --pad=0x1400000

各引數的意義:

(1)-r :指定根檔案系統目錄

.(2)-o : 指定輸出的根檔案系統名

.(3)-s : 指定

flash

每一頁的大小

;(3)-e : 指定

flash

的檫除塊的大小,預設是

64kb.

要注意,不同的flash, 其

page size

和block size

會不一樣

.,如果是

k9f2g08u0m,

在它的datasheet

上有說明

最後的-pad=0x1400000就是填充到的大小(與我所做的情況不符,我的填充大小是40m,因此為0x2800000),如果不填充也無法啟動jffs2檔案系統

第三個問題是,為什麼要在16m的位置開始燒錄。

解決了分割槽重置問題,bootargs傳參燒錄指定分割槽問題,jffs2檔案系統填充問題,最終boot(執行bootcmd程式**)啟動了檔案系統。

製作jffs2根檔案系統

安裝製作工具mkfs.jffs2 sudo apt get install mtd utils 假設根檔案系統檔案在rootfs目錄下,則使用下面命令製作檔案系統imag mkfs.jffs2 r rootfs o rootfs.jffs2 p l n e 0x10000 0x10000 64kb ...

jffs2根檔案系統製作 二

1 我用的編譯器是cross 3.4.1的,所以在busybox的makefile檔案中的編譯器路徑改為 usr local arm 3.4.1 bin arm linux 2 在對busybox配置時為 cross compiler prefix指定值為 usr local arm 3.4.1 b...

製作jffs2檔案系統

今天憋了老半天了,終於把jaffs檔案系統做成功了。之前系統啟動時,一直報錯如下 empty flash at 0x00003ffc ends at 0x00004000 一直報個沒完。後來查了一下,才知道,製作jffs2檔案的時候,指定的檔案大小的引數小了,而jffs檔案大小比他大。系統啟動的時候...