トップ «前の日記(           ) 最新 次の日記(           )» 編集

L-CardAおぼえがき


            コンパクトフラッシュ(CF)の準備

_ ファイルシステムの構築

CF(TDK製32MB)をfengrのPCカードスロットに差し込む.dmesgのログは以下の通り.

hdc: TDK TC_H, CFA DISK drive
ide1 at 0x100-0x107,0x10e on irq 3
ide-floppy driver 0.99.newide
hdc: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error }
hdc: task_no_data_intr: error=0x04 { DriveStatusError }
hdc: 62592 sectors (32 MB) w/1KiB Cache, CHS=489/4/32
 hdc: hdc1
ide_cs: hdc: Vcc = 3.3, Vpp = 0.0

上記ログよりこのカードが「hdc」として認識されていることがわかるので,fdiskコマンドを使ってLinuxパーティションを作成.

# fdisk /dev/hdc
 
コマンド (m でヘルプ): m
コマンドの動作
   a   ブート可能フラグをつける
   b   bsd ディスクラベルを編集する
   c   dos 互換フラグをつける
   d   領域を削除する
   l   既知の領域タイプをリスト表示する
   m   このメニューを表示する
   n   新たに領域を作成する
   o   新たに空の DOS 領域テーブルを作成する
   p   領域テーブルを表示する
   q   変更を保存せずに終了する
   s   空の Sun ディスクラベルを作成する
   t   領域のシステム ID を変更する
   u   表示/項目ユニットを変更する
   v   領域テーブルを照合する
   w   テーブルをディスクに書き込み、終了する
   x   特別な機能 (エキスパート専用)
 
コマンド (m でヘルプ): p
 
ディスク /dev/hdc: ヘッド 4, セクタ 32, シリンダ 489
ユニット = シリンダ数 of 128 * 512 バイト
 
 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/hdc1             1       489     31295+   4  FAT16 <32M
 
コマンド (m でヘルプ): d
領域番号 (1-4): 1
 
コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-489, 初期値 1): 
初期値 1 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-489, 初期値 489): 
初期値 489 を使います
 
コマンド (m でヘルプ): w
領域テーブルは交換されました!
 
ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

※: cfdiskコマンドというのもあり,そっちのほうが分かりやすい.

_ ファイルシステムの作成

fdiskを使ってパーティション情報を確認する.

# fdisk -l /dev/hdc
 
ディスク /dev/hdc: ヘッド 4, セクタ 32, シリンダ 489
ユニット = シリンダ数 of 128 * 512 バイト
 
 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/hdc1             1       489     31280   83  Linux

上記の結果より,作成したパーティションの名前が「/dev/hdc1」であることが分かるので,mke2fsコマンドを使ってCF上にファイルシステムを構築.
引数に指定されたファイルシステムを初期化する危険なコマンドなので,デバイス(今回の場合,/dev/hdc1)を間違えないこと.

# mke2fs /dev/hdc1
mke2fs 1.29 (24-Sep-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
7840 inodes, 31280 blocks
1564 blocks (5.00%) reserved for the super user
First data block=1
4 block groups
8192 blocks per group, 8192 fragments per group
1960 inodes per group
Superblock backups stored on blocks: 
        8193, 24577
 
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

_ ファイルシステムのチェック

作成したファイルシステムをマウント.

# mkdir /mnt/cf
# mount /dev/hdc1 /mnt/cf
# chmod 775 /mnt/cf              (グループ書き込み可にする)

簡単なプログラムを作ってコンパイルし,CFカードにコピー.

% vi hello.c
% mipsel-linux-gcc -o hello hello.c
% cp hello /mnt/cf
% su
# sync;sync;sync
# umount /mnt/cf

_ 利用

fengrからCFカードを抜きloniに挿す.

loni# tail -f /var/log/messages
 :
cardmgr[42]: socket 0: Anonymous Memory
cardmgr[42]: executing: 'modprobe memory_cs'
cardmgr[42]: + insmod: memory_cs.o: no module by that name found
cardmgr[42]: modprobe exited with status 1
cardmgr[42]: module /lib/modules/2.4.19-rc1/pcmcia/memory_cs.o not available
cardmgr[42]: get dev info on socket 0 failed: Resource temporarily unavailable

というログを残して認識失敗./lib/modules/2.4.19-rc1/pcmcia/memory_cs.oが無いと言っているようなので,確認.

loni# ls /lib/modules/2.4.19-rc1/pcmcia/
pcnet_cs.o   serial_cs.o

確かに無い.fengrのソースツリーを探してみる.

fengr# cd /usr/src/mipsel-linux/
fengr# find . -name \*memory_cs\* -print

無い.fengrの中を探すと/lib/modules/2.2.20-0vl10/pcmcia/の下にあった. 一方loniには/lib/modules/2.2.20-*というディレクトリはない.マニュアルを読むと日立製のメモリカードでは動作しないとあるので,OEMなのかな.手元にもう一枚あったPrincetonのカードを挿すと,同じログで,

hdc: Hitachi ATA Card, CFA DISK drive

と出るのでほぼ確定.手元にはこれ以上カードが無いのであきらめる.

_ SanDiskで再挑戦

SanDiskの64MBを購入して再挑戦.まずはloniに挿してみる.

loni# tail -f /var/log/messages
 :
cardmgr[42]: socket 0: ATA/IDE Fixed Disk
cardmgr[42]: executing: 'modprobe ide-cs'
cardmgr[42]: + Using /lib/modules/2.4.19-rc1/kernel/drivers/ide/ide-cs.o
cardmgr[42]: executing: 'modprobe ide-disk'
cardmgr[42]: + Using /lib/modules/2.4.19-rc1/kernel/drivers/ide/ide-disk.o
klogd: Trying to free nonexistent resource 2000000-b200000f>
klogd: hda: SanDisk SDCFB-64, ATA DISK drive
klogd: ide0 at 0xb2000000-0xb2000007,0xb200000e on irq 25
klogd: hda: 125440 sectors (64 MB) w/1KiB Cache, CHS=490/8/32
klogd: Partition check:
klogd:  hda1
klogd: ide_cs: hda: Vcc = 3.3, Vpp = 0.0
cardmgr[42]: executing: './ide start hda'

というわけで,認識成功\(^o^)/.fengrに挿し直し,上記手順を見ながら再び初期化(手順は省略).
fengrでファイルをコピーした後,loniに再び挿してマウント

loni# mount /dev/hda1 /mnt/flash

ファイルを確認し,テスト.

loni# ls /mnt/flash
hello       lost+found
loni# /mnt/flash/hello 
Hello, world!

感無量.


トップ «前の日記(           ) 最新 次の日記(           )» 編集