為了讓JFFS2能夠work,小弟目前的改法如下,不知道這樣改是好還不好~~
因為我使用的這顆w25x64使用的介面是spi,所以在kernel Source裡面支援
的檔案為drivers/mtd/devices/m25p80.c ,其中關於flash的定義如下
{ "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) },
又在probe() 裡面有一段寫法如下
if (info->flags & SECT_4K) {
flash->erase_opcode = OPCODE_BE_4K;
flash->mtd.erasesize = 4096;
} else {
flash->erase_opcode = OPCODE_SE;
flash->mtd.erasesize = info->sector_size;
}
這邊會根據SECT_4K這個flag回報給mtd core 4KB的erase size,
以及不一樣的OPCODE好下command給flash...
所以我便將原始w25x64 define的SECT_4K拿掉,這樣回報給mtd core
就會是64KB了,之後也可以成功掛載JFFS2了....
※ 引述《askacis (ASKA)》之銘言:
: 小弟日前使用一顆erase sector size 為4KB的spi flash(w25x64),
: 並且想掛載jffs2系統,掛載的時候會有一大堆諸如
: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at...
: 的警告訊息,雖然最後是可以成功mount....google了一下發現是
: image 與flash 兩者的erase sector size不一致的問題...
: 目前的問題是mkfs.jffs2他可以設定的最小erase size是 8K
: 是否代表無法在這顆4KB erase size的flash掛載jffs2了呢?
: 或是還有其他的方法可以解決呢?
: P.S 1 當我mount 一個很小的(<4096)的jffs2 image時是可以成功
: mount的.
: P.S 2 mtd-utils 運作看起來是正常的,可以利用flash_eraseall 或是
: flashcp之類的指令來存取flash.
: 感謝各位大大了......
※ 引述《askacis (ASKA)》之銘言:
: 小弟日前使用一顆erase sector size 為4KB的spi flash(w25x64),
: 並且想掛載jffs2系統,掛載的時候會有一大堆諸如
: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at...
: 的警告訊息,雖然最後是可以成功mount....google了一下發現是
: image 與flash 兩者的erase sector size不一致的問題...
: 目前的問題是mkfs.jffs2他可以設定的最小erase size是 8K
: 是否代表無法在這顆4KB erase size的flash掛載jffs2了呢?
: 或是還有其他的方法可以解決呢?
: P.S 1 當我mount 一個很小的(<4096)的jffs2 image時是可以成功
: mount的.
: P.S 2 mtd-utils 運作看起來是正常的,可以利用flash_eraseall 或是
: flashcp之類的指令來存取flash.
: 感謝各位大大了......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.105.155.91