nandflash mtd分區

轉自:http://blog.sina.com.cn/s/blog_a2e8f52501016w29.html

http://bbs.chinaunix.net/thread-1956706-1-1.html

part add 命令用於添加一個MTD 分區。
命令的詳細格式如下:
part add name offset size flag
參數name 是要添加的分區的分區名稱;
參 數offset 是要添加的分區的偏移(相對於整個MTD 設備的起始地址的偏移,在ARMer9 系統中不論配置的是NOR Flash,還是NAND Flash,都只註冊了一個mtd_info 結構,也就是說邏輯上只有一個MTD 設備,這個MTD設備的起始地址爲0x00000000);
參數size 是要添加的分區的大小,單位爲字節;
參數flag 是要添加的分區的標誌,參數flag 的取值只能爲以下字符串(請注意必須爲大寫)或者通過連接符“|”將以下字符串組合起來的組合字符串。
這個標誌表示了這個分區的用途
“BONFS” —— 作爲BONFS 文件系統的分區;
“JFFS2” —— 作爲JFFS2 文件系統的分區;
“LOCK” —— 該分區被鎖定了;
“RAM” —— 該分區作爲RAM 使用。
請問:
1.用part命令創建而不管flag如何的都是MTD分區嗎?
2.BONFS代表什麼,RAM又代表什麼,是指對sdram分區還是說這個分區用於存放ramfs?
3.BONFS、JFFS2、LOCK、RAM在這裏分別代表什麼常數?
          bon part 命令用於建立系統的BON 分區表。
BON 分區表被保存到NANDFlash 的最後0x4000 個字節中,即在NAND Flash 的0x03FFC000 ~0x33FFFFFF 範圍內,分區表起始於0x03FFC000(注意: BON 分區是隻針對NAND Flash 設備的一種簡單的分區管理方式)。
命令的詳細格式如下:
bon part offsets1[flag] offsets2[flag] offsets3[flag] ⋯⋯
參數offsetsN 是每個BON 分區的起始地址;
flag 是跟每個BON 分區的起始地址後面的標識符,這個標識的作用是前面數值的單位,‘k’’或‘K’表示kilo,千;‘m’或‘M’表示mega,兆。
如果再跟上‘:’,後面再跟上‘m’或‘M’,表示該分區被標記爲MTD 分區,
如果沒有‘:’以及後面的字母‘m’ 或‘M’,則表示該分區被標記爲BON 分區。
bon part 命令在建立系統的BON 分區表,會檢測每個分區是否有壞塊
(Samsung 的NAND Flash 芯片K9S1208U0M,一個塊含32 個頁,一個頁有512 個字節,一個塊有16K 字節,即0x4000),如果發現壞塊將標記出來,並且在分區表中體現,分區的大小將減去壞快的容量,得到實際可用的分區容量。bon part info 命令執行後顯示的信息中, number_of_badblock所指示的就是分區中的壞塊數目。
那我們總說的mtdblock3指的是MTD分區嗎?那BON分區在什麼時候用到,要不要像MTD分區那樣在內核做相應的配置?
有關vivi分區的問題
[ 2006-11-17 16:37:00 | By: Kision ]

  目標板要更新成2.6的內核,以前板子vivi上的flash分區不合理,kernel分區只有1M的空間,而2.6的核編譯出來一不小心就會超過1M,因此還是研究下vivi的flash分區,增大kernel分區.
  這裏先轉發一下網絡上看到的有關vivi分區問題分析,然後整理出自己的分區過程.
問題:
##################################################################################
您好:
  看了你blog上的一篇文章,我是剛接觸NAND flash分區的問題,所以請教與你.
  flash分區一般分爲5個:
  bootloader,param,kernel,root,usr
  這幾個分區對應應該是mtdblock/0到mtdblock/4對吧?我常見到的bon/x又什麼呢?他和mtdblock有啥關係訥?然後就是這幾個分區對應的文件系統,我一般是在root燒cramfs,前四個分區32M,64Mflash後面的32M還沒用,cramfs是個只讀的,那這個 yaffs又是怎麼回事?網上說的cramfs和yaffs一起使用又是怎麼回事?你說的後面幾個分區以yaffs製作文件系統,怎麼製作啊?
謝謝,我纔開始, 對這些有點迷惑.謝謝你的幫助.
##################################################################################
回答:
##################################################################################
你好,
首先申明我的理解僅限於參考(我也很菜的說,^_^)。
1、>>flash分區一般分爲5個
  這個理解是不對的,至少不完全對。flash想分成幾個區完全由於你自己的需要決定,然後在make menuconfig時間進行配置。
2、>>bootloader,param,kernel,root,usr
  這個和上面的問題有關係,不過個人覺得你的理解還是有點問題。一般來說param不會單獨去佔一個分區(如果你的param是指內核啓動參數的話),這個一般都是在編譯內核時間就已經指定了,會放在內核image的較前位置,內核自解壓的時候檢測到並使用。而root與usr我不知道你的理解是什麼,我的概念裏不需要這樣分,直接將文件系統使用yaffs或者cramfs或者jffs等使用即可,幹嘛區分root和usr呢?一般我們把文件系統部分分到幾個不同的flash分區存放是爲了方便,但是最後使用的時候是感覺不出來的,因爲邏輯上他們都回掛到根分區的某一個目錄上,所以看起來和將所有的東西打成一個包掛在根下是一樣的。舉個例子。
使用三個分區情況:/dev/mtdblock/0   bootloader
                    /dev/mtdblock/1   kernel
                    /dev/mtdblock/2 cramfs   (假設cramfs中有multimedia,guilib, etc,usr, extdata等)
這樣之需要在kernel加載後使用下面的命令(放在初始化腳本linuxrc中)
mount -t yaffs /dev/mtdblock/2 / 即可。
那麼可能我覺得這個cranfs太大,尤其是其中的multimedia和extdata,想把他們分開怎麼辦呢?
使用五個分區:     /dev/mtdblock/0   bootloader
                    /dev/mtdblock/1   kernel
                    /dev/mtdblock/2 yaffspart1(將guilib, etc,usr以及其他一些文件製作成yaffs文件系統)
                    /dev/mtdblock/3 yaffspart2 (將multimedia製作成yaffs文件系統)
                    /dev/mtdblock/4 yaffspart3(將extdata製作成yaffs文件系統)
那麼kernel起來後,需要做這樣的動作(可以放在linuxrc中,也可以放在比較早執行的腳本里面):             mount -t yaffs /dev/mtdblock/2 /
                  mkdir /multimedia
                  mkdir /extdata
                  mount -t yaffs /dev/mtdblock/3 /multimedia
                  mount -t yaffs /dev/mtdblock/4 /extdata
爲此時選擇yaffs而不是cramfs呢?我想你知道答案,因爲cramfs只讀,沒辦法mkdir。當然,其他的可讀寫文件系統比如jffs也是可以的。當然,如果你的/下面老早就有兩個空目錄,multimedia和extdata,那麼根文件系統也就是/dev/mtdblock/2使用 cramfs也是可以的,而multimedia和extdata本身在"/"分區使用cramfs和yaffs時都可以使用任意的其他文件系統,不一定非是yaffs,當然,前提是你得知道你究竟是不是需要在使用時在這裏面進行寫操作。
3、關於bon分區和mtd分區,請參考一種bootloader(vivi)的bon分區功能,它分區時通過是否帶m選項來指定是不是能和mtd分區共存。還有,一個mtd分區可以包含幾個bon分區。
4、如果你不瞭解yaffs,可能需要查找一下資料。簡單點說,他就是一個可讀寫的文件系統,而且具有nand的糾錯功能,在某些方面比較cramfs來說具有優勢。但是他的缺點也很明顯,就是不如cramfs有空間效率,因爲它是不壓縮的(反而會變大),也就是說一個64M的文件夾,如果你mkyaffs,可能得到80M的yaffs文件系統,但是如果使用mkcramfs,可能就是隻有50M了。
yaffs文件系統的製作和cramfs一樣,需要工具,mkyaffs,就如同製作cramfs需要工具mkcramfs一樣。具體在哪裏找,我想你只要google一下就可以了。
5、至於文件系統的共存,其實比較好理解。不僅僅yaffs和cramfs共存,一般還有ramfs和他們共存,這樣就能在使用cramfs的文件系統中提供一個可讀寫的文件系統,適合用在調試階段。方法很簡單,回顧一下2裏面使用5個分區的情況就知道了。
以上是我個人的一點點理解和建議,肯定有不正確的地方,如果你發現什麼錯誤了,請指出來告訴我。謝謝。
changejoy
##################################################################################
很感謝上面這位網友的一番分析和講解,解答了我的某些困惑的地方.
通過多次實驗,以下爲自己具體的分區過程:
1. 如果首先板子上沒有燒進去vivi,則可以通過JTAG口以及jflash燒寫工具軟件把vivi燒進目標板上,當然有的開發板也可以在ADS1.2的環境用JTAG仿真器(如Multi-ICE),通過某個燒寫程序把vivi燒進目標板,這裏具體第一次怎麼把vivi燒寫進去就不再多述了.
2.當把vivi燒進去後,可以通過輸入part show查看MTD分區情況,這個分區表應該和後面kernel中的MTD分區保持一致,我的2.6內核源碼中修改後的MTD分區表爲:
0x00000000-0x00020000 : "boot"
0x00020000-0x00030000 : "param"
0x00030000-0x001f0000 : "kernel"
0x00200000-0x00400000 : "root"
0x00400000-0x04000000 : "user"
那麼這裏,我們應該將通過修改vivi的源碼把MTD分區表修改成一樣,修改/vivi/arch/s3c2410/smdk.c文件(根據版本會不同):
將裏面的
#ifdef CONFIG_S3C2410_NAND_BOOT
mtd_partition_t default_mtd_partitions[] = {
{
  name:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章