※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

NAND領域をマウントできない

NANDブート時にルートに割当たっているところからゴッソリとコピーしてこようとしたときの問題。
mount /dev/mtd2 /mnt/mtd
mount: /dev/mtd2 is not a block device
ん?etchの時は問題なくできたはずなのに...
KUROBOX-PRO:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00001000 "physmap-flash.0"
mtd1: 00400000 00020000 "uImage"
mtd2: 04000000 00020000 "rootfs"
mtd3: 0bc00000 00020000 "extra"
KUROBOX-PRO:~# ls -l /dev/ | grep mtd*
crw------- 1 root root     90,   0 Mar 11 14:54 mtd0
crw------- 1 root root     90,   1 Mar 11 14:54 mtd0ro
crw------- 1 root root     90,   2 Mar 11 14:54 mtd1
crw------- 1 root root     90,   3 Mar 11 14:54 mtd1ro
crw------- 1 root root     90,   4 Mar 11 14:54 mtd2
crw------- 1 root root     90,   5 Mar 11 14:54 mtd2ro
crw------- 1 root root     90,   6 Mar 11 14:54 mtd3
crw------- 1 root root     90,   7 Mar 11 14:54 mtd3ro
brw-rw---T 1 root disk     31,   0 Mar 11 14:54 mtdblock0
brw-rw---T 1 root disk     31,   1 Mar 11 14:54 mtdblock1
brw-rw---T 1 root disk     31,   2 Mar 11 14:54 mtdblock2
brw-rw---T 1 root disk     31,   3 Mar 11 14:54 mtdblock3
mtdblock2のほうか
mount /dev/mtdblock2 /mnt/mtd
mount: you must specify the filesystem type
ファイルシステムを指定しないとだめになった?
調べてみるとjffs2を指定すべきらしい。
mount -t jffs2 /dev/mtdblock2 /mnt/mtd
指定してみるが…ハング。応答が返ってきません。
syslogには以下のログが大量に出ている
Mar 16 17:02:08 localhost kernel: [259459.519943] JFFS2 version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
Mar 16 17:05:34 localhost kernel: [259665.270902] uncorrectable error :
:
:
:
:
Mar 16 17:05:34 localhost kernel: [259665.298841] mtd->read(0x800 bytes from 0x1f800) returned ECC error
Mar 16 17:05:34 localhost kernel: [259665.399566] jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000024: 0x2b2b instead
:
:
Mar 16 17:05:36 localhost kernel: [259665.408602] Further such events for this erase block will not be printed
:
Mar 16 20:07:58 localhost kernel: [270609.004576] mtd->read(0x1ac bytes from 0x36dfe54) returned ECC error
Mar 16 20:07:58 localhost kernel: [270609.011194] Empty flash at 0x036dfe50 ends at 0x036dfe54
Mar 16 20:07:58 localhost kernel: [270609.022359] Empty flash at 0x036dff48 ends at 0x036dff4c
Mar 16 20:07:58 localhost kernel: [270609.084315] Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes
Mar 16 20:07:58 localhost kernel: [270609.092236] empty_blocks 0, bad_blocks 0, c->nr_blocks 512

3時間かかってmountされずに終了。
kernelの問題?よくわからないので後ほど調査することにする。

回避策

NANDから取れないならNAND更新用のinitrd.buffaloからいただくことにする。
玄箱PRO用Firmware V1.02 kbpfw102.zip を使う。
KUROBOX-PRO:~# apt-get install unzip
KUROBOX-PRO:~# unzip kbpfw102.zip
KUROBOX-PRO:~# dd if=initrd.buffalo of=initrd.gz bs=64 skip=1
301354+1 records in
301354+1 records out
19286692 bytes (19 MB) copied, 20.6181 s, 935 kB/s
KUROBOX-PRO:~# gunzip initrd.gz
KUROBOX-PRO:~# mkdir /tmp/root
KUROBOX-PRO:~# mount -o loop initrd /tmp/root
KUROBOX-PRO:~# ls -l /tmp/root/boot
total 18021
-rw-r--r-- 1 root root  1714088 Mar  1  2007 initrd.buffalo
-rw-r--r-- 1 root root 14680064 Apr 10  2007 nandrootfs.jffs2
-rwxrwxrwx 1 root root   245776 Apr 10  2007 u-boot.bin
-rwxrwxrwx 1 root root  1736612 Apr 10  2007 uImage.buffalo
このnandrootfs.jffs2の中に入っている一式が欲しかったもの
このイメージから中身を取り出すためには以下の手順でできるはずだが、mtdramがない
mknod /tmp/mtdblock0 b 31 5
modprobe mtdblock
modprobe mtdram total_size=4000000 erase_size=20000
modprobe jffs2
dd if=/tmp/root/boot/nandrootfs.jffs2 of=/tmp/mtdblock5
mkdir /mnt/mtd
mount -t jffs2 /tmp/mtdblock0 /mnt/mtd
回避策でも行き詰まった。