HD-HGLAN 1.4 のフラッシュメモリ


おくればせながら、 Hack BBS の No.2773で Junker さんが報告されているフラッシュメモリ について、追試をしてみた。

ファームは、HD-HGLAN 1.41(あぁー長らくアップデートしてない)+ ハックキット1.2

Linux giga 2.4.20_mvl31-ppc_linkstation #9 Fri Apr 22 10:56:48 JST 2005 ppc unknown

/dev/fl?

まずは、/dev/fl? をアクセスしてみる
[root@giga /root]# ls -l /dev/fl?
brw-r--r--    1 root     root     250,   0 Dec 12  2003 /dev/fl0
brw-r--r--    1 root     root     250,   1 Dec 12  2003 /dev/fl1
brw-r--r--    1 root     root     250,   2 Dec 12  2003 /dev/fl2
brw-r--r--    1 root     root     250,   3 Dec 12  2003 /dev/fl3
brw-r--r--    1 root     root     250,   4 Dec 12  2003 /dev/fl4
brw-r--r--    1 root     root     250,   5 Dec 12  2003 /dev/fl5
デバイスファイルは以前作ったので存在する。
しかし
[root@giga /root]# cat /dev/fl0 > /tmp/fl0
cat: /dev/fl0: そのようなデバイスやアドレスはありません
[root@giga /root]# cat /dev/fl1 > /tmp/fl1
cat: /dev/fl1: そのようなデバイスやアドレスはありません
[root@giga /root]# cat /dev/fl2 > /tmp/fl2
cat: /dev/fl2: そのようなデバイスやアドレスはありません
と、アクセスできない。

デバイスの確認

HD-HGLAN ファームウェア 1.41 をインストールした HDD を 玄箱/HG に USB で接続し、 /tmp/root にマウント、デバイスファイルを見てみた。
[root@hackkit /root]# mount -t ext3 /dev/sda1 /tmp/root
[root@hackkit /root]# cd /tmp/root/dev
[root@hackkit dev]# ls -l mtd*
crw-r--r--    1 root     root      90,   0 Mar 10  2005 mtd0
crw-r--r--    1 root     root      90,   2 Mar 10  2005 mtd1
crw-r--r--    1 root     root      90,   4 Mar 10  2005 mtd2
crw-r--r--    1 root     root      90,   6 Mar 10  2005 mtd3
crw-r--r--    1 root     root      90,   8 Mar 10  2005 mtd4
brw-r--r--    1 root     root      31,   0 Mar 10  2005 mtdblock0
brw-r--r--    1 root     root      31,   1 Mar 10  2005 mtdblock1
brw-r--r--    1 root     root      31,   2 Mar 10  2005 mtdblock2
brw-r--r--    1 root     root      31,   3 Mar 10  2005 mtdblock3
brw-r--r--    1 root     root      31,   4 Mar 10  2005 mtdblock4
[root@hackkit dev]#
Junker さんの情報通り。

なんで、キャラクタデバイスとブロックデバイスがあるの?(普通?)
なんで、キャラクタデバイスはマイナ番号が偶数しかないの?

デバイスの作成

HD-HGLAN に戻り、ハックキットの HDD 内に /dev/mtd? を作成する。
[root@giga /root]# mknod /dev/mtd0 c 90 0
[root@giga /root]# mknod /dev/mtd1 c 90 2
[root@giga /root]# mknod /dev/mtd2 c 90 4
[root@giga /root]# mknod /dev/mtd3 c 90 6
[root@giga /root]# mknod /dev/mtd4 c 90 8
[root@giga /root]# ls -l /dev/mtd*
crw-r--r--    1 root     root      90,   0 Sep 25 15:00 /dev/mtd0
crw-r--r--    1 root     root      90,   2 Sep 25 15:01 /dev/mtd1
crw-r--r--    1 root     root      90,   4 Sep 25 15:02 /dev/mtd2
crw-r--r--    1 root     root      90,   6 Sep 25 15:02 /dev/mtd3
crw-r--r--    1 root     root      90,   8 Sep 25 15:02 /dev/mtd4
[root@giga /root]#

内容確認

[root@giga /root]# cat /dev/mtd0 > /tmp/mtd0
[root@giga /root]# cat /dev/mtd1 > /tmp/mtd1
[root@giga /root]# cat /dev/mtd2 > /tmp/mtd2
[root@giga /root]# cat /dev/mtd3 > /tmp/mtd3
[root@giga /root]# cat /dev/mtd4 > /tmp/mtd4
[root@giga /root]# ls -l /tmp/mtd?
-rw-r--r--    1 root     root      3145728 Sep 25 15:03 /tmp/mtd0
-rw-r--r--    1 root     root       458752 Sep 25 15:03 /tmp/mtd1
-rw-r--r--    1 root     root        65536 Sep 25 15:03 /tmp/mtd2
-rw-r--r--    1 root     root       524288 Sep 25 15:03 /tmp/mtd3
-rw-r--r--    1 root     root      4194304 Sep 25 15:03 /tmp/mtd4
[root@giga /root]#

mtd0

Junker さんの情報によると、firmimg.bin とか。
[root@giga /tmp]# /home/linkstation/getfirm/getfirm /tmp/mtd0
info_ver 00000001
firmid 00000004
firmname HD-HGLAN(IEMITSU)
subver FLASH 1.0
ver_major 0002
ver_minor 0001
build 0000
date 6904 160a 3908
size 002cf837
chksum c16e849c
kernel_offset 0000006c(108)
kernel_size 000d0596(853398)
initrd_offset 000d0602(853506)
initrd_size 001ff235(2093621)
[root@giga /tmp]# cmp /home/linkstation/firmware/HGLAN/hglan141/firmimg.bin /tmp/mtd0
cmp: ファイル/home/linkstation/firmware/HGLAN/hglan141/firmimg.binの末尾
間違いなさそう。

mtd1

Junker さんの情報によると、bootcode.bin とか。
[root@giga /tmp]# cmp /home/linkstation/firmware/HGLAN/hglan141/bootcode.bin /tmp/mtd1
cmp: ファイル/home/linkstation/firmware/HGLAN/hglan141/bootcode.binの末尾

mtd2

同、起動ステータスとか。
[root@giga /tmp]# od -xc /tmp/mtd2
0000000 0000 4182 4f4b 4f4b 0000 0000 0000 0000
         \0  \0   A 202   O   K   O   K  \0  \0  \0  \0  \0  \0  \0  \0
0000020 626f 6f74 7061 726d 3d72 6f6f 743d 2f64
          b   o   o   t   p   a   r   m   =   r   o   o   t   =   /   d
0000040 6576 2f68 6461 3100 0000 0000 0000 0000
          e   v   /   h   d   a   1  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000060 0000 0000 0000 0000 0000 0000 0000 0000
         \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0000400 ffff ffff ffff ffff ffff ffff ffff ffff
        377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377
*
0200000
おや?単に "OKOK..." があるだけかと思ったが、
bootparm=root=/dev/hda1
とか書いてある。
この辺り、単に従来の /dev/fl3 とは違うみたい。
# echo -n 'NGNG' > /dev/mtd2
するのはまずそう。

mtd3

設定保存用とのこと。
HD-HLAN の標準ファームから as_flash を持ってきて、実行してみた。
[root@giga /tmp]# usr/bin/as_flash /tmp/mtd3 list
0 -> /tmp/conf_save.tar.gz
OK。

mtd4

フラッシュ全体とのこと。
[root@giga /tmp]# cat mtd0 mtd1 mtd2 mtd3 > mtdall
[root@giga /tmp]# cmp mtdall mtd4

課題

以下、カーネルソースで確認が必要。
  • mtd って何の略?

  • どうしてマイナデバイス番号が偶数しかないの?

  • /dev/mtd2 の使い方

  • キャラクタデバイスとブロックデバイス




  • Scheduler の監視(2)
    ハックの記録
    LinkStation/玄箱 をハックしよう

    HD-HGLAN 1.4 のフラッシュメモリ(2)mtd って何の略?

    Copyright (C) 2005 Yasunari Yamashita. All Rights Reserved.
    yasunari @ yamasita.jp 山下康成@京都府向日市