I.はじめに
「LinuxTTYFramework(1)_Basic Concepts」の紹介によると、Linuxカーネルでは、TTYはさまざまなタイプの端末の略語です。Linuxカーネルは、端末の使用と端末ドライバーの作成を簡素化するために、TTYフレームワークを抽象化します。上部には、端末を使用するための統一されたインターフェイスを提供し、下部には、端末ドライバーを作成するための統一されたフレームワークを提供します(シリアルドライバなど)。
この記事は、Linuxフレームワーク分析の2番目の記事であり、アーキテクチャ全体の観点から、後続の分析のために比較的独立したサブモジュールを分解するためにLinuxTTYフレームワークを紹介します。
第二に、ソフトウェアアーキテクチャ
LinuxカーネルのTTYフレームワークは「drivers / tty」ディレクトリにあり、そのソフトウェアアーキテクチャを下の図1に示します。
他のLinuxフレームワークと同様に、TTYフレームワークはTTYコアを介してTTY関連の技術的な詳細を保護し、文字デバイスの形式でアプリケーションへの統合インターフェイスを提供し、TTYデバイス/ TTYドライバーの形式でドライバーを作成するためのフレームワークを提供します。詳細については、以下の章を参照してください。
2.1、TTYコア
TTYコアはTTYフレームワークのコアロジックであり、その機能は次のとおりです。
1)文字デバイスの形式でTTYデバイスにアクセスするためのインターフェイスをユーザースペースに提供します。次に例を示します。
デバイス番号(プライマリ、セカンダリ)文字デバイス備考
(5、0)/ dev / tty制御端末
(
5、1 )/ dev / consoleコンソール端末(4、0)/ dev / vc / 0または/ dev / tty0仮想端末
(4、1)/ dev / vc / 1または/ dev / tty1上記と同じ
...……
(x、x)/ dev / ttyS0シリアル端末(名前とデバイス番号はドライバーが独自に決定します)
… ……
(x、x)/ dev / ttyUSB0USBからシリアルポート端子
…………
注1:制御端末、コンソール端末、仮想端末などの概念は比較的抽象的であり、以降の記事で詳しく紹介します。
2)デバイスモデルのstruct device構造体を介してTTYデバイスを抽象化し、struct tty_driverを介してデバイスドライバーを抽象化し、対応するレジスタインターフェイスを提供します。TTYドライバーの書き込みは、対応するstructtty_driver構造体に入力して登録するように簡略化されています。
注2:TTYフレームワークはTTYデバイスの概念を弱めます(図1で破線のボックスでマークされています)。通常、TTYドライバーを登録するときにTTYデバイスを自動的に割り当てて登録できます。
3)structtty_structやstructtty_portなどのデータ構造を使用して、TTYデバイスとその「コンポーネント」を論理的に抽象化し、ハードウェアに依存しないロジックを実現します。
4)TTYハードウェアにデータを送信する前、およびTTYデバイスからデータを受信した後、Line Discipinesという名前のモジュールを抽象化し、対応する処理(特殊文字の変換など)を実行します。
2.2、システムコンソールコア
Linuxカーネルのシステムコンソールには、2つの主要な機能があります。
1)ユーザーが対話型操作のためにログインできるように、システムにコンソール端末を提供します。
2)カーネルコードのログ出力にprintk関数を提供します。
2.3、TTY回線分野
Line Disciplinesは、TTY Frameworkの非常にエレガントなデザインであり、デバイスドライバーとアプリケーションインターフェイスの間の適応レイヤーと見なすことができます。文字通り、TTYドライバーがTTYデバイスを介して入力した文字を1行ずつのデータに変換するのを支援することです。もちろん、実際の状況はこれよりもはるかに複雑です。たとえば、中国では、 Wowo xプロジェクトには、次のLine Disciplinesがあります(接頭辞n_、フォローアップ記事で詳しく説明します)。
pengo @ DESKTOP-CH8SB7C:〜/ work / xprj / linux $ ls drivers / tty / n_ *
drivers / tty / n_gsm.c drivers / tty / n_r3964.c drivers / tty / n_tracesink.c drivers / tty / n_tty.c
drivers /tty/n_hdlc.c drivers / tty / n_tracerouter.c drivers / tty / n_tracesink.h
2.4、TTYドライバーとシステムコンソールドライバー
最後に、カーネルとドライバーのエンジニアは、特定のTTYデバイスドライバーに関心を持っています。カーネルによって構築されたこのようなビューティーフレームワークを使用すると、対応するドライバーを作成することは比較的簡単なことです。もちろん、カーネルには、主に2つのタイプのTTYドライバーがあります。
1)drivers / tty / vtにある仮想ターミナル(VT)ドライバーは、VT関連の機能を実装する責任があります(以降の記事で詳しく説明します)。
2)シリアルサブシステムとも呼ばれるシリアルターミナルドライバーは、drivers / tty / serialにあります。
3、まとめ
この記事では、Linux TTY Frameworkのソフトウェアフレームワークについて簡単に紹介します。目的は、LinuxTTYのソフトウェア実装全体を理解することです。この記事の説明に基づいて、フォローアップでは、次の観点からTTYフレームワークの分析を継続する予定です。
制御端末、コンソール端末、仮想端末などの概念の理解と解釈。
TTYコアの分析;
システムコンソールコアの分析。
シリアルサブシステムの分析;
仮想端末(VT)の分析。
ライン分野の紹介と分析;
等々。
4、参照ドキュメント
[1] TTYドライバー分析
[2]制御端末、https://linux.die.net/man/4/tty
[3] https://utcc.utoronto.ca/~cks/space/blog/unix/TTYLineDisciplineWhy
これは切り替えられました:カタツムリの巣技術、www.wowotech.net