RaQ550 kernel recompile

投稿者: | 2011年2月16日

RaQ550 Strongbolt +BlueOnyx化が(ほぼ)完了したのだが

もうひとつの懸案が「シリアルポート増設」
RaQ550のPCIスロットにシリアルカードを挿してシリアルポートを増やしたい。
USBで増やすっていう手もあるけれど、USBは安定運用を考えると今ひとつ。

用意したのは4ポートシリアル増設カード
16550A互換ってことで汎用性高い(はず)
スロット1個で4ポート増やせるのもRaQ向け

現カーネルではPCIカードの認識はされるけど、使えないっていう状況。
実はRaQ550にB.O.入れたのも、この辺りを何とかしたかったからなんだけど
B.O. CentOS5.5 にしたからってカーネルが変わるわけじゃないって
後から気づいた

dmesg シリアルポートが登録できないって
Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing disabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
PCI: Found IRQ 11 for device 0000:01:08.0
Couldn’t register serial port 0000:01:08.0: -28
loop: loaded (max 8 devices)

ls /dev/ttyS* デバイが使えない
/dev/ttyS0  /dev/ttyS1

lspci PCIカードは見えてるんだけどね
01:08.0 Serial controller: NetMos Technology PCI 9845 Multi-I/O Controller (rev 01) (prog-if 02 [16550])
        Subsystem: LSI Logic / Symbios Logic 0P4S (4 port 16550A serial card)
        Flags: medium devsel, IRQ 11
        I/O ports at fcf8 [size=8]
        I/O ports at fcf0 [size=8]
        I/O ports at fce8 [size=8]
        I/O ports at fce0 [size=8]
        I/O ports at fcd8 [size=8]
        I/O ports at fcc0 [size=16]

増設したシリアルポートが使えないのはカーネルパラメーターでuartポートの数を標準搭載の2に制限してるから…って解るまでにどんだけかかったか(泣)

パラメータを変更した上でkernelをコンパイルし直さないといけない。

Strongbolt開発元のOS Officeはソース公開に消極的
社名のOSってOpen Sourceってことじゃないみたい

かろうじて前バージョンのkernelソースがダウンロード可能となっているので
これを使うことにする。

ちなみにネタ元はこちら

手順

カーネルソースダウンロード

カーネルパラメータ設定変更
make menuconfig

Device Drivers > Character Dvices > Serial drivers
 Maximum number of 8250/16550 serial ports  2 から 32 へ増やした
 Number of 8250/16550 serial ports to register at runtime 2 から 6 へ増やした

リコン
make vmlinux

make modules

インストール
make modules_install

cp /boot/vmlinux.bz2 /boot/vmlinux-`uname -r`.bz2
chmod 0644 /boot/vmlinux-`uname -r`.bz2
bzip2 -4 vmlinux
cp vmlinux.bz2 /boot

再起動

無事に認識され使えるようになりました。

Serial: 8250/16550 driver $Revision: 1.90 $ 6 ports, IRQ sharing disabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
PCI: Found IRQ 11 for device 0000:01:08.0
0000:01:08.0: ttyS4 at I/O 0xfcf8 (irq = 11) is a 16550A
0000:01:08.0: ttyS5 at I/O 0xfcf0 (irq = 11) is a 16550A
0000:01:08.0: ttyS2 at I/O 0xfce8 (irq = 11) is a 16550A
0000:01:08.0: ttyS3 at I/O 0xfce0 (irq = 11) is a 16550A
loop: loaded (max 8 devices)

ls /dev/ttyS*
/dev/ttyS0  /dev/ttyS1  /dev/ttyS2  /dev/ttyS3  /dev/ttyS4  /dev/ttyS5

めでたし・めでたし