自作プログラムでCPUの種別・機能を判定したいので手始めにCPUID等をintelのsSpec Numberよりホームページから得るプログラムを作った。
玄箱標準状態のMonta Vista Linuxでテストした。

実行結果のサンプル 実行結果のCSVファイル

ダウンロードURL

http://processorfinder.intel.com/details.aspx?sspec=sSpec Number
上記の部分をSpec Number(たとえば Pentium 4 550J ならsl833)変えれば取得できる。
なお、ページの文字コードはutf-8なので注意。

プログラムの概要

  1. まず、wgetコマンドでホームページをダウンロードしカレントディレクトリへ保存する。
  2. その読み込んだホームページをds.plにリダイレクトし標準出力へCPUID等を出力する。
  3. 1~3.の手順をds.shというファイルに記述する。
  4. bash ss.sh スペックナンバー spec.txt で1個のsSpecに対するCPUID等をspec.txtに保存できる。
  5. sSpecの一覧表をintelの製品情報やサポート等から取得し 4の記述をaa.shに記述する。
  6. 漢字コードを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

ds.sh ss.plのダウンロード

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 &gt; Processor Spec Finder Home &gt; sSpec Details/){
			s/Home &gt; Processor Spec Finder Home &gt; 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";
}