山本ワールド
PerlでIntelサイトよりCPUIDを得る
ダウンロードURL
自作プログラムでCPUの種別・機能を判定したいので手始めにCPUID等をintelのsSpec Numberよりホームページから得るプログラムを作った。
玄箱標準状態のMonta Vista Linuxでテストした。
ダウンロードURL
http://processorfinder.intel.com/details.aspx?sspec=sSpec Number
上記の赤部分をSpec Number(たとえば Pentium 4 550J ならsl833)変えれば取得できる。
なお、ページの文字コードはutf-8なので注意。
プログラムの概要
- まず、wgetコマンドでホームページをダウンロードしカレントディレクトリへ保存する。
- その読み込んだホームページをds.plにリダイレクトし標準出力へCPUID等を出力する。
- 1~3.の手順をds.shというファイルに記述する。
- bash ss.sh スペックナンバー spec.txt で1個のsSpecに対するCPUID等をspec.txtに保存できる。
- sSpecの一覧表をintelの製品情報やサポート等から取得し 4の記述をaa.shに記述する。
- 漢字コードをUtf-8からShft-Jisに変換する。
nkf -Lw -W -s spec.txt > sj.txt
sl1833とsl684を取得する場合の、プログラムの階層は下記のような感じ bash aa.shを実行する
aa.sh | + bash ds.sh sl833 spec.txt | |+------------------- wget -O $1.htm http://processorfinder.intel.com/details.aspx?sspec=$1 | perl ss.pl < $1.htm >> $2 | + bash ds.sh sl684 spec.txt
all.sh
ほしいCPUの数だけ下記の行を繰り返して記述。
bash ss.sh sSpec Number spec.txt
ss.sh
1個のCPUのみの情報がほしい場合はss.shを実行すればよい。
wget -O $1.htm http://processorfinder.intel.com/details.aspx?sspec=$1
perl ss.pl < $1.htm >> $2
ss.pl
はじめた書いたPerlプログラムなのでかなり無駄が多いような気がする。
#! /usr/local/bin/perl # インテルのページよりCPUスペックを抽出する $t = 0; $p = 0; $tn=0; $sn=0; $pn=0; while(<STDIN>){ if($t == 1){ if(/^.*>/){ $t=0; s/^.*>//g; } } if(/<span id="ctl00_PSFContentPlaceholder_lblProcessorName" class="pageheader" style="display:inline-block;">/){ $p=1; } s/<.*?>//g; # 1行に収まっているタグを消す if(/<.*$/){ # <が見つかった場合、行の最後まで消す $t=1; }else{ s/How Do I Use This Tool\?//g; s/http:.*$//g; if(/Home > Processor Spec Finder Home > sSpec Details/){ s/Home > Processor Spec Finder Home > sSpec Details//g; } if(/Processor Specifications:/){ $p=2; s/Processor Specifications://g; } if(/Package Type:/){ $p=3; } if(/Product Order Codes:/){ $p=4; s/Product Order Codes://g; } if(/Supported Features:/){ $p=5; s/Supported Features://g; } if(/Notes:/){ $p=0; s/Notes://g; } if($p >= 1){ s/^\s*//g; $nn=$_; if($nn ne ""){ if($p == 1){ s/\r\n//g; $cpu_name=$_; $p=0; } if(2<=$p && $p <=4){ if(/:/){ s/://g; s/\r\n//g; $titles[$tn++]=$_; }else{ s/\r\n//g; $ss[$sn++]=$_; } } if(5==$p){ s/\r\n//g; if($_ =~ /\D/){ $pp[$pn++]=$_; } } } } } } $n=0; if($1 eq "-l"){ print "CPU,$cpu_name\n"; while($n < $tn && $n < $sn){ print "$titles[$n],$ss[$n]\n"; ++$n; } foreach $tt (@pp){ print "Supported Features,$tt\n"; } }else{ print "\"$cpu_name\","; while($n < $tn && $n < $sn){ print "\"$ss[$n]\","; ++$n; } foreach $tt (@pp){ print "\"$tt\","; } print "\n"; }
Copyright (C) 2012 山本ワールド All Rights Reserved.