COMDRVLNX-317 Driver Rev 4.0
Installation on RedHawk 6.5-8.4
for Contec Serial board
Release Notes
August 31, 2022

1. Introduction:
このドキュメントは、RedHawk 6.5.x、7.0.x、7.2.x、7.3.x、7.3.x、7.5.x、8.0.x,8.2.x,8.4.x に Contec 社
製 Linux COM デバイスドライバとテストプログラムをインストールするためのものです。

2. Requirements:
以下のボード、カードで動作可能です。
<PCI ボード>
COM-2(PCI)H, COM-4(PCI)H, COM-8(PCI)H,COM-2PD(PCI)H, COM-4PD(PCI)H,COM-1(LPCI)H, COM-2(LPCI)H, COM-4(LPCI)H,COM-1PD(LPCI)H, COM-2PD(LPCI)H,COM-2P(PCI)H, COM-4P(PCI)H,
COM-2CL-PCI, COM-4CL-PCI,COM-2DL-PCI, COM-4DL-PCI,
COM-8C-LPCI,CPS-COM-1PC, CPS-COM-2PC,CPS-COM-1PD, CPS-COM-2PD<PCI Express ボード>
COM-1C-LPE, COM-2C-LPE, COM-4C-LPE, COM-8C-LPE,
COM-2C-PE, COM-4C-PE, COM-8C-PE,
COM-2PC-PE, COM-4PC-PE,
COM-2PD-PE, COM-4PD-PE,
COM-1PDH-LPE, COM-2PD-LPE
ただし COM-2PD(PCI)H, COM-4PD(PCI)H,COM-1PD(CB)H, COM-2PD-PE, COM-4PD-PE,
COM-1PDH-LPE, COM-2PD-LPE,
CPS-COM-1PD, CPS-COM-2PD は全二重のみをサポートしています。

3. Installation:
COMDRVLNX317 ドライバは、IRQ 共有をサポートするように設計されています。 このデバイスの IRQが別のデバイスによって共有されている場合、このドライバのパフォーマンスが低下する可能性があります。 したがって、可能な限り、このボードを IRQ が他のデバイスと共有されていない PCI スロットに移動します。 「lspci -v」コマンドを使用して、システム内のさまざまなデバイスの IRQ を確認できます。
COMDRVLNX317 ドライバは、CDROM / DVD の RPM/DEB 形式で提供されます。 これは動的にロード可能なドライバであり、一度インストールすると、modprobe comdrv.ko コマンドでロードする必要はありません。 modprobe – r comdrv コマンドを発行してアンロードできます。
CDROM/DVD からドライバを抽出するための一般的なコマンドは次のとおりです。
RPM パッケージの場合> === as root ===# mount /dev/sr0 /mnt
# cd /mnt# rpm -ivh COMDRVLNX-317-4.x86_64.rpm
Verifying...
################################# [100%]
準備しています...
################################# [100%]
更新中 / インストール中...
1:COMDRVLNX-317-4################################# [100%]
Please wait a minute.
Compile Drivers==== Cleaning ...
==== standard ...
==== debug ...
==== trace ...
==== All Done
Load Drivers
serinfo:1.0 driver revision:
0: uart:XR16850 port:0000B000 irq:78 tx:0 rx:0
1: uart:XR16850 port:0000B008 irq:78 tx:0 rx:0
All the source for this product has been installed.
To build and install the objects manually:
the following steps. Then:
To build the driver:
cd /usr/src/contec/comdrv/driver
make clean; make# umount /dev/sr0
DEB パッケージの場合
注意：メディアからのインストール時に問題に遭遇した場合、メディア挿入後に”setfacl -m
g::5,o::5 /マウントポイント/*”のコマンドを実行してください：# mount /dev/sr0 /mnt
# cd /mnt# apt install ./comdrvlnx-317-4.deb
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
注意、'./comdrvlnx-317-4.deb' の代わりに 'comdrvlnx' を選択します
以下のパッケージが新たにインストールされます:
comdrvlnx

アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 22 個。
この操作後に追加で 0 B のディスク容量が消費されます。
取得:1 /mnt/comdrvlnx-317-4.deb comdrvlnx all 317-4 [814 kB]
以前に未選択のパッケージ comdrvlnx を選択しています。
(データベースを読み込んでいます ... 現在 308234 個のファイルとディレクトリがインストールされています。).../comdrvlnx-317-4.deb を展開する準備をしています ...
comdrvlnx (317-4) を展開しています...
comdrvlnx (317-4) を設定しています ...
Please wait a minute.
Compile Drivers==== Cleaning ...
==== standard ...
==== debug ...
==== trace ...
==== All Done
Load Drivers
serinfo:1.0 driver revision:
0: uart:XR16850 port:00002000 irq:16 tx:0 rx:0
1: uart:XR16850 port:00002008 irq:16 tx:0 rx:0
All the source for this product has been installed.
To build and install the objects manually:
the following steps. Then:
To build the driver:
cd /usr/src/contec/comdrv/driver
make clean; make
W: Repository is broken: comdrvlnx:amd64 (= 317-4) has no Size
information# umount /dev/sr0COMDRVLNX317 ドライバファイルは、CDROM/DVD ドライブから/usr/src/contec ディレクトリにインストールされます。
ドライバを再構築する必要がある場合：> === log in as root ===# cd /usr/src/contec/comdrv/driver# make config;make;make install
注意！！ make がモジュールバージョン関連のエラーで失敗した場合は、「現在実行中のRedHawk カーネルでのドライバのビルド」の指示（下記参照）に従う必要があります。 完了したら、上記のようにドライバ再作成する必要があります。
# cat /proc/tty/driver/ContecSio
serinfo:1.0 driver revision:
0: uart:XR16850 port:0000B000 irq:78 tx:0 rx:0
1: uart:XR16850 port:0000B008 irq:78 tx:0 rx:0

4. Removal of the Package.
COMDRVLNX317 ドライバは、次のように削除可能な動的なドライバです。
RPM パッケージの場合> === as root ===# rpm -e COMDRVLNX-317-4.x86_64==== Cleaning ...
Now In /usr/src/contec, to remove source
DEB パッケージの場合> === as root ===# apt purge comdrvlnx
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
comdrvlnx*
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 22 個。
この操作後に追加で 0 B のディスク容量が消費されます。
続行しますか? [Y/n] Y(データベースを読み込んでいます ... 現在 308244 個のファイルとディレクトリがインストールされています。)
comdrvlnx (317-4) を削除しています ...
==== Cleaning ...
Now In /usr/src/contec, to remove source(データベースを読み込んでいます ... 現在 308234 個のファイルとディレクトリがインストールされています。)
comdrvlnx (317-4) の設定ファイルを削除しています ...
No source to remove at /usr/src/interface
注意！！ ドライバパッケージに変更を加えた場合は、/usr/src/contec ディレクトリを削除する前にそれらをバックアップする必要があります。そうしないと、すべての変更が失われます。

5. Build and run the driver test programs
ドライバテストプログラムのビルドと実行> === as user ===# cd /usr/local/CNC/drivers/comdrvlnx/test/# make# ./com_loop -h
usage: com_loop -t [Test device name] -n [Non test device name] [ -p test_pattern] [-l test loop]
ExamplesDefault Speed Test(38400 bps)./com_loop -n /dev/ttyCom0 -t /dev/ttyCom1
Default Speed Test(38400 bps) and Fixed Pattern Test\n");./com_loop -n /dev/ttyCom0 -t /dev/ttyCom1 -p 0x5555
Normal Speed Test./com_loop -n /dev/ttyCom0 -t /dev/ttyCom1 \-B [50|75|110|134|150|200|300|600|1200|1800|2400|4800|9600|19200|38400|57600|115200|230400|460800|921600]\6. Changelog
リリース 4
Ubuntu 版 RedHawk に対応
standard , debug , trace カーネルの何れか３つをがインストールされていない場合にドライバパッケー
ジのインストールが失敗する不具合を解消した。
x86_64(RPM) , amd64(DEB) , arm64(DEB) のリリースに対応した。

リリース 3
RedHawk8.0,8,2,8.4 に対応

注意事項
1 Version 2 との違い
COMDRV(LNX) バージョン 2 との違いは以下のようになります。
Ver 2.x
COMDRV(LNX) バージョン
ポート名ボード ID 固定 ※1
RedHawk6.0.x(kernel2.6.x)
RedHawk6.3.x(kernel3.5.x)
対応 RedHawk バージョン

半二重サポート

Ver 3.x
動的配置
RedHawk6.5.x(kernel3.10.x)
RedHawk7.0.x(kernel3.16.x)
RedHawk7.2.x(kernel4.1.x),
RedHawk7.3.x(kernel4.4.x)
RedHawk7.5.x(kernel4.9.x)
RedHawk8.0.x(kernel4.14.x)
RedHawk8.2.x(kernel5.4.x)
RedHawk8.4.x(kernel5.10.x)
不可 ※1

可 ※1
ioctl()で、COMDRV_IOCTL_HALFDUPLEXCOMDRV_IOCTL_DUPLEXを利用※2
系列外ボーレートサポート可※2可※3
2000,3600,7200,14400,76800,153600 ioctl()で、ドライバパラメータを利用
速度を B38400 に設定し、TIOCSSERIAL を利用。
※1 詳細は/usr/src/contec/comdrv/readmej を参照してください※2 使用方法は/usr/local/CNC/drivers/comdrvlnx/test/com_loop.c を参照してください
変更毎に、”Use of setserial/setrocket to set SPD_* flags is deprecated”がコンソール出力されます。
※3 使用方法は注意事項 3 を参照してください

2 COMDRV ドライバが標準的にサポートするボーレートについてCOMDRV ドライバが標準的にサポートするボーレートは以下の通りです。
COM-2(PCI)H, COM-4(PCI)H, COM-8(PCI)H,COM-2PD(PCI)H, COM-4PD(PCI)H,COM-1(LPCI)H, COM-2(LPCI)H, COM-4(LPCI)H,COM-1PD(LPCI)H, COM-2PD(LPCI)H,
COM-8C-LPCI,
COM-1(CB)H, COM-2(CB)H, COM-4(CB)H,
COM-1PD(CB)H,
COM-1C-LPE, COM-2C-LPE, COM-4C-LPE, COM-8C-LPE,
COM-2C-PE,COM-4C-PE,COM-8C-PE,
COM-2PC-PE,COM-4PC-PE,
COM-2PD-PE,COM-4PD-PE,COM-1PDH-LPE,COM-2PD-LPE,
CPS-COM-1PC,CPS-COM-2PC,
CPS-COM-1PD,CPS-COM-2PD
921600, 460800, 230400, 115200, 57600, 38400,28800, 19200, 9600, 4800, 2400, 2000, 1800,1200, 600, 300, 200, 150, 134, 110, 75, 50
COM-2CL-PCI, COM-4CL-PCI, COM-2DL-PCI, COM-4DL-PCI
230400, 115200, 57600, 38400,28800, 19200, 9600, 4800, 2400, 2000, 1800,1200, 600, 300, 200, 150, 134, 110, 75, 50

3 Linux 標準 TTY ドライバ API でサポートされていない回線速度
RedHawk バージョンでは、Linux 標準 TTY ドライバ API でサポートされていない回線速度に対応するために、拡張を行っています。
”fcsp=速度”で設定した速度を、ドライバ内で”tcsp=速度”で置き換えることができます。
# modinfo comdrv
filename:/lib/modules/5.4.66-rt38-RedHawk-8.2-trace/extra/comdrv.ko.gz
alias:
Contec Serial Driveralias:
char-major-111-*
description: Contec Serial Driverauthor:
CONTEClicense:GPL
srcversion: A767FA5A266D27DA4F8B08D
depends:
retpoline:Y
name:comdrvvermagic:
5.4.66-rt38-RedHawk-8.2-trace SMP preempt mod_unloadparm:fcsp:From Convert Speed Parameter (uint)parm:tcsp:To Convert Speed Parameter (uint)parm:share_irqs:Share IRQs with other non-8250/16x50 devices (unsafe) (uint)parm:
nr_uarts:Maximum number of UARTs supported. (1-32) (uint)parm:
skip_txen_test:Skip checking for the TXEN bug at init time (uint)parm:probe_rsa:Probe I/O ports for RSA (array of ulong)
この設定は、insmod comdrv.ko 時のオプションパラメータとして、設定するか、/etc/modprobe.d/ccrt_comdrv.conf に以下の記述を行うことで、可能になります。
# cat /etc/modprobe.d/ccrt_comdrv.conf# /etc/modprobe.d/ccrt_comdrv.conf
options comdrv fcsp=921600
options comdrv tcsp=76800
設定を行うと、プログラムあるいは、コマンドにおいて fcsp=で指定した速度を設定すると、tcsp で設定した速度に置き換ります。
以下に、その例を示します。
# stty -F /dev/ttyCom0 921600# dmesg::
ContecSio:Convert Speed Parameter from 921600(1) to 76800(12)下記の表において赤枠で示した部分のボーレートは標準的には設定できないため、上記の方法で設定を行います。
この際、分周レジスタに設定する値が、（）の値です。（上記例では(12)）

特記事項 1
現象：
COM-4PD/COM2-PD の全２重通信を Linux で行う場合、comtest の CRTSCTS フラグを OFF に設定しても、RTS-CTS 線を接続、あるいは DIP-SW で接続しないと、送信が行えない。
ドライバのソースコードでは、正しく
if (up->capabilities & UART_CAP_EFR) {unsigned char efr = 0;/*
* TI16C752/Startech hardware flow control. FIXME:* - TI16C752 requires control thresholds to be set.
* - UART_MCR_RTS is ineffective if auto-RTS mode is enabled.
*/
if (termios->c_cflag & CRTSCTS)
efr |= UART_EFR_CTS;
serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
if (port->flags & UPF_EXAR_EFR)
serial_port_out(port, UART_XR_EFR, efr);
else
serial_port_out(port, UART_EFR, efr);}を呼び出していることを確認した。
また、HW マニュアルの出力ポート（ENHANCED REGISTTERS)のオフセット２の上位２ビット(AUTOCTS|AUTO-RTS)のビットが０で出力されていることも確認した。
つまり、Contec 社のデバイスドライバは、まったく正しい記述であるにも関わらず、HW 的な処理を行う必要がある。
また、 同一チップセットを利用した COM-2C-PE(RS232C)では、同一プログラム(comtest の CRTSCTSフラグを OFF に設定したもの）で、RTS-CTS ケーブル接続無しに通信が成立する、この時、ターミネータは、ON でも OFF でも同じ動作である。
Contec 社からの回答：
ご指摘いただきました COM-2PD-PE および COM-4PD-PE にて CRTSCTS フラグを OFF に設定しても、RTS-CTS 線を接続、あるいは DIP-SW で接続しないと、送信が行えない状況ですが、これは仕様となっております。
送信のゲート制御を RTS 信号で行っているため、RTS 信号が未接続の状態ですと送信のゲート制御が行えないため送信が行えません。
CRTSCTS フラグを OFF とされた場合でも RTS-CTS 線の接続、または DIP-SW で接続する必要がございます。
お手数ではございますが、RTS-CTS 線の接続、もしくは DIP-SW 設定をされた状態で運用いただけますでしょうか。
なお、RS-232C の COM-2C-PE ではこの仕様としておりませんので RTS 信号が接未続の状態でも送信が可能となっております。

特記事項 2
現象：
COM-2PD-LPE でデータ長:8bit、STOP ビット:1bit、パリティ無し、ボーレート:9,600bps に設定した場合、図 1 のように STOP ビットが 1bit 分余計に出力される。

図1

COM-2PD-LPE の波形

Contec 社からの回答：
COM-2PD-LPE の仕様として、送信データ間に、送信 OFF のインターバル時間が入ります。
STOP ビットを 1bit もしくは 2bit に設定した場合、インターバルとして 1bit の時間だけ送信 OFF 状態となります。
（例：STOP ビットを 1bit に設定した場合、STOP ビット 1bit + インターバル 1bit の合計 2bit）
そのため、転送時間を計算する際には、上記インターバル時間を考慮していただきますようお願い致します。
例えば、データ長:8bit、STOP ビット:1bit、ボーレート:9,600bps の場合、1 データあたりの信号は 11bit 分の長さ（START1bit + データ 8bit + STOP1bit + インターバル 1bit）となり、1 データあたりの転送時間は約 1.145ms となります。
また、1 ビット挿入を OFF にする機能はなく、自動イネーブル機能を OFF にしても、同様の現象となります。
■参考情報
シリアル通信の仕様上、設定された STOP ビット以上の長さで出力されれば問題ございません。
上記のとおり、送信データ間に送信 OFF インターバルが入るだけであり、受信側で通信不良になることはございません。
1 ビット挿入しない RS422/RS485 ボードですと、現行品ですと以下の製品が該当します。
・PCI Express
COM-2PD-PE
COM-4PD-PE
・PCI
COM-1PD(LPCI)H
COM-2PD(LPCI)H
COM-2PD(PCI)H
COM-4PD(PCI)H図 2 COM-2PD-PE の波形