PCMCIAは、Personal Computer Memory Card International Association の略。現在は規格として、「PC Card Standard」となったので、"16-bit PC Card" というほうが正しい表現。
PC Card | 16Bit PC Card | メモリカード | SRAMカード | |
リニアフラッシュメモリカード | ||||
マスクROMカード | ||||
I/Oカード | ATAフラッシュ | このカテゴリが多い | ||
ATAHDDカード | ||||
モデムカード | ||||
SCSIカード | ||||
LANカード | ||||
その他 | ||||
CardBusカード | 高速SCSIカード | |||
高速ATAカード | ||||
高速LANカード | ||||
高速シリアル(USB/1394)カード | ||||
その他 | ZVポート用ビデオカード |
LinuxでPCカードを使う為の、カーネルサービス、ドライバ及び、ユーザーレベルユーティリティのパッケージ。最新の安定版は、3.2.8(2004-07-16 release) もうstable?。ドライバは、kernel2.4からカーネルソースに取り込まれている。
一応できた?cheekyのkernel2.6だとOopsが出てるが…。他のマシン&kernel2.4は大丈夫みたい。
kernel2.6でモジュールをインストールすると、no version for "struct_module" found: kernel tainted. とか言われる。大丈夫か?動くから…
KS2970 11b MAC 2970-PCMCIA-0.26 [Feb 09 2005 14:35:09] 2970PC>? ? help D(B/W/D) (start), (end) memory dump W(B/W/D) addr, data memory write R(B/W/D) addr memory read BB[R/W/D/I] Baseband access CH (number) RF ch(1..14) E[R/W/D/CL] (addr), (data) eeprom access HOST Host i/f MAC MAC inf MACADDR mac address MPL pool PHY PHY inf RATE (1/2/5/11) Tx rate SM staion inf TIM timer TX frame tx debug VER version
# ifconfig eth1 eth1 Link encap:Ethernet HWaddr 12:FF:FF:FF:FF:FF BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:11 Base address:0x100
せっかく新規で書くので、きちんと設計したい。(時間ないけど…) やっぱ設計は大事ですよ。アホな設計のクサレcodeは、読みにくいし修正もしにくい。後々の自分自身の為にもキチンと設計したいね。KSCのドライバの場合、モジュールとして分けるなら、デバイス依存部分(MAC CHIPのI/F)、MAC-HOST I/F Protocol 部分、あと、network_device I/F 部分ってとこかな。愚痴なんですけど、いつもWindowsのNDISドライバとか提供してもらってるのだが、もうちょっと他のOSにポーティングすること、考えて書いてほしいよな…。あんまり参考になんないんだよね。そういう俺も思いっきりCPU依存なCODEを書いていますけど…。少なくともBigEndianなCPUじゃ絶対動かない…。
今回は、KS2101というMACチップを仕様する。I/FはPCMCIA、デバイスとのI/F部分はもちろん、pcmcia-cs のI/Fもこのモジュールに含む。レイヤ的に言えば、最下層
ks2101.h (KS2101のレジスタ定義、チップ固有の定数、マクロ等を定義) ks2101.c (基本的に、デバイスとのデータのやり取りを行う) ks29xx_cs.c (pcmcia-cs 関連のサービス処理)
MACとHOSTの通信仕様部分。デバイスに依存するわけではないので、できるだけ汎用性を持たせて作りたい。11a、11bでも基本的には、あまり変わらない。MACからのデータを解析し、上位にあげたり、MACへ送るデータを作成したりする。レイヤ的には、真ん中。
ks_hostif.h ks_hostif.c
ネットワークデバイスとしての処理を担当。socketからのデータを処理したり、ネットワークデバイスのUP/DOWN、ユーザーアプリケーションI/Fのioctlなんかの処理。レイヤ的には、最上位。
ks29xx_net.c ks29xx_ioctl.h
ks_debug.h (デバッグモジュール) ks_debug.c (デバッグモジュール) ks29xx.h (デバイスに依存しない部分の全体的な定義)
TARGET = ks29xx_cs.o ks29xx.o ks29xx.o: ks2101.o ks29xx_net.o ks29xx_ioctl.o ks_hostif.o ks_debug.o $(LD) -r $^ -o $@
PC card service(cardmgr) にドライバをロードしてもらいたい場合、PCMCIA Card Configuration DataBase file の "/etc/pcmcia/config"に記述しておく。このファイルはadd-on driver用に"/etc/pcmcia/*.conf"も読み込むようになっているので、"/etc/pcmcia/hoge.conf"を作成し設定を記述しておいてもOK。DataBase fileを読み込ませるには、PC card serviceの再起動が必要。
# # PCMCIA Card Configuration Database # for ks29xx_cs # ks29xx.conf # # # Device driver definitions # device "ks29xx_cs" class "network" module "ks29xx_cs" # # Wireless network adapters # card "KeyStream KS2916 Wireless LAN PC Card" manfid 0x005b, 0xf000 bind "ks29xx_cs"
cardmgr[544]: unsupported card in socket 1 cardmgr[544]: product info: "KeyStream Corp.", "KS2101", "", "" cardmgr[544]: manfid: 0x005b, 0xf000 function: 6 (network)
cardmgr[1348]: socket 1: KeyStream KS2916 Wireless LAN PC Card cardmgr[1348]: executing: 'modprobe ks29xx_cs' cardmgr[1348]: + modprobe: Can't locate module ks29xx_cs cardmgr[1348]: modprobe exited with status 255 cardmgr[1348]: module /lib/modules/2.4.20-31.9/pcmcia/ks29xx_cs.o not available cardmgr[1348]: get dev info on socket 1 failed: Resource temporarily unavailable cardmgr[1348]: executing: 'modprobe -r ks29xx_cs' moduleをloadしようとして失敗して止まっている。成功!!。 ちゃんとDataBase file の内容が反映されてます。
Hotplugは、USB,1394,PCI(CardBus)関係の機能なので、PCMCIAじゃ無理? このオプションがカーネルのコードに入ったのは、2.4.23以降。 include/linux/firmware.h lib/firmware_class.c
wireless-toolsは、現在一部の機能しかサポートしていない。(iwconfig) iwconfig iwevent iwgetid iwlist iwpriv iwspy
なんか仕様書読むと、この機能がはいっているみたいだなー。 やっぱサポートしなきゃいけない?よね〜。
CardBusのときは、CardBusデバイスのサポートが2.4以降だったから、 あまり考えなかったが、PCMCIAの場合どうなのでしょ? PCカードのサポートが入ったのはいつ? 2.4からだっけ?じゃ、2.4系と2.6系ってことでいいのかな? いまどき2.2系使ってますとかいう奴は、いないだろ…
ボードインターフェース ・ KS2821/22/30RF モジュール用コネクタ ・ PC カード (34 ピン×4/Sycard 社PCC extend 120 対応)(16bit Slave 接続共用) ・ SD カード(16 ピン/Sycard 社SD extend 300 対応) ・ USB (Type-A コネクタ(メス)) (*2) ・ RS232-C (D-sub 9 ピン/オス)(高速UART) ・ PCM Codec/Stereo Codec インターフェース(I2S インターフェース共用) ・ I2C インターフェース ・ 機能拡張設計用コネクタ(AMP 5-179009-8/160 ピン) (*2) ・ JTAG(20 ピン) ・ 8bit-GPIO ・ KS2101 動作確認用テストピンパッド ・ 電源ON/OFF 確認用LED×3 ・ 各部動作確認用LED×24 ・ 各種設定用スイッチ その他 ・ 5V AC アダプタ電源 (ジャンパ設定によりPC カード、SD カードからの電源供給も可能。(*3)) ・ Flash ROM(4Mbit)搭載 ・ SRAM(4Mbit)搭載 ・ EEPROM(I2S)搭載 ・ USB ドライバIC(OKI ML60842)搭載 (*2) (*2) オプション。詳細はお問い合わせ下さい。 (*3) ホスト側の電源容量にご注意下さい。
# dump_cis Socket 0: no CIS present Socket 1: dev_info NULL 0ns, 512b vers_1 5.0, "KeyStream Corp.", "KS2101", "", "" manfid 0x005b, 0xf000 funcid network_adapter lan_technology wireless lan_speed 1 mb/sec lan_speed 2 mb/sec lan_speed 5 mb/sec lan_speed 11 mb/sec lan_media 2.4_GHz config base 0x0200 mask 0x027f last_index 0x05 cftable_entry 0x05 [default] Vcc Vmin 3130mV Vmax 3470mV Iavg 300mA Ipeak 300mA Idown 10mA io 0x0000-0x003f [lines=6] [16bit] irq mask 0xffff [level] [pulse]
IEEE802.11b対応の BaseBand&MAC チップ。16Bit PC Card I/F のほかに、SDIO I/F も持っている。ARM7内臓。低消費電力。
・ KS2101 BB/MAC (Base Band / Media Access Controller) ARM7TDMITM 搭載 低消費電力 44MHz/22MHz/5.5MHz/1.375MHz/32.768kHz クロック動的切り替え IEEE802.11b 準拠1/2/5.5/11Mbps 対応 IEEE802.11b DSSS 準拠 64bit/128bitWEP、TKIP、AES 対応 Short プリアンブル対応 アンテナダイバーシチ PC カードインターフェース搭載(16bit Slave 接続共用) SD カードインターフェース搭載 高速UART インターフェース搭載 PCM Codec/Stereo Codec インターフェース搭載(I2S インターフェース共用) I2C インターフェース搭載 JTAG インターフェース搭載 8bit-GPIO 搭載 内蔵マスクROM (32kByte) 内蔵SRAM (96kByte)
IEEE802.11b対応の BaseBand&MAC チップ。KS2101と互換はないらしい。これにはSDIOはない。ARM7内臓。低消費電力。
・ KS2022/23/30 RF (2.4GHz RF コンバータ/シンセサイザ) シングルチップ・トランシーバ 高リニアリティー 低雑音指数 低消費電力 リニアゲイン制御スロープ パワーマネージメント/スタンバイモード 2.7〜3.3V 単一電源 パワーアンプ用プリドライバ内蔵 (KS2023) RF VCO 内蔵 (KS2023/30) パワーアンプ内蔵 (KS2030) ダイレクト・ダウンコンバージョン方式 (KS2030)