0

Linux イメージを起動し、イメージがログイン プロンプトに到達したかどうかを検出する必要がある perl スクリプトを作成しています。私は Device::serial モジュールを使用して開発ボードと通信しています。ログイン文字列を検出する際に問題が発生しています。Linux の起動中に大量の印刷が発生することに関連している可能性があると思います。以下のコードは、プロンプトをキャプチャしようとします。奇妙なことに、不要な「読み取り」コマンドを追加した場合にのみ機能します

# Wait for login prompt
$port->are_match("login:");
$gotit   = "";
$timeout = 60;
until (($gotit ne "") or ($timeout eq 0)) 
{
    $gotit = $port->lookfor;       # poll until data ready
    die "Aborted without match\n" unless (defined $gotit);
    $read = $port->read(1000000);
    $port->lookclear;
    sleep(1);
    $timeout--;
}

「lookfor」はLinuxのブートシナリオに適していますか? 「読み取り」によってこのコードが機能するのはなぜですか?

みんな、ありがとう

4

1 に答える 1

0

CPAN doc ページには、これを行うように記載されています。

  my $gotit = "";
  until ("" ne $gotit) {
      $gotit = $PortObj->lookfor;       # poll until data ready
      die "Aborted without match\n" unless (defined $gotit);
      sleep 1;                          # polling sample time
  }

$port->lookClearループ内に呼び出しはありません。これがあなたの問題に貢献していると思います。そのタイムアウトにも注意してください。

于 2012-05-01T06:57:52.783 に答える