最近在uboot下移植yaffs檔案系統,基本實現了所有功能,就是還不能和kernel下的yaffs檔案系統相互訪問,懷疑是起始塊位址設定錯誤,經過測試已經排除,另乙個方面有可能是yaffs的校驗問題,發現kernel下使用的是nand ecc校驗,uboot下使用nand ecc校驗會出現很多報錯,所以打算修改kernel下的校驗方式,再將kernel下支援的yaffs改為yaffs試試,如果還不能解決,oh,my god!,我只能求助了。
在uboot下測試yaffs的時候出現了很多假壞塊,所以順便找了篇文章:
1.為什麼會出現壞塊
由於nand flash的工藝不能保證nand的memory array在其生命週期中保持效能的可靠,因此,在nand的生產中及使用過程中會產生壞塊。壞塊的特性是:當程式設計/擦除這個塊時,不能將某些位拉高,這會造成page program和block erase操作時的錯誤,相應地反映到status register的相應位。
2.壞塊的分類
總體上,壞塊可以分為兩大類
(1) 固有壞塊
這是生產過程中產生的壞塊,一般晶元原廠都會在出廠時都會將壞塊第乙個page的spare area的第6個byte標記為不等於0xff的值。
(2) 使用壞塊
這是在nand flash使用過程中,如果block erase或者page program錯誤,就可以簡單地將這個塊作為壞塊來處理,這個時候需要把壞塊標記起來。為了和固有壞塊資訊保持一致,將新發現的壞塊的第乙個page的spare area的第6個byte標記為非0xff的值。
3.壞塊管理
根據上面的這些敘述,可以了解nand flash出廠時在spare area中已經反映出了壞塊資訊,因此,如果在擦除乙個塊之前,一定要先check一下spare area的第6個byte是否是0xff,如果是就證明這是乙個好塊,可以擦除;如果是非0xff,那麼就不能擦除。
當然,這樣處理可能會犯乙個錯誤―――「錯殺偽壞塊」,因為在晶元操作過程中可能由於電壓不穩定等偶然因素會造成nand操作的錯誤。但是,為了資料的可靠性及軟體設計的簡單化,我們就要奉行「蔣委員長」的「寧可錯殺一千,也決不放過乙個」的宗旨。
留下備註。
yaffs移植到uboot1 3 1成功
核心版本是2.6.23,uboot版本是1.3.1,兩者的mtd驅動有些區別,還有就是oob布局也發生了變化,用更新後的mkyaffsimage生成映象後,kernel能正常啟動,開始在uboot ymount flash找不到目錄。今天終於看到目錄,並分別在kernel下和uboot下建立目錄測試...
uboot移植 uboot啟動回顧
一 uboot啟動的第一階段start.s 路徑uboot cpu s5pc11x start.s 1 include 標頭檔案包含,config.件原始碼中不存 在,配置後自動生成 路徑 include linux config.h 2 include 標頭檔案包含,version.件原始碼中不存...
u boot移植詳解 初識u boot
u boot是一種普遍用於嵌入式系統中的bootloader。bootloader是基於特定硬體平台來實現的,因此幾乎不可能為所有的嵌入式系統建立乙個通用的bootloader,不同的處理器架構都有不同的bootloader,bootloader不但依賴於cpu的體系結構,還依賴於嵌入式系統板級裝置...