TTYとserial_coreの関係は何ですか?

TTYとserial_coreの関係は何ですか?

通常、許可されているよりも多くのファイル操作(開く、書き込みなどではない)を許可するUART用の新しい文字デバイスファイルを作成する必要があります。

私は組み込みのメインラインLinuxカーネル(v 5.4)を使用しています。

UARTドライバを見始め、多くのことを見つけました。

  1. まず、ttyファイルがたくさんあります。私はttyがTeletypewriterの略であることを知っています。ハードウェア部品ではないかと思います。
  2. その後、UARTの割り込みを処理するプロセッサ用の特定のドライバがあります。
  3. その後、serial_core.cに書かれたuart用の文字デバイスドライバがあります。

serial_core.cにはファイル操作構造はありませんが、tty_optionsを使用していることがわかりました。

ここで何が起こっているのでしょうか?これらすべてのファイルが互いにどのように関連付けられているのか、正確にどのような役割を果たしているのか理解できません。より正確には、それぞれの役割を理解したいと思います。私はuart用の文字デバイスドライバを書く任務を担当していますが、これらのファイルのどれか(おそらくすべて?)を私のドライバが置き換えるべきかどうかわかりません。

ありがとう、

答え1

長い間コードを読み、分析し、もう一度読んでみると、コメントが足りなくて理解しにくかったコードが少しずつ理解され始めました。

これらすべての目的は、ユーザースペースとハードウェア間の通信インターフェースを作成することです。これを行うには、モデルをユーザー空間とカーネル空間を結ぶレイヤー、カーネル空間とハードウェアを結ぶレイヤーの2つのレイヤーと考えることができます。

ユーザー空間とカーネル空間を結ぶ階層は、文字デバイスドライバ。これはTTYレイヤー、これは/ dev /にあるファイルを処理し、ユーザーからデータを取得してカーネルスペースに渡し、その逆も同様です。 TTY層は私がよく理解していない他の多くの機能を実装していますが、主な目標はこれであると言っても問題ありません。

これで、2番目のレイヤーがカーネル空間から分離され、ハードウェアに書き込まれます。これは次のように行われます。プラットフォームドライバファイルにimx.c。ドライバはハードウェアについて詳しく知っており、TTYから受け取った情報に基づいてハードウェアを制御できます。したがって、TTYはユーザーが話している内容に基づいてこの階層の機能を呼び出します。

UARTは汎用ハードウェアであるため、あまり具体的ではない機能とルーチンがたくさんあり、プラットフォームドライバ(imx.cなど)を開発するための基礎として使用されるファイルにグループ化できます。これはシリアルコア.cハードウェア固有のドライバを開発するためのAPIとやや似たように動作するファイルです。

関連情報