Linux / Raspberry Pi OSでSPI-UARTアダプタのttyデバイス割り当てを修正しました。

Linux / Raspberry Pi OSでSPI-UARTアダプタのttyデバイス割り当てを修正しました。

SC16IS752アダプタから入手したシリアルポートを使用する必要があります。 /boot/config.txt で設定し、/dev に ttySC0、ttySC1、ttySC2、ttySC3 と表示され、動作します。

問題は、Raspberryを起動するたびにポートの命名に一貫性がないことです。時々、デバイスはttySC0に接続され、時にはttySC2に接続されます。

私は助けを求めようとしましたが、USB-UARTアダプタでのみ動作するソリューションを見つけました。各物理デバイスのシンボリックリンクを作成します。私がフォローしようとした解決策は次のとおりです。

静的な名前でUSBデバイスをバインドする方法は?

同じ点を適用してみましたが、パラメータに若干の違いがあって停止しました。

それでは、SPI-UARTアダプタが提供するシリアルポートへのシンボリックリンクをどのように生成しますか?

よろしくお願いします。

答え1

だから…私は自分で解決策を見つけました。

残念ながら、このソリューションは「udevとrule.dの仕組みを理解する」なので、一般化することはできません。

要点は、次のコマンドを使用して、デバイスに関するすべての可能な詳細を知ることです(質問に記載されている記事で提案されているように)。

udevadm info -a -p  $(udevadm info -q path -n /dev/ttySC0)

次に、そのデバイスのハードウェア記述を一意に見つけるために使用できるパラメータを探し、次のいずれかのファイルにそのルールを作成します。/etc/udev/rules.d

私は個人的にこのガイドを使ってudevとRules.dについて私が知っているすべてを学びました。

udevルールの作成

要約すると、パラメータを使用してハードウェアを見つけ、NAMEまたはSYMLINKを使用して新しい名前または偽名を指定する必要があります。

正しいハードウェアを見つける最も一般的なキーワードは次のとおりです。

ACTION=="<追加/削除>"- 「デバイスが接続/分離されると、このルールが適用されます。」

カーネル == "<値>"- 「カーネルフィールドに<値>を持つデバイスを探す」

サブシステム == "<値>"- 「サブシステムフィールドで<値>を持つデバイスを探す」

ドライバ=="<値>"- 「ドライバフィールドに<値>を持つデバイスを探す」

ATTR{<属性>}=="<値>"- 「属性が<属性>で値が<値>のデバイスを探す」

デバイスまたはすべての親デバイスで一致するものを確認したい場合は、ACTION(KERNELS、SUBSYSTEMS、DRIVERS、ATTRS)を除くすべてのキーワードに複数形を使用することもできます。

明らかに、ルールごとに複数のパラメータを使用でき、カンマとスペースで区切ることができます。

デバイスが正しく見つかったら、ルールの最後の部分は名前付き/記号リンクにする必要があります。

名前="<値>"- 「発見したデバイスに新しい名前を付けます(古い名前は削除します)」

SYMLINK+="<値>"- "発見したデバイスの代替名を指定してください(以前の名前を保持してください)。

たとえば、私が作成しなければならなかったルールを使用します。

KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="0", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="plSerial"
KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="2", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="plSerial"
KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="1", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="mdSerial"
KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="3", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="mdSerial"

彼らは人間の観点からこう言います。

「ttyデバイスがspi0.0ポートを使用し、名前が0または2(ttySC0またはttySC2であることを意味)の場合、これはplSerialとも呼ばれます。」

「ttyデバイスがspi0.0ポートを使用し、名前が1または3(ttySC1またはttySC3であることを意味)の場合、これはmdSerialとも呼ばれます。」

つまり、ttySC0 / ttySC2は常にplSerialとして呼び出され、ttySC1 / ttySC3は常にmdSerialとして呼び出されます。

ルールの作成後にudevadm triggerシステムを使用または再起動すると、ルールが適用されます。新しいデバイスの位置は次のとおりです。/dev/<機器名>

関連情報