kledgeb UbuntuやLinuxの最新情報を紹介

WSL その82 - Ubuntuからシリアルデバイス(COMポート)にアクセス可能に

シリアルデバイス(COMポート)にアクセス可能に

「Build 16176」にて「WSL」がシリアルデバイスのサポートを行い、「Ubuntu」からシリアルデバイスにアクセスできるようになりました。


  • Serial Support on the Windows Subsystem for Linux

WindowsのCOMポート

Windowsでは、各COMポートごとに「COM1」から「COM256」までポート名が割り当てられます。

Linuxのシリアルデバイスの扱い

一方Linuxでは、 シリアルデバイスは任意の名称を持つことができますが、通常シリアルデバイスは、メジャー番号4かつ64から256のマイナー番号の組み合わせを持つキャラクターデバイスであり、「/dev/ttyS0」から「/dev/ttyS191」のデバイスファイルで表現されます。
(256 - 64 = 192)


mknodがマッピングを行う

デフォルトでは、「init」が「mknod」システムコールを呼び、このマッピングを行っています。
また必要に応じて実行時に「mknod」によるマッピングを作成することもできます。

  • mknod - make block or character special files
  • mknod, mknodat - create a special or ordinary file

WSLでの扱いとマッピング

WSLでは、「lxcore」ドライバーがWindowsの「COM<N>」を「/dev/ttyS<N>」に結びつけることで、COMポートをLinuxのデバイスファイルへとマッピングしています。
(<N>はCOMポート番号やデバイスファイルの番号)

Ubuntuから見ると「/dev/ttyS1」はマイナー番号65であり、これは「COM1」に結び付けられます。
同様に「/dev/ttyS2」はマイナー番号66であり、これは「COM2」に結び付けられます。

ptyやttyそしてttySは、ターミナルライブラリーのコードを共有するため、ttySはptyや ttyと似たような振る舞いを行いますが、ttySは以下のtermios設定をサポートしており、この設定からWindowsのシリアルドライバーのioctlへとマッピングを行います。

設定項目 設定内容
標準のボーレート B*(*はボーレート値)
ストップビット CSTOPB
文字サイズ CSIZE
パリティーチェック PARENB
PARODD
CMSPAR
INPCK
ソフトウェアフロー制御 IXON
IXOFF
ハードウェアフロー制御 CRTSCTS
CLOCAL
制御文字 VSTART
VSTOP
VEOF

上記の仕組みを通じ、WSLはWindowsのCOMポートをシリアルデバイスとしてUbuntuに提供しています。



テストと動作確認

以下のテストケース(シナリオ)では、動作確認が行われています。

  1. Programming pixhawk light controller
  2. cuツールを利用してRaspberry Pi 2シリアルターミナルへ接続する
  3. 様々なシリアル設定上でデータを転送する

「3.」では、以下の環境でテストが行われています。

  1. Hyper-V仮想COMポート
  2. FTDI USBシリアル変換機
  3. Prolific USBシリアル変換機 
  4. 通常のCOMポート

シリアルドライバーの中には、既知の不具合があるドライバーがあります。
これらの既知の不具合は、Windows及びWSLどちらからの利用でも発生します。

動作しないケース

現状以下の使い方は動作しません。

  1. TCGETSやTCSETS*を使用せず、レガシーなraw ioctlを使用したシリアルデバイスの設定や問い合わせ
  2. 上記のアクセス方法に依存したScreenやminicom

Screenやminicomは現在シリアルターミナルとして利用することはできませんが、cuがその代わりとして利用できます。

今後リリースされるInsider buildで上記の問題を解決するため、改良作業が行われていく予定です。


WSL
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 22.04 その120 - UbuntuのブートローダーをBoot Repairで修復するには・Ubuntuが起動しないトラブルを解決
    UbuntuのブートローダーをBoot Repairで修復するには 「Boot Repair」はOSのブートローダーに起因するOSが起動しない問題を簡単に解決してくれるアプリです。
  • Ubuntu 22.04 その79 - 画面ロックの有効・無効を設定するには・画面ロック時の設定をカスタマイズするには
    画面ロックの有効・無効を設定するには 一定時間ユーザーによる操作がない時に、自動的に画面をロックしパスワードで保護したり、画面をブランク状態にできます。
  • Linux その309 - This Week in Plasma の貢献者の募集と投稿頻度の抑制
    This Week in Plasma の貢献者の募集と投稿頻度の低下 KDE で This Week in Plasma の貢献者が募集されています。
  • Ubuntu 26.04 その9 - Ubuntu Desktop 26.04 LTS の開発方針・プリインストールアプリの変更やソフトウェア管理の一元化など
    Ubuntu Desktop 26.04 LTS の開発方針 2025年11月26日、Ubuntu Desktop 26.04 LTS の開発方針がアナウンスされました。
  • Ubuntu 22.04 その95 - ディスプレイサーバーを切り替えるには・XorgとWayland
    ディスプレイサーバーを切り替えるには 「Ubuntu」はデフォルトで2種類のディスプレイサーバーを提供しています。
  • Ubuntu 22.04 その98 - 入力ソースとキーボートレイアウトと日本語入力のカスタマイズ
    入力ソースとキーボートレイアウトと日本語入力 「Ubuntu」ではユーザーが利用しているキーボードレイアウトや日本語入力のカスタマイズが可能です。
  • Ubuntu 26.04 その5 - デイリービルドのディスクイメージが利用可能に・ディスクイメージのダウンロード
    デイリービルドのディスクイメージ Ubuntu 26.04 LTS のデイリービルドのディスクイメージが利用できるようになりました。
  • VirtualBox その125 - ゲストOSのUbuntuにLinux Guest Additionsをインストールするには
    ゲストOSのUbuntuにLinux Guest Additionsをインストールするには 仮想マシンにインストールしたゲストOSの「Ubuntu」に、「Linux Guest Additions」をインストールする方法です。
  • Ubuntu nano その5 - 文字列を検索する
    文字列を検索する(Where Is)   文字列の検索は、部分一致と正規表現による検索が可能です。 検索の開始始点   現在カーソルのある位置から検索を行います。   もし、テキストの最後まで検索して文字が見つからない場合、   nanoはテキストの先頭から検索...
  • Linux その308 - KDE Plasma 6.6 で実装予定の新機能や改善・Wi-Fi 設定画面の改善や Windows ゲームのサポート改善など
    KDE Plasma 6.6 で実装予定の新機能や改善 2025年12月13日、KDE Plasma 6.6 で実装予定の新機能や改善が以下で紹介されています。
記事のピックアップ
オプション