このページはMB760を使い、コンパクトフラッシュソケットを汎用PCMCIAとして使うための手順書です。

前提

MB760にはコンパクトフラッシュソケットが1つついています。カーネルが起動した後にCFカードをrootファイルシステムとして使う場合を想定して、出荷時はCFメモリーカード(=ideディスク)固定として /dev/hda デバイスとして認識するようになっています。つまりCFメモリーカード専用の設定になっています。このため無線LANや通信カードを認識することはありません。

CFソケットは

  1. IDEディスク(/dev/hda)固定として使う (MB760出荷時のデフォルト)
  2. PCMCIAを管理する cardmgr (カードマネージャ)の管理下で使う

2つの方法があり、1のIDEディスク決め打ちのほうが設定が簡単です。またカーネルが起動してすぐにrootファイルシステムとしてマウントするためには1である必要があります。

ただし、無線LANや通信カードなど、IDEディスク以外のカードをさす場合にはcardmgr(カードマネージャ)を起動させてカード種別を認識させ、多様なドライバを動的ロードする必要があります。もちろんこの場合でも後認識のIDEディスクとして使えますが、cardmgr を起動させる必要があるためにrootファイルシステムの置き場として使うことは出来なくなります。

前述したようにMB760の出荷時設定はIDEディスク決めうちとなっていますが、このページではpcmcia管理下に置くようにカーネルの変更箇所について記述します。

ところでEB760ボードにはCFソケットが2つ実装されていて、それぞれ cf0, cf1 と呼称しています。EB760では cf0 は IDE (/dev/hda) 固定、 cf1 は cardmgr の管理下で動かしています。MB760にはCFソケットが1つ実装されていますが、これは EB760 ボードの cf0 に相当します。つまり デフォルトでは /dev/hda 固定で動いているということです。

カーネルの変更

変更前のカーネルは linux-2.6.15-cat_20080226.tgz (2008年2月26日)あるいはそれ以降の新しいものを使います。

  • arch/sh/boards/cat/setup760.c
#if 0
        // CF0をIDEとして
        cat760_cfenabler();
        cat_register_iomap(0x1f0, 0x1f7, CAT760_CF_SOCKET0_PHYS + 0x1f0, 0);
        cat_register_iomap(0x3f6, 0x3f6, CAT760_CF_SOCKET0_PHYS + 0x3f6, 0);
#endif

CF0をIDEディスクとして初期化している部分を #if 0 〜 #endif で無効にする

  • drivers/pcmcia/cat_ss.c
#if defined(CONFIG_SH_CAT760)
#define CATSS_MAX_SOCKETS 1
static  struct catss_socket catss_sockets[] = {
        {
        .atr_base = CAT760_CF_SOCKET0_ATTR,
        .mem_base = CAT760_CF_SOCKET0_COMM,
        .io_base  = CAT760_CF_SOCKET0_PHYS,
        .irq      = CAT760_CF_SOCKET0_IRQ,
        }
};
#endif

CAT760_CF_SOCKET1_<なんとか> と書かれているところを CAT760_CF_SOCKET0_<ナントカ> に書き直します。これは cardmgr で管理しているcfソケットをcf1からcf0に変更する意図です。

  • drivers/pcmcia/cistpl.c
    #ifdef CONFIG_SH_CAT760
    #include <asm/cat/cat760.h>
    #define ATTR_BASE_0 CAT760_CF_SOCKET0_ATTR      // ここを書き直す
    #define ATTR_BASE_1 CAT760_CF_SOCKET1_ATTR      // これは無いのだがダミー
    #endif

上記3つのファイル

  • arch/sh/boards/cat/setup760.c
  • drivers/pcmcia/cat_ss.c
  • drivers/pcmcia/cistpl.c

を修正するパッチはこれです filelinux-2.6.15-cat_20080502_mb760pcmcia.diff
(linux-2.6.15-cat_20080502.tgz に対するパッチ) ソース3つを手作業で修正する代わりに

$ tar xzvf linux-2.6.15-cat_20080502.tgz
$ cd linux-2.6.15-cat
$ patch -p1 < linux-2.6.15-cat_20080502_mb760pcmcia.diff

としてもOKです

コンフィグレーション

$ make mb760_defconfig

MB760のデフォルトのコンフィグレーションに戻す

$ make menuconfig
Bus options  --->
  PCCARD (PCMCIA/CardBus) support  --->
    <*> PCCard (PCMCIA/CardBus) support          → Y キーを押す
    <*>   16-bit PCMCIA support                  → Y キーを押す
    <*>   CAT760/CAT709 pcmcia support           → Y キーを押す
Device Drivers  --->
  ATA/ATAPI/MFM/RLL support  --->
    <M> ATA/ATAPI/MFM/RLL support
    (1)   Max IDE interfaces
    <M>     Include IDE/ATA-2 DISK support
    <M>     PCMCIA IDE support        PCMCIA管理下のIDEカードサービス
    <M>     generic/default IDE chipset support
  Character devices  --->
    Serial drivers  --->
      <*> 8250/16550 and compatible serial support
      <M>   8250/16550 PCMCIA device support      UART互換の通信カードなど
      (5)   Maximum number of 8250/16550 serial ports
      [*]   Extended 8250/16550 serial driver options
      [*]     Support for sharing serial interrupts
 $ make

出来上がった arch/sh/boot/zImage がカーネルですが、カーネルを保存する領域 /dev/mtdblock1 が 0x130000バイト (1,245,184バイト)なので、必ずそれ以下になるようにコンフィグレーションしてください。

カーネルの書き換え方法は、詳しくは CAT760の取扱説明書をご覧ください。

モジュールの取り扱い

カーネルのコンフィグレーションで <M> モジュールにしたドライバはインストールが厄介なのですが、以下のような手順が参考になるかと思います。

カーネルソースTOPの Makefile を編集して INSTALL_MOD_PATH= 変数に適当なパスを入れます。

# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots.  This is not defined in the
# makefile but the arguement can be passed to make if needed.
#
INSTALL_MOD_PATH=/home/ebihara/tmp

このようにしてから

$ make modules_install

とすると、/home/ebihara/tmp 以下にモジュール群がインストールされるので、これを CAT760に移していきます。

/home/ebihara/tmp/
`-- lib
    `-- modules
        `-- 2.6.15-sh
            |-- build -> 
            |-- kernel
            |   |-- crypto
            |   |   |-- des.ko
            |   |   `-- md5.ko
            |   |-- drivers
            |   |   |-- block
            |   |   |   |-- cryptoloop.ko
            |   |   |   |-- loop.ko
            |   |   |   `-- rd.ko
            |   |   |-- cdrom
            |   |   |   `-- cdrom.ko
            |   |   |-- ide
            |   |   |   `-- legacy
            |   |   |       `-- ide-cs.ko
            |   |   |-- media
            |   |   |   `-- video
            |   |   |       |-- v4l1-compat.ko
            |   |   |       |-- v4l2-common.ko
            |   |   |       `-- videodev.ko
            |   |   |-- net
            |   |   |   |-- mii.ko
            |   |   |   |-- ppp_generic.ko
            |   |   |   `-- slhc.ko
            |   |   |-- scsi
            |   |   |   |-- scsi_mod.ko
            |   |   |   |-- sd_mod.ko
            |   |   |   |-- sg.ko
            |   |   |   `-- sr_mod.ko
            |   |   |-- serial
            |   |   |   `-- serial_cs.ko
            |   |   `-- usb
            |   |       |-- core
            |   |       |   `-- usbcore.ko
            |   |       |-- host
            |   |       |   `-- ohci-hcd.ko
            |   |       |-- input
            |   |       |   `-- usbhid.ko
            |   |       |-- media
            |   |       |   |-- konicawc.ko
            |   |       |   |-- ov511.ko
            |   |       |   |-- pwc
            |   |       |   |   `-- pwc.ko
            |   |       |   |-- sn9c102.ko
            |   |       |   |-- stv680.ko
            |   |       |   `-- usbvideo.ko
            |   |       |-- serial
            |   |       |   |-- cp2101.ko
            |   |       |   |-- pl2303.ko
            |   |       |   `-- usbserial.ko
            |   |       `-- storage
            |   |           `-- usb-storage.ko
            |   |-- fs
            |   |   |-- fat
            |   |   |   `-- fat.ko
            |   |   |-- isofs
            |   |   |   `-- isofs.ko
            |   |   |-- lockd
            |   |   |   `-- lockd.ko
            |   |   |-- minix
            |   |   |   `-- minix.ko
            |   |   |-- msdos
            |   |   |   `-- msdos.ko
            |   |   |-- nfs
            |   |   |   `-- nfs.ko
            |   |   |-- ntfs
            |   |   |   `-- ntfs.ko
            |   |   |-- udf
            |   |   |   `-- udf.ko
            |   |   `-- vfat
            |   |       `-- vfat.ko
            |   `-- net
            |       |-- ieee80211
            |       |   |-- ieee80211.ko
            |       |   |-- ieee80211_crypt.ko
            |       |   |-- ieee80211_crypt_ccmp.ko
            |       |   |-- ieee80211_crypt_tkip.ko
            |       |   `-- ieee80211_crypt_wep.ko
            |       `-- sunrpc
            |           `-- sunrpc.ko
            |-- modules.alias
            |-- modules.ccwmap
            |-- modules.dep
            |-- modules.ieee1394map
            |-- modules.inputmap
            |-- modules.isapnpmap
            |-- modules.pcimap
            |-- modules.symbols
            |-- modules.usbmap
            `-- source -> 

INSTALL_MOD_PATH= で指定したパス以下にドライバ (*.ko) が入るので、CAT760の /lib/modules/<カーネルバージョン> 以下のディレクトリにコピーします。

# rommode rw
# date -s "2008/2/28 21:22:00"
# hwclock --systohc

ファイルのタイムスタンプが未来や過去にならないように 時計を合わせておきます。

# mkdir /lib/modules/2.6.15-sh/kernel/drivers/serial/
# cp /NFSマウントなどを利用して/tmp/lib/modules/2.6.15-sh/kernel/drivers/serial/serial_cs.ko \
   /lib/modules/2.6.15-sh/kernel/drivers/serial/
# depmod -a

モジュールファイルの追加削除を行ったときは depmod -a を一度実行します。

# rommode ro

PCMCIAの設定

基本的には PC の場合と同じです。cardmgr管理下で動かした場合は、簡易的にはhotplug ができます。ただし電気的に活線挿抜(かっせんそうばつ=電源を入れたままカードの抜き差し)に対応した保護回路が入っているわけではないので、活線挿抜は保証しません。とくに消費電流の大きな無線LANカードなどを差し込むと、急な電圧低下でリセットがかかることがあります。また静電気などで故障することもあるかもしれません。実験レベルで考えてください。

  • 簡易hotplug(カードの交換)

手動操作で抜くことを教えてあげます。

# cardctl eject 0

これで抜いても大丈夫です。

新しいカードを挿入したら

# cardctl insert 0

として cardmgr に教えてください。

あとは CFカード情報 をご覧ください。

関連

Last-modified: 2008-06-17 (火) 13:26:39 (5786d)