Armadilloフォーラム

G3のデバッグポートをシリアル通信ポートとして使用する方法について

sc_sato

2025年9月2日 11時40分

==========
製品型番:
Debian/ABOSバージョン:
カーネルバージョン:
3G/LTE モジュール情報 (Debianのみ):
その他:
==========

Armadillo-IoT G3 を2台使用して、それぞれアクティブ・スタンバイ役として使用することで冗長構成を検討しています。
この際に2台の死活監視する通信インタフェースとしてデバッグ用のUARTを使用することを考えております。
下記確認させて下さい。
・デバッグ用シリアルポートをシリアル通信インタフェースとして使用することは可能でしょうか。
・可能な場合に互いをクロスケーブルで接続するためのピンアサインを確認できる情報をご提供いただけないでしょうか。
・デバッグ用メッセージを無効化し、純粋に通信インタフェースとして使用する方法をご教示下さい。
・その他グランド共通化などの注意すべき点ありましたらご教示下さい。

コメント

at_shota.shimoyama

2025年9月3日 17時33分

アットマークテクノの下山です。

> ・デバッグ用シリアルポートをシリアル通信インタフェースとして使用することは可能でしょうか。
> ・デバッグ用メッセージを無効化し、純粋に通信インタフェースとして使用する方法をご教示下さい。
可能ではありますが、完璧にデバッグ用メッセージを無効化するには少し手間がかかります
CON9(ttymxc4)は
1.U-Bootのコンソール
2.Linuxのコンソール
3.Linuxのgetty
として使われており、
3番については

root@armadillo:~# systemctl mask serial-getty@ttymxc4

で無効化でき、
2番についてはU-Bootのコンソールから

setenv optargs "quiet loglevel=0"
saveenv

とすることで無効化できます

ただし、1番のU-BootのコンソールについてはU-Bootをビルドしなおす必要があるため、
https://armadillo.atmark-techno.com/blog/10899/9867 が参考になるかもしれません)
手間がかかります。

ですので、3番目のgettyだけ無効化して、「指定のプロトコルに該当しないメッセージはお互いに無視する」という処理内容にした方がお手軽かと思います。

> ・可能な場合に互いをクロスケーブルで接続するためのピンアサインを確認できる情報をご提供いただけないでしょうか。
> ・その他グランド共通化などの注意すべき点ありましたらご教示下さい。
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
に信号配列が記載されています
・左側から右側にかけて1番⇒7番です
・4番のVCCは互いに衝突する可能性があるので接続しないでください
・6番は互いに繋いでおくと予想できない挙動になるかもしれないので、接続しない方が無難です
・CON9のコネクタは何度も挿抜されることを想定しておらず、挿抜寿命は40回と少ないことにはご注意ください。

また、CON9をコンソールとして使えなくなるとデバッグが大変になりますので、有線LANコネクタを経由したIP通信を利用して死活監視を行った方が良いのではないかと個人的に思っています。(ご事情がございましたら無視してください)
何かご不明な点がございましたら遠慮なくお聞きください

よろしくお願いします

デバッグ用シリアルポートの利用について詳細な情報ご回答頂きありがとうございます。
おっしゃる通り有線LANの利用も考慮の上ですが、デバッグ用シリアルポートを利用のための課題を確認させて頂く目的で質問させて頂きました。
ご懸念頂いた通り、CON9が利用できない状態でネットワークインタフェースも繋がらない状態となった場合などのために、u-bootからserial-getty@ttymxc4をunmaskする手段を設けておく必要がありそうです。

セキュリティ対策を目的として、デバッグ用シリアルポートを下記⓵⓶で有効化/無効化する方法を検討しております。

⓵ 無効化は、ご教示頂いた下記までを実施してデバッグ用シリアルポートからのログインを無効化
systemctl mask serial-getty@ttymxc4

⓶ 有効化は、u-bootコンソールからsystemd.unitを操作して、serial-getty@ttymxc4をunmaskしたい

⓶について検討中です。そもそもG3のブートフローは「U-Boot → uImage を直接ロード → Linux 起動」という最小構成のようなので、
u-bootでbootargsを差し込むこと自体出来ず、u-bootからsystemd.unitを操作することは不可能でしょうか?

よりよい方法等あればご教示下さい。

at_shota.shimoyama

2025年10月1日 20時21分

u-bootからsystemd.unitを操作することは可能です

U-bootからbootargsを設定できるので、systemdのカーネルコマンドラインを使えます
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…

ただ、systemd.maskという引数はある一方でsystemd.unmaskという引数は無いので、Linux側ではmaskしておかずに、U-boot側であらかじめmaskを設定しておき、必要なときにU-boot側でunmaskするという方法しかないのかなと思います

1.mask

=> setenv optargs systemd.mask=serial-getty@ttymxc4.service

2.unmask

=> setenv optargs

以上の方法でよろしかったでしょうか?