我正在使用嵌入式ARM平臺和內置的NAND閃存。我的屋頂隔斷是squashfs。 u-boot和內核都使用OMAP_ECC_BCH8_CODE_HW。問題在於一些電路板(不僅僅是一個)在停電後停止工作(它們被使用約2個月)。SQUASHFS錯誤:無法讀取頁面,...,大小
這些錯誤可以同時啓動可以看出:
[ 8.270507] end_request: I/O error, dev mtdblock9, sector 25184
[ 8.278930] SQUASHFS error: squashfs_read_data failed to read block 0xc40396
[ 8.286376] SQUASHFS error: Unable to read fragment cache entry [c40396]
[ 8.293579] SQUASHFS error: Unable to read page, block c40396, size d696
[ 8.300628] SQUASHFS error: Unable to read fragment cache entry [c40396]
[ 8.307647] SQUASHFS error: Unable to read page, block c40396, size d696
[ 8.314819] SQUASHFS error: Unable to read fragment cache entry [c40396]
[ 8.321838] SQUASHFS error: Unable to read page, block c40396, size d696
[ 8.328887] SQUASHFS error: Unable to read fragment cache entry [c40396]
[ 8.335906] SQUASHFS error: Unable to read page, block c40396, size d696
[ 8.343017] SQUASHFS error: Unable to read fragment cache entry [c40396]
[ 8.350006] SQUASHFS error: Unable to read page, block c40396, size d696
/usr/sbin/lighttpd: '/usr/lib/libpcre.so.1' is not an ELF file
/usr/sbin/lighttpd: can't load library 'libpcre.so.1'
我應該如何調試呢?我沒有擦除閃存,所以仍然可以對其進行一些測試。
什麼我迄今所做的:
我用nanddump(使用-o,讀OOB數據)上的壞分區,我注意到3個ECC校正警告。當我將這個轉儲寫入另一個電路板時,它可以毫無問題地啓動。
當我用附加選項-n(--noecc,Read without errors correction)使用nanddump並將其寫入另一個板(使用nandwrite -n)時,第二塊板無法啓動。
在我看來,這些錯誤是可以恢復的,這就是爲什麼nanddump在第一種情況下糾正了它們。我比較了這2個轉儲和他們只有三個差異(由nanddump報道3個ECC糾錯?)
# diff mtd_without_ecc.hex mtd_with_ecc.hex
486347c486347
< 076bca0: 59d2 d8bc 3e89 1c67 a6c2 74a0 bc38 4873 Y...>..g..t..8Hs
---
> 076bca0: 59d2 d8bc 3e09 1c67 a6c2 74a0 bc38 4873 Y...>..g..t..8Hs
783769c783769
< 0bf5980: e31e f50a e5b5 6ae5 5a67 8be1 7636 9cf2 ......j.Zg..v6..
---
> 0bf5980: e31e f50a e5b5 6aa5 5a67 8be1 7636 9cf2 ......j.Zg..v6..
1315929c1315929
< 1414580: a9ec ef89 ac52 c8a5 61f5 5d0b 6ee2 af41 .....R..a.].n..A
---
> 1414580: a9ec af89 ac52 c8a5 61f5 5d0b 6ee2 af41 .....R..a.].n..A
的問題是:爲什麼這些錯誤不是由系統自動修正?是否因爲squashfs不是「mtd-aware」文件系統,而不應該在mtd設備上使用它?如果是這樣,我應該使用squashfs而不是UBI嗎?那麼內核怎麼樣(據我所知它必須是原始映像才能從u-boot啓動)?
感謝您的幫助!