over 4 years ago

BBT 即 "bad block table",請參考 Nand Flash 基本介紹
以下資訊基於2.6.32 kernel,很舊了

下圖以一2048 block nand flash 來解釋 Linux 是如何將 BBT 儲存在實體的nand中。
Linux 會使用兩個block來記錄bad block資訊,一塊為primary,一塊為mirror,兩塊的bad block 資訊完全相同,只是為了安全起見多使用一個備份的block。當初始化時,系統預設從最後一個block 往前找bad block table,預設最多找4個block,如果是Linux 的bad block table block,則在該block的oob第8byte後會放置一4byte的tag作為識別,如果是primary bbt,則是"Bbt0",如果是mirror bbt 則會是"1tbB",若想定義自已的bbt位置,辨視的tag,尋找的範圍,尋找的位置,都可以在初使化時指定使用自已的bbt descriptor結構,即可達到要求。之後如果要加入的security 功能,可以考慮使用自已定義的bbt descriptor
如果要啟用這個機制,要在driver initial 時在options 中設定NAND_USE_FLASH_BBT,若沒有啟用,目前無其他替代機製

在找到BBT後,系統會將該block 讀入且轉換成內部的格式。Linux 准許外部系統使用1, 2, 4, 8 bits的資料長度記錄bad block 資訊,但在內部實際只使用兩個bits,之間的轉換和其值的意義可以參見下圖,下圖為一外部使用4bits bbt tag的例子。要注意的事reserved block 和bad block 是不能共存的,這是兩個不同的機制,reserved block 用來提醒系統,我有些block 不想被access,不一定是壞掉。目前只有看到一個driver 用這個機制,暫時不用理他

← Nand Flash 基本介紹