2013年8月29日木曜日

FreeBSD 9.1 で PCIe のパラレルインタフェースボードを認識させる

状況

FreeBSD 9.1 が PCI Express 用のパラレルインタフェースボード 、玄人志向の 1P-LPPCIE2 (使用チップ: MOSCHIP MCS9901) を認識してくれなくて困ったのでメモ。

 
玄人志向 1P-LPPCIE2


1P-LPPCIE2 が FreeBSD から認識されていない状態で dmesg コマンドで見ると
pci1: <simple comms, parallel port> at device 0.2 (no driver attached)
と表示される。海外の掲示板には同じチップの MCS9901 を使ったボードが使えたという記事もあったので、OS は対応はしている模様。そこで、カーネルのソースコードを書き換えてカーネルの再構築を行い、認識させる。

pciconf -lv コマンドを実行すると chip=0x99009710 と表示される(赤字部分)。

# /usr/sbin/pciconf -lv
none1@pci0:1:0:0:       class=0x070002 card=0x1000a000 chip=0x99059710 rev=0x00 hdr=0x00
  vendor     = 'NetMos Technology'
  class      = simple comms
  subclass   = UART
ppc1@pci0:1:0:2:        class=0x070103 card=0x2000a000 chip=0x99009710 rev=0x00 hdr=0x00
  vendor     = 'NetMos Technology'
  class      = simple comms
  subclass   = parallel port
※ "NetMos Technology"はMOSCHIP社の旧名。

 対策

/usr/src/sys/dev/ppc/ppc_pci.c の static struct pci_id pci_ids[] の定義に次の1行を追加して

{ 0x99009710, "MosChip MCS9901 PCIe Printer port", 0x10 }
カーネルの再構築と再起動を行ったところ、無事使えるようになった。
再構築前と再構築後で dmseg コマンドの表示は次のように変わる。

再構築前

# dmesg
pci1: <simple comms, parallel port> at device 0.2 (no driver attached)

再構築後
# dmesg
ppc1: <MosChip MCS9901 PCIe Printer port> port 0xee00-0xee07,0xed00-0xed07 mem 0xfddfd000-0xfddfdfff,0xfddfc000-0xfddfcfff irq 18 at device 0.2 on pci1
ppc1: Generic chipset (EPP/NIBBLE) in COMPATIBLE mode
ppbus0: <Parallel port bus> on ppc1
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0




1 件のコメント:

  1. このパラレルポートのボードは、そもそも FreeBSD で AVR マイコンの書き込みを行う avrdude コマンドを使いたいのに、マザーボードにパラレルポートが付いていなかったので購入したもの。パラレルポートのボードの箱に「ソフトウェア等の認証キー(ハードウェアドングル)は動作いたしません」と書いてあったので心配だったが、オンボードのパラレルポートと同じく、下記のコマンドで avrdude が使えた。

    % avrdude -E noreset -y -p t85 -c bsd -U flash:w:FILENAME.hex

    返信削除