2012-05-01 46 views
0

我正在編寫一個perl腳本來引導一個linux映像,並且需要檢測映像是否到達登錄提示符。我使用Device :: serial模塊與開發板進行通信。我遇到了檢測登錄字符串的問題。我認爲這可能與linux啓動期間發生的大量打印有關。下面的代碼嘗試捕獲提示。奇怪的足夠多的時候我加入unnecessaty它只能「讀」命令使用perl和串口設備檢測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引導方案?爲什麼「讀取」使這個代碼工作?

感謝大家

回答

0

CPAN doc page說,要做到這一點:

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 
    } 

有其循環到​​3210沒有呼叫。我懷疑這是造成你的問題。還要小心超時。

+0

是的。我只是從那裏拿到了我的初始代碼,但它沒有奏效。我添加了lookclear,因爲linux啓動會打印大量文本,所以每次lookfor函數都必須在舊打印件上工作得更久。無論如何,原來的循環不工作的原因,我不明白 – Strudle