解决问题:
nand0: MTD Erase failure: -5
drivers/mtd/nand/nand_bbt.c文件中初始化bbt
/*
* Allocate memory (2bit per block) and clear the memory bad block
* table.
*/
this->bbt = kzalloc(len, GFP_KERNEL);
if (!this->bbt)
return -ENOMEM;
每个block用2个比特表示是否为坏块。
nand_scan_bbt
------>nand_memory_bbt
----------->create_bbt
---------------->scan_block_fast
下面的两个函数用来查看和标记上面说的每个block的2比特位。初步分析坏块时2比特位置为11。
static inline uint8_t bbt_get_entry(struct nand_chip *chip, int block)
{
uint8_t entry = chip->bbt[block >> BBT_ENTRY_SHIFT];