2011-02-01 13 views
2

私は数年間のLinux管理経験を持つビジネスプログラマーです。私は組み込みLinuxから始めています。昨日、私たちは新しいデバイスデザインについて議論していました。私は答えがなかったいくつかの質問を受けました。組み込みLinux、ボタンを押すだけでシリアルポートの使用を切り替える方法は?

エンジニアは、電子ボードにシリアルポートが付いたプッシュボタンをいくつか持ちたいと考えています。 OSはLinuxです。

通常、ユーザーがシリアルポートに接続すると、Linuxのログインプロンプトではなく、ユーザーがプロトコルに応答します。しかし、彼がデバイス上の一連のボタンを押すと、Linuxプロンプトは代わりにシリアルポートで彼に答えます。

プッシュボタン割り込みを処理するLinuxドライバは、どうやってそのようなシリアルポートの基本的な使い方を切り替えることができますか?誰にどのようにこれを行うには、URLの参照を持っていますか? (できればいくつかのサンプルコードで)

注:特定のユーザーのログイン時にはいいメニューを提供することを提案しましたが、できません。

アドバイスありがとうございます。

敬具、 バート

答えて

1

主な問題は、お使いのデバイスのプロトコルを実装プロセスは、おそらくシリアルポートが開いて維持されていることです。 - 完全にそのプロセスを終了することもでき

  • のために行う可能性がありますボタンイベントのため

    1. 待ち

    2. は、プロトコル処理は、シリアルポートを閉じている:あなたはおそらく必要があります。この場合

      *gettyプロセスを起動するか、組み込みターゲットがシリアルポート上にログインプロンプトを表示するために使用するもの

    3. あなたが完了したら3210
    4. は、プロトコル処理を復元

    EDIT:ステップで

    私はより一般的な場合を想定上方場合、シリアルポートを制御するプロセス(例えばpppd)は、gettyの代わりにログインプロンプトを提供することができません。通常は、telnet/SSH /どのようなログインでも同じプロセスではありません。

    つまり、カスタマイズされた組み込みLinuxシステムでは、プロセスが複数のことを行うことが可能です。その場合、必要に応じて動作モードを切り替えるために、そのプロセスを設定または変更する必要があります。

    埋め込み対象に関する詳細がない場合は、より具体的な回答を提供することは不可能です。

  • +0

    です。 私の知らないことを許しているので、テルネットまたはSSHのLinuxログインプロンプトは、シリアルポートプロンプトと同じプロセスで制御されていませんか? – quadmore

    +0

    @quadmore:一般的にいいえ。一つは 'getty'プロセスであり、もう一つはネットワークサーバです。あなたのプロトコルプロセスは、おそらく別のものです – thkala

    0

    gettyのプロセスは、通常、シリアルポートで開始され、/sbin/initというログインプロンプトを提供します。これは/etc/inittabに設定されています。

    initには「ランレベル」の概念があります。各ランレベルは、initが実行し続ける個別のプロセスセットを定義します。これを実装するうまい方法の1つは、 "プロトコル"プロセスをinitによって開始されるように設計することです。gettyと同じ方法です。 initには、いくつかのランレベルでプロセスを実行し、gettyにはプロセスを実行するように指示し、ランレベル間には押しボタンスイッチがあります。たとえば、あなたの/etc/inittabは、次のものがあります

    T0:2:respawn:/sbin/getty -L ttyS0 9600 vt100 
    P0:345:respawn:/sbin/protocol ttyS0 9600 
    

    このランレベル3、4と5の最初のシリアルポートにあなたのコマンドを実行します。ランレベル2のgettyです。

    関連する問題