状況
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※ "NetMos Technology"はMOSCHIP社の旧名。
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
対策
/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
このパラレルポートのボードは、そもそも FreeBSD で AVR マイコンの書き込みを行う avrdude コマンドを使いたいのに、マザーボードにパラレルポートが付いていなかったので購入したもの。パラレルポートのボードの箱に「ソフトウェア等の認証キー(ハードウェアドングル)は動作いたしません」と書いてあったので心配だったが、オンボードのパラレルポートと同じく、下記のコマンドで avrdude が使えた。
返信削除% avrdude -E noreset -y -p t85 -c bsd -U flash:w:FILENAME.hex