久しぶりにマジメなネタ!(笑)

色々としたサーバ遊びの題材として、HP製のProLiant MicroServerを使っています。とにかく小さくて、何よりも新品が安く買えます。私は1万5千円位で購入しました(^ ^)/

先日、ちょっとしたテストでシリアルポート(RS-232C)を使いたかったのですが、何気なく機材の裏を見たら・・・シリアルポートが付いていない???
サーバ機だとUPSからのシャットダウン信号を貰ったのするので、てっきり付いているものと思いましたが無い。あぁぁぁ。

USBを使った仮想シリアルポートじゃなくて、「本物のシリアルポート」が欲しかったもので、これはカードを追加するしかないなと思い、探してみたら・・・無いんですね、今時は。結構高価な複数のシリアルポートをサポートするボードはまだ流通している様ですが、そこまで必要ないしなぁ・・・と思案していたら、玄人志向さんで2S-LPPCIeというボードがあるのを見つけました。1ポートモデルの1S-LPPCIe/Uという製品もありましたが、PCIeはボードの固定の為に使うだけでUSBをシリアルに変換するだけみたいです。これじゃダメ。2S-LPPCIはPCIなのですが、PCIeを使いたいので2S-LPPCIeに決定。

さて、FreeBSD 9.2Rでは見事に認識しません!(笑)
チップのMCS9922に対応していないのですね。この辺りは色々と情報が出ていますが、2S-LPPCIeそのものでFreeBSDに対応されたこちらのサイトを参考にさせて頂きました。
先のサイトでは8.4にパッチを当てていますが、私は9.2で行きます(いや、なぜかMicroServerで8.4のインストールに失敗するんだ・笑)。

以下が8.4用のパッチでした。

--- ./sys/dev/puc/pucdata.c.orig	2013-03-28 22:04:51.000000000 +0900
+++ ./sys/dev/puc/pucdata.c	2013-06-19 11:07:09.000000000 +0900
@@ -1082,6 +1082,12 @@
 	    PUC_PORT_2P, 0x10, 4, 0,
 	},
 
+	{   0x9710, 0x9922, 0xa000, 0x3002,
+	    "NetMos NM9922 Dual UART",
+	    DEFAULT_RCLK,
+	    PUC_PORT_2S, 0x10, 4, 0,
+	},
+
 	{   0xb00c, 0x021c, 0xffff, 0,
 	    "IC Book Labs Gunboat x4 Lite",
 	    DEFAULT_RCLK,
--- ./sys/dev/uart/uart_bus_pci.c.orig	2013-03-28 22:04:56.000000000 +0900
+++ ./sys/dev/uart/uart_bus_pci.c	2013-06-19 11:08:00.000000000 +0900
@@ -119,6 +119,7 @@
 { 0x9710, 0x9820, 0x1000, 1, "NetMos NM9820 Serial Port", 0x10 },
 { 0x9710, 0x9835, 0x1000, 1, "NetMos NM9835 Serial Port", 0x10 },
 { 0x9710, 0x9865, 0xa000, 0x1000, "NetMos NM9865 Serial Port", 0x10 },
+{ 0x9710, 0x9922, 0xa000, 0x1000, "NetMos NM9922 PCIe Serial Port", 0x10 },
 { 0x9710, 0x9900, 0xa000, 0x1000,
 	"MosChip MCS9900 PCIe to Peripheral Controller", 0x10 },
 { 0x9710, 0x9901, 0xa000, 0x1000,

ちょっとディレクトリが違ったりもしますが、上記を参考に9.2へパッチをあててkernelをリビルド。ついでにお約束の余分なドライバを削ってコンパクトのkernelを作りました。

こんな感じで認識されて、無事に使えていますよ?(^ ^)/

pci2: <ACPI PCI bus> on pcib2
uart2: <Non-standard ns8250 class UART with FIFOs> port 0xe800-0xe807 mem 0xfe8ff000-0xfe8fffff,0xfe8fe000-0xfe8fefff irq 16 at device 0.0 on pci2
uart3: <Non-standard ns8250 class UART with FIFOs> port 0xe400-0xe407 mem 0xfe8fd000-0xfe8fdfff,0xfe8fc000-0xfe8fcfff irq 17 at device 0.1 on pci2

良かった良かった!