軟件寫好後,進行一系列測試,先測試功能,再測試穩定性
perl腳本很適合做測試腳本,配合上adb,fastboot,i2ctool 等工具,可以windows/linux上使用。Android手機內安裝busybox,shell的東西基本都能用。
perl腳本也不侷限於測試,可以讀取手機配置,修改手機配置,安裝應用。
舉個例子,我們需要重複開關機,測試芯片是否成功掛載。
在kernel 我打log
xxx_chip_probe()
{
.......
rc = xxx_i2c_read(chip, CFG_BATT_CHG_REG, ®);
if (rc)
{
pr_err("Failed to detect xxx, device may be absent\n");
return -ENODEV;
}
.....
}
簡單看log
1 、在cmd終端 adb shell “dmesg | grep 'xxx' ”
2、adb reboot
然後重複1、2兩步,重複幾百次看是否穩定。
windows批處理可以實現,但是功能不完全,字符串的處理能力弱,想要存儲結果或者判斷都不方便。perl可以很好解決批處理。
查看芯片掛載情況:
功能:自動重啓手機,掛載出錯時,打印掛載信息。
$time = 1;
$try = "xxx";
while (1)
{
`adb wait-for-device`; #等待重啓完畢
$ret=`adb shell "dmesg | grep 'xxx'"`;#查找trace
print "$time "; #打印次數
if ($ret =~/$try/) #查找是否包含xxx
{
print "\n$ret\n"; #打印結果
}
$time++;
`adb reboot`; #重啓
}
說明:`cmd`反引號,執行shell命令,而且有返回值,$ret可以對字符處理,perl支持正則表達式,$ret =~/$try/,判斷返回的結果是否包含字符串xxx。
大白天,守在電腦旁邊,可以隨時查看結果。不至於錯過查看log的機會,晚上掉電或者突發,電腦可能保存不了資料。可以在這個基礎上加上文件讀寫,把log存起來。
查看芯片掛載情況:
功能:自動重啓手機,掛載出錯時,保存掛載信息。
$time = 1;
$try = "xxx";
while (1)
{
`adb wait-for-device`; #等待重啓完畢
$ret=`adb shell "dmesg | grep 'xxx'"`;#查找trace
print "$time "; #打印次數
if ($ret =~/$try/) #查找是否包含xxx
{
open (FILE_LOG, ">>mlog.log") || die ("Could not open file"); #打開文件
print FILE_LOG $ret; #存儲LOG
close(FILE_LOG); #關閉文件
}
$time++;
`adb reboot`; #重啓
}
說明:>>是追加的方式打開文件,這樣晚上就可以放心的自動測試了。
檢測了40多次,還未檢測出失敗。
這個方法可以解決很多問題,不僅侷限測試,比如讀取手機配置,修改手機配置,安裝應用。
比如實際生產,批量修改手機型號。
基本思路
1、導出build.prop配置表
2、判斷型號
3、修改型號,再把build.prop 塞進手機
4、修改build.prop文件屬性,重啓
方法和上面腳本差不多,我就不舉例了。
某些情況,要觀察中斷是否正常。遇到不清楚設備,調試的時候不清楚哪個設備發生中斷,可以用perl腳本跟蹤觀察中斷變化。以下是perl腳本:
測試/查看中斷次數:
功能:間隔時間查看中斷次數,指定中斷號,時間,如果不指定可以查看所有變化。
$first_time=1;
%tb = {};
$times=0;
($irq,$tick) = @ARGV;
print "find irq:".$irq."\n";
if($tick le 0 || $tick <=0)
{
$tick = 1;
}
print "cycle time:".$tick."\n";
while(1)
{
$ret = `adb shell cat /proc/interrupts >tmp`;
open(FILE, "<tmp");
$times=$times+1;
sleep($tick);
system("cls");
print "======================================\n";
print "===== find irq:".$irq."\n";
print "===== tick:".$tick."\n";
print "===== cycle Times:".$times."=====\n";
print "======================================\n";
while(<FILE>)
{
if (~/\s?\w+\d+\:/)
{
$key = $&;
$key =~s/\://;
}
else
{
next;
}
if (~/:\s+\d+/)
{
$value = $&;
if ($value=~/\d+/)
{
$value = $&;
if ($tb{$key} ne $value)
{
$tb{$key} = $value;
if($first_time ne 1)
{
if($irq=~/\d+/)
{
if($irq eq $key)
{
print $key." ".$value."\n";
}
}
else
{
print $key." ".$value."\n";
}
}
}
}
}
}
$first_time=0;
close(FILE);
}
20,128,166號均發生中斷,結合/proc/interrupts可以查看具體中斷信息。
perl方便在shell命令使用和文字處理能力,IO處理,語法和C語言相近,很容易入手。