Linux その10 伊藤敏 先月お約束をしたように,インターネットからソースを持って来て,Linuxで幅広く使う例を紹介します. 1. Fudgit Fudgitはデータを解析しグラフ化するソフトです.倍精度でフィッティングをしてくれます.実験をする人にとっては大変重宝なソフトでしょう. * インストール ファイルの入手先は「InformagicのLinux」の2枚目の「apps/math/fudgit_2.41.tar.gz」からです.スーパユーザになって,ファイルを展開します. # tar zxvf fudgit_2.41.tar.gz # cd Fudgit_2.41 # make linux # make install 環境設定用のファイル docs/fudgitrc を自分のホームディレクトリの「.fudgitrc」としてコピーします. % cp docs/fudgitrc ~/.fudgitrc 90ページ近くのマニュアルが用意されております.dviファイルにしましょう.docsディレクトリにあります. # cd docs Makefileの36,37行目の「latex fudgit.tex」を「jlatex fudgit.tex」に変更して, # make fudgit.dvi でdviファイルが出来ます.ぜひ印刷をして下さい. * 使い方 Fudgitを使って見ましょう.その前に,Fudgitは自分ではグラフ化のためのツールを持っておりません.そこで,GnuPlotを使うように設定をします.「.fudgitrc」の16行目ぐらいに「 set plotting "/usr/bin/gnuplot"」と書いた行がコメントになっております.行頭の「#」をとります. 感覚をつかむためにメイクをしたディレクトリの下のexamplesを実行してみましょう.起動はfudgitです. % cd examples % fudgit fudgit> と言うプロンプトが表示されます.そこで fudgit> load fft.ft とすると,1次元のフーリエ変換の例が実行されます.終了は「quit」または「exit」です. データ解析の例を紹介しましょう.リスト1に入力するコマンドを示し,実行中の様子を図1(図は後で述べるWineから実行したPainShopProを用いて取り込みました)に示します.visco.datというファイルの1列目に温度(摂氏),2列目に液晶の粘度の数値がタブで区切られて入っております.データはGPIBを通じてコンピュータに取り込み処理をしたものです.データファイルの内容は温度にして,22度から39度までのデータです.今回の目的から,34.0度から34.4度の温度範囲のデータに注目をして,粘度に関する活性化エネルギーを求めるために,温度を絶対温度に変換(273.15を加える)し,それの逆数を計算します.粘度は自然対数を取り,それらをグラフ化して,傾きを求める作業をします.これらの作業を,プログラムで作ると結構大変な作業になります.しかし,Fudgitを使うとわずかな,コマンドを入力するだけで実行できます.プログラミングに割いていた時間や,思考を中断されたことを考えると,Fudgitはデータを考えながら解析するには「欠かせない」道具といえるでしょう. リスト1. データ解析の例 read visco.dat X[34.0:34.4] Y[0.018:*] <-- データファイル visco.dat の1列目の値から34.0から34.4の間の値をベクトルXに,2列目の値が0.018以上の値をベクトルYに読み込む plot X Y <-- ベクトルX,Yをプロットする set function straight <-- 直線近似で set method ls_reg <-- 最小自乗法により set parameters K 2 <-- パラメータを2つに let X=1/(273.15+X) <-- Xの値を絶対温度に変換して,逆数をとる let Y=ln(Y) <-- Yの値の自然対数をとる fit X Y <-- カーブフィッティングする show parameters <-- フィッティングの結果を表示 fplot X Y YFIT <-- 変換操作後の元のデータとフィッティングの結果をグラフ化する 図1. データ解析の例 ***(cap-1.tif):CAP-1.TIF 2. Xplot Xplotはデータや関数をポリゴンやワイヤフレームで3次元表示(通常の2次元表示も可能)し,回転やその他の加工を可能にするプログラムです.3次元のグラフをマウスでつかんで回転する感触はなかなか楽しいです. * Xplotのインストール ファイルの入手先は「InformagicのLinux(1995.8)」の2枚目の「apps/math/xplot.tgz」からです.ディレクトリを作り,その中でファイルを展開します. % mkdir Xplot % cd Xplot % tar zxvf xplot.tgz Makefileの一部リスト1のように修正します. ------ start Table ------------- リスト1 XplotのMakefile修正 # BINDIR=/usr/local/bin <-- 8行目 コメントを外す #BINDIR=/public/bin <-- 10行目 コメントにする MANDIR= #CC = cc CC = gcc -O4 -Wall -m486 <-- 15行目 -m486の前に付いていたコメントを外す -------- end Table ---------- あとは, % make スーパーユーザになって # make install で,終了です. * 使って見よう Xplotの使用例がexamplesディレクトリにあります.その例を実行してみましょう.Kterm(またはXterm)から xplot といれると, Ktermに In[1] : とプロンプトがでます.ここへ,コマンドを打ち込みます.図2にKtermから,「klein」と「tube」を描くために,loadコマンドを実行している様子を示します.実際の入力は[1]の「load 'klein'」と[4]の「load 'tube'」だけで,他はXplotが出力したものです.「tube」の結果表示されたグラフを図3に示します.いかがですか.素晴らしい表現能力を持ってますね.なお,Xplotは3次元表示だけではなく,2次元も可能です. データからのプロットも可能です.ここでは富士山を描いて見ましょう.データの作成には,富士山付近の等高線が描かれている地図を正方形メッシュに線を描き,メッシュの交点の高さ情報をマトリックスデータとして,表計算ソフトに入力しました(このデータ作成には樋田,守屋両氏にお世話になりました).このマトリックスデータを「off」形式の画像フォーマットに変換します.off形式の説明はxplot/docのtutor.dviの12,13ページに書いてあります.簡単な説明を三角錐を例に表1に示しました.マトリックスデータから,off形式に変換するプログラムをリスト2に示します.パスカルで書いてあります.p2cとgccを用いて実行ファイルを作って下さい.それを用いて,マトリックスデータをoffデータに変換します.その後,Xplotのなかから,リスト3のコマンドを実行すると,図4の富士山が描かれます.ここでは,等高線も描いております.画面内をマウスでつかんで,好みの方角から観察が可能です. 図2. KtermからのXplot実行 ***(exec.tif):EXEC.TIF 図3. Tubeの3次元表示 ***(tube.tif):TUBE.TIF 図4. 富士山の表示 ***(fuji.tif):FUJI.TIF ------- start table 1 ---------- 表1. 三角錐 offデータフォーマット 4 3 # 4: データ点数 3:ポリゴンの数 0 0 0 # 頂点0の x y z 座標 1 0 0 # 頂点1の x y z 座標 0.5 1.7 0 # 頂点2の x y z 座標 0.5 0.5 1 # 頂点3の x y z 座標 3 0 3 1 # 0 3 1の3頂点で1つの面を作る 3 1 3 2 # 1 3 2の3頂点で1つの面を作る 3 0 1 2 # 0 1 2の3頂点で1つの面を作る -------- end table 1 -------- ------------ start list 2 ---------- リスト2. マトリックスデータからoff形式へ変換 program matrix2(input,output); var a,b,data,expand : real; nc,nr,i,j: integer; x : integer; begin readln(data); expand := data; read(a);read(b); nr := trunc(a); nc := trunc(b); write(nr*nc,' '); writeln((nr-1)*(nc-1)); for i := 0 to (nr -1) do begin for j := 0 to (nc -1) do begin read(data); writeln(j,' ',(nr -1 -i),' ',data*expand); end; end; for i := 0 to (nr -2) do begin for j := 0 to (nc -2) do begin x := j + nc*i; writeln('4 ',x,' ', x+1,' ', x+nc+1, ' ',x+nc); end; end; end. ----------- end list 2 ------------ -------- start list 3 ----------- リスト3. Xplotで富士山を描く 前処理: マトリックスデータからoff形式への変換 % cat expand matrix.dat | matrix2off > fuji-real.off expand には (高さ/正方メッシュの辺の長さ) が入っている Xplotでのコマンド fuji = surface{["fuji-real.off"]}; plot fuji; --------- end list 3 ---------- 3. Wine : MS-Windows 3.1エミュレータ いよいよ,インターネットを通じて,ソースを入手し,いろいろな世界を楽しみましょう.Wineはx11上でのMS-Windows 3.1エミュレータです.以前はソリティ(ゲーム)ぐらいしか作動しないというイメージがありましたが,最近はかなりのソフトが作動するようになって来ました.筆者はftpからWine-960324.tar.gz(950kぐらい)をダウンしてインストールしました. * インストール 展開をして,READMEを見ましょう. # cd /usr/src # tar zxvf Wine-96218.tar.gz # cd wine960218 # ./configure # make depend; make これで,実行ファイルwineが作られ, # make install で,/usr/local/binにwineがインストールされます.環境設定ファイルは/usr/local/etc/wine.confです. * 使って見よう 使用方法は簡単です.ソリティを起動するには % wine sol です.wine.confでパス指定がされてない場合は,フルパスでMS-Windows3.1の実行ファイルを指定しましょう.いくつかのソフトを起動したところを図5に示しました.CADソフト,分子模型表示ソフトとデータ解析プロットソフトを使っている例です.日本語用のソフトはメニュー画面などの文字が化けておりますが,それなりに使えました.その他に,Paint Shop Proも全く問題なく使えました.実際に,先に述べたFudgitの画面の取り込みに使用しております.x11上でPaint Shop Proを使って,画面の取り込みをするのも不思議な気がしました.理工系向きではMathCadが起動します.完全に使えるかどうかのチェックはしておりませんが.また,Mathematica(MS-Windows 3.1版)は起動まではしますが,その後,入力は受け付けなくなります.もうすこしと言ったところでしょうか. 図5. MS-Windows 3.1用ソフトの使用例 ***(wines.tif):WINES.TIF 4. Wingz Wingzをご存知ですか.使いやすい表計算ソフトです.そのソフトのLinux版があります.Linux版はシェアウェアーになっております.インターネット「解禁」ということで,早速持って来ましょう.この際にNextStep用と間違わないようにして下さい.筆者は次のバージョンを持って来ました.このバージョンは日本語は使用できません. Wingz-141d.tar.gz サイズ 1323489バイト 本格的に展開する前に,INSTALLとREADMEファイルを展開して,注意書きを見ましょう. # tar zxvf Wingz-141d.tar.gz Wingz/INSTALL Wingz/README * インストール インストールはINSTALLファイルを見て行ないます.手順を書いておきます. # cp Wingz-141d.tar.gz /usr/. # cd /usr # tar zpxf Wingz-141d.tgz # chmod 666 Wingz/.wingz # cp Wingz.Xdefs /usr/lib/X11/app-defaults/Wingz これでインストールは終了です.使うためには環境変数 "WINGZ" を設定する必要があります.Bシェル系を使っておられる方は export WINGZ=/usr/Wingz Cシェル系の方は setenv WINGZ /usr/Wingz を書いておきましょう.筆者はzsh(Bシェル系)を使っております.「.zlogin」に書き加えました.起動は「/usr/Wingz/bin/Wingz」とタイプします.日本語は使えないと書きましたが,一つ困ったことがありました.それは,環境変数 LANG に日本語が設定してあるとファイルへの書き込みや読み出しができなくなります.しかし,LANGが設定していないと,Wingzを使わないときに,「less」コマンドなどを日本語で使うことが出来ません.文字が化けてしまいます.そこで,それを回避するために,リスト4のようなWingz起動用シェルを作り,実行属性を付けてホームのbinに「Wingz.sh」としました. % chmod +x bin/Wingz.sh ********** start list 4 ********** リスト4. Wingz起動用シェル #!/bin/sh # export LANG=C <-- LANGを英語モードへ /usr/Wingz/bin/Wingz <-- Wingzの起動 export LANH=ja_JP.eucJP <-- LANGを日本語モードへ ********* end list 4 *************** リスト4の環境設定ですが,Cシェルを使われている方も exportを使って下さい.理由は起動シェルの1行目にある/bin/shはBシェルだからです. * 使って見よう 前置きが長くなりました.起動シェルからWingzを起動しましょう. % Wingz.sh 図6のような,MS-WindowsやWindows95で見かける表計算ソフトと同じような画面がでます.図6は三角関数の計算をしてグラフ化したものです.この図では,メインメニューがワークシートの中に移動してありますが,標準ではワークシートウインドウの左上に置かれます.数値の入力はそのまま数字を入れます.式の場合は「=」を入れてから,式を入れます.メニュー操作はそれぞれのメニューをクリックして見れば大体想像できます.図7に左から順に「Format」,「Graph」,「Gallery」(Graphのサブメニュー),「Window」,「Scale」(Winodwのサブメニュー)を開いたところを示しました.図6のワークシートはWindow -> Scale -> 50% と,標準より縮小しております. Xspreadと比べると,使いやすさは抜群です.Linux上でもMS-Winodws系のような表計算ソフトが必要とお考えの方にとっては,ありがたいソフトでしょう.前回紹介したように,ここでも,偏微分方程式の数値解を求めて見ましょう.詳しい手順はXspreadの紹介の所か,参考文献1を参照して下さい.+1,0,-1の電位を持つ点が平面に散らばっている場合の各場所の電位をシミュレートしました.表計算ソフトWingzの各セルに,そのセルの前後左右のセルの値の平均値が入るようにします.なお,この作業をするには,セルの大きさが小さい方が全体の見通しが良く,作業効率が上がります.そこで,メインメニューの「Window -> Scale」から,50%ぐらいを選択しましょう.さらに,メインメニューの「Go」を開いて,「Recalc Info」から「Manual Recalc」を選んでおきましょう.通常はここが「Automatic Recalc」にセットされており,入力のたびに再計算がされます.境界条件等の入力が終ったら,「Go」メニューから「Recalc」を実行します.これを繰り返します.ただし,大きなシートを作成した場合は,計算が収束するまでの繰り返し回数が多くなります.そこで,「Go -> Recalc Inof -> Iteration」を選んで,「Max Iteration」を50にセットすると,1回の「Recalc」で,50回再計算します.計算終了後は領域を選択して,ワークシートの左端にあるグラフのアイコンからグラフを描きます.何とそのまま,ワイヤフレーム法による3次元グラフが描かれます.その様子を図8に示しました.その他に,図7に示した「Graph -> Gallery」メニューから,SurfaceやContourを選ぶことで表現を変えることが出来ます. 図6. Wingzの画面 ***(fig1.tif):FIG1.TIF 図7. Wingzのメインメニューから ***(menu.tif):MENU.TIF 図8. 偏微分方程式の数値解例 ***(elect.tif):ELECT.TIF WingzはWingz形式のファイルだけでなく,DIF, SYLK, Lotus-1a, Lotus-2.0, Text の形で出力が可能です.また,タブで区切られたデータを読み込むことが可能です.awk等でデータを処理するのが辛い人(筆者もその一人)には,日本語を使わない条件ならば,有効に使用できるでしょう.より詳しくは,Wingzの機能を紹介するファイルが入っております./usr/Wingz/TestFight/TestFlgt.wkzを読み込んで,実行してみてください. 5. 仕事に利用した例:フーリエ変換 Linux連載で紹介して来たツールを使って,仕事をした例を紹介しましょう.液晶の画像をコンピュータに取り込んで,2次元のフーリエ変換をします. 液晶の画像は,偏光顕微鏡のカメラで写真に撮り,写真フィルムから,ディジタル化してコンピュータに画像を取り込みました.取り込みは,MS-Windows上でフィルムスキャナを用いました(トラ技コンピュータ 9月号1995年 参照).この過程もLinuxで実行したかったのですが,手持ちのフィルムスキャナのLinuxドライバがなく,あきらめました.フィルムから,画像ファイルを経てフーリエ変換後のパワースペクトルの表示までの処理を表2にまとめます.また,フーリエ変換を施す前の画像と変換後のパワースペクトルを図9に示します. ----------- start Table 2 ----------------- 表2. 画像の処理手順 画像の取り込み : MS-Windows上でフィルムスキャナから LCCH.TIF として取り込む 画像の確認 : 画像の表示確認 解析領域の左上座標確認 グレイスケールへ変換 xvにて 解析領域の切り出し: netpbmのpnmcutにて解析領域の切り出し 64x64へ netpbmにて 画像フォーマットのpbm(asicc)形式へ変換:解析領域画像の表示確認 画像フォーマットのpgm(asicc)形式へ変換 xvにて 画像フォーマットをフーリエ変換用フォーマットへ変換: awkを使う awk '{if (NR<=4) {print $0} else {for (i=1;i<=NF;i++) print $i}}' tmp.pgm フーリエ変換: Fortranを用いる f2c,gccで実行ファイルを作成 変換後,パワースペクトルを求める: Fortranを用いる f2c,gccで実行ファイルを作成 パワースペクトルをpgm画像フォーマットへ変換: Fortranを用いる f2c,gccで実行ファイルを作成 -------------------------- end Table 2 -------- 図9. 画像とフーリエ変換後のパワースペクトル ***(fftconv.tif):FFTCONV.TIF Linux上での処理はxvを用いて解析すべき領域の選択から始まります.ここでは,2の6乗である64x64の画像をFortran(f2c+gcc)を用い,フーリエ変換しました.xvで正確に64x64の画像を切り出すのは結構骨がおれます.そこで,netpbmのpnmcutを用いました.lcex.tifをpnm画像フォーマットに変換して,pnmcutで元の画像の(46,53)を左上として64x64の画像を切り出します. % tifftopnm lcex.tif | pnmcut 46 53 64 64 > lc.pgm xvのsaveメニューから Formatとして,「PBM/PGM/PPM(ascii)」を選択,lc.pgmとして保存します.これにより,画像が数値に変換されます.リスト5にlc.pgmの一部を示しました. フーリエ変換には黒瀬,松島,松尾著「Fortran-77による科学技術計算サブルーチンライブラリ」(啓学出版)のプログラム(2.7 フーリエ変換, 2.7.1 1次元高速フーリエ変換, 2.7.2 2次元高速フーリエ変換)を参照しました.Fortranではlc.pgmのようなデータフォーマットを読み取るのは苦手です.そこで,階調データをデータ毎に改行します.ここでは,データフォーマットの変換に「awk」を使います. % awk '{if (NR<=4) {print $0} else {for (i=1;i<=NF;i++) print $i}}' lc.pgm > lc.dat awkはテキストデータを処理する優れた言語です.ここでは,はじめの4行(データのヘッダ部分)はそのまま出力をし,5行目(階調データの始まり)からデータ毎に改行するようにしております.これとほぼ同様の操作をパスカルを用いて,連載7(1996年4月号)で,マトリックスデータからGnuPlotデータへの変換 convdata.pasとして紹介しました.Fortranのプログラムリストは紙面の関係で前述の参考文献を参考にしてください.これから,実行ファイルfft2dを作り,フーリエ変換をします.さらに,変換されたデータをパワースペクトルにするため,自乗し,データの配置を変えます(逆空間のために画像の中心部を4角へ,4角のデータを中心へ移動).それのFortranのプログラムをリスト6に示します. % f2c fft2d.f % gcc -o fft2d fft2d.c -lf2c -lm % f2c conv.f % gcc -o conv conv.c -lf2c -lm % fft2d < lc.dat | conv > power.dat % xv power.dat これで,図9の右の画像が得られます. -------- start list 5 --------------------- リスト5. 切り出され,数値変換されたlc.pgm P2 <-- PGMフォーマットの印 # CREATOR: XV Version 3.10a Rev: 12/29/94 <-- コメント 64 64 <-- 画像の横x縦 (列x行の数) 255 <-- 画像の色数.ここではグレースケールの階調 116 119 95 100 84 100 113 95 104 121 123 123 128 128 107 113 128 <-- 階調 138 111 119 126 128 133 116 123 119 131 137 126 121 119 126 131 130 <-- 0が黒 111 100 119 131 111 76 76 95 90 90 104 107 84 90 113 138 126 <-- 255が白 119 111 123 131 128 131 128 126 128 128 119 119 119 131 119 104 84 90 104 111 84 111 121 121 123 130 138 95 116 128 130 104 116 128 126 133 121 119 119 126 131 126 123 119 128 131 131 100 84 116 126 以下省略 ----------- end list 5 ----------- ---------- start list 6 ------------ リスト6. パワースペクトルの生成 c fft 2d parameter (nsize=64) real*8 xr(nsize,nsize),xi(nsize,nsize),temp(nsize,nsize) integer n,nmax,i,j c do 10 i=1,nsize do 10 j=1,nsize temp(i,j)=0 xr(i,j)=0.0 10 xi(i,j)=0.0 n= nsize nmax=nsize call getdata(xr,xi,n,nmax) call power(xr,xi,n,nmax,temp) end c subroutine getdata(xr,xi,n,nmax) integer n,nmax,i,j real*8 xr(nmax,n),xi(nmax,n) read(*,*) read(*,*) read(*,*) nmax ,n read(*,*) do 10 i=1,nmax do 20 j=1,n read(*,*) xr(i,j) xi(i,j)=0.0 20 continue 10 continue return end c c subroutine power(xr,xi,n,nmax,temp) integer n,nmax,i,j,k,l,n2 real*8 xr(nmax,n),xi(nmax,n),temp(nmax,n) write(*,100) write(*,110) write(*,*) nmax,n write(*,120) 100 format('P2') 110 format('#make fft2d power ') 120 format('4025500') <-- この数値はxvで表示する時に正常に表示できるようにするため,設定 c convert data for graphic viewer n2=nmax/2 do 10 i=1,nmax if(i.le.n2) then k=i+n2 else k=i-n2 endif do 20 j=1,n if(j.le.n2) then l=j+n2 else l=j-n2 endif temp(i,j)= (xr(k,l)**2+xi(k,l)**2) 20 continue 10 continue write(*,200) ( ( temp(i,j),j=1,n ),i=1,n ) return 200 format(1x,5f15.0) end ------------- end list 6 ------------------ フーリエ変換するのに,先月に紹介した「Octave」を用いましょう.元の画像を切り出してpgm(asicc)形式へ変換する所までは同じです.pgm形式からoctaveが読める形式へ変換をします.変換のポイントはoctaveの場合はファイルの先頭に4行のヘッダが付きます(リスト7を参照)プログラムはパスカルで作りました(リスト7).これをコンパイルしてpgm2octave とします.あとは % pgm2octave < pgm.file > octave.file です.octaveを起動して > load octave.file <-- 外のファイルoctave.fileを読み込む > convdata = fft2(data); <-- dataを2次元フーリエ変換して結果をconvdataに保存 > save result.fft convdata; <-- convdataを外のファイルresult.ffに保存 で,フーリエ変換結果がresult.fft(リスト8)に保存されます.ただ,result.fftは実部と虚数部が1組になり括弧でくくられています.xvを使ってパワースペクトルを表示するには,少し加工が必要です.これは読者が試みて下さい.octaveを用いる場合は操作が簡単になるだけでなく,変換する画像のサイズが2の冪乗の正方形である必要がありません. ------ start list 7 ----------- リスト7. pgm(ascii)からoctave形式へ program conver(input,output); var a,b,tmp : integer; i,j: integer; begin readln; readln; read(a);read(b); readln(tmp); writeln("# name: data "); <-- ヘッダ1行目 octave内での変数名 writeln("# type: matrix"); <-- データの形式 今の場合はマトリックス writeln("# rows: ",a:4); <-- データの行数 writeln("# columns: ", b:4); <-- データの列数 for i := 1 to a do begin for j := 1 to b-1 do begin read(tmp); write(tmp:4) end; writeln(tmp:4); end; end. --------- end list 7 ----------------- ------ start list 8 ----------- リスト8. result.fftの一部 # name: convdata # type: complex matrix # rows: 64 # columns: 64 (3671757, 0) (-4257.8255511796642, 15899.472687465239) (996.59785547250692, 7456.0229988376159) (12613.860057052521, 9328.6731280113381) (6729.0819398021258, -17809.670496828538) (3955.098677283584, -2210.827416503058) (-2612.2638323074634 後略 ---------- end list 8 --------------- * GPIBボードの制御 今までは,Linuxにデータを持ち込んで解析をしたり,グラフを描くなどして来ました.そこで,連載の最後にLinuxの中からデータを直接取り組む例を紹介しましょう.データ取り込みには,ナショナルインスツルメント社のAT-GPIBボードを用います.このボードはLinux用のドライバが開発されております.さっそく,ftpから持って来ましょう.筆者は次のファイルを持って来ました. linux-gpib-1.1b.base.tgz 301215 linux-gpib-1.1b.ibsh.tgz 781081 * インストール GPIBボードのドライバはモジュールの形で組み込まれます.したがって,カーネルをモジュール対応にしておかなければなりません.カーネルの再メイクの詳しい方法は,参考文献2を参照して下さい.ここでは,関係する部分のみを示します. = カーネルの再構築 # cd /usr/src/linux # make config これで,たくさんの質問がでて来ます.それに答えることで,目指すカーネルの性格を決めます.ELF対応の問い合わせの少し後に,次のようにモジュール対応にするかどうかの質問がでます.ここで,[Y]と答えましょう. * Loadable module support * Set version information on all symbols for modules (CONFIG_MODVERSIONS) [Y/n] * その後,たくさんの質問に答えたら, # make dep;make clean # make zImage で /usr/src/linux/arch/i386/boot/ にzImage(圧縮形式のカーネル)ができます.これを,ルートに vmlinuz としてコピーして,連載の2で紹介した方法でカーネルを入れ換えます. = GPIBドライバのインストール GPIBボードのドライバを作るのに,必要なファイルは linux-gpib-1.1b.base.tgz です.linux-gpib-1.1b.ibsh.tgzはTcl/TKを用いてGPIBボードやGPIB対応装置の設定をx11上の画面で出来るようにするものです.今回は両方インストールしました.インストールするにはGPIBボードを差しておく必要があります.そして,ボードのIRQ,DMA等の値を記録して下さい. # cd /usr/src # mkdir gpib # cd gib # tar zxvf linux-gpib-1.1b.base.tgz # tar zxvf linux-gpib-1.1b.ibsh.tgz # mkdir tcldev # cd tcldev # ln -s /usr/lib/tcl7.4 . # ln -s /usr/lib/tk4.0 . # cd /usr/src/gpib/linux-gpib # make 途中で,3種のボードの選択が面画でます. atgpib National Instruments AT GPIB Board (16bit) pcIIa National Instruments PCIIa Board (8bit) pcII National Instruments PCII Board (8bit) 今回は, atgpibを選びました.さらに,IRQ,DMAの設定やボードの番号設定などが続きます.その後,コンパイルされ,driverディレクトリに gpib0.o が作られます. * 使って見よう このGPIBドライバを # /sbin/insmod /usr/src/gpib/linux-gpib/driver/gib0.o として,組み込みます. また,この組み込みの際に引数でGPIBボードの番地,DMA,IRQ,番号設定を指定することも可能です. GPIBボードや取り付けられたGPIB対応装置の設定を /etc/gpib.conf ファイルで行ないます.その設定をグラフィカルに行なうための ibconf というTcl/TK用のファイルがあります.図10に ibconfを起動した画面を示します.画面に示された「dvm」は筆者が取り付けたディジタルマルチメータのことです.中央右の「Configure」ボタンを押して,「dvm」のGPIBのアドレス等を設定します(図11).また,GPIBボード自身も,画面左上の「File」を選択すると,図12のような設定画面になり,確認をしたり変更をすることが可能です.ここでの変更は /etc/gpib.conf に反映されます.また,userの権限でもGPIBボードが制御できるように,/dev/gpib0/master のパーミッションを変更します. # chmod a+w /dev/gpib0/master 図10. ibconfの起動 *** ibconf1.tif:(IBCONF1.TIF) 図11. ディジタルマルチメータ(dvm)の設定 *** dvmconf.tif:(DVMCONF.TIF) 図12. ボードの設定 *** board.tif:(BOARD.TIF) リスト9のようなプログラムを作り,実行ファイルを作ります. % gcc getdata.c -o getdata -lgpib -lfl setcondtionと言うファイルに今回用いたディジタルマルチメータのGPIB制御用文字「F3R3PR2E」を書き込みます. % getdata < setcondition > gpib.dat で,gpib.datに測定結果が入ります.繰り返しデータを収録する場合,リスト10のようなスクリプトで実現できます.後は皆さん方の工夫しだいです. ****** list 1 ********** リスト1. ディジタルマルチメータからのデータ取り込み #include #include main(){ int dvm; char cmd[80]; char gstr[80]; if( (dvm=ibfind("dvm")) & ERR){ printf("can't find DVM!\n"); exit(1); } if( ibclr(dvm) & ERR){ printf("Clear Erro!\n"); exit(1); } scanf("%s",gstr); strcpy(cmd,gstr); if( ibwrt(dvm,cmd,strlen(cmd)) & ERR){ printf("Write Erro!\n"); exit(1); } if( ibrd(dvm,cmd,79) & ERR){ printf("Read ERRo!\n"); exit(1); } printf("\n Result=%s",cmd); } ********* end list 1 ********** ********* list 2 start ********* リスト2. GIBデータ取り込みスクリプト例 #!/bin/sh getdata < setcondition getdata < setcondition getdata < setcondition getdata < setcondition 以下略 ******* list 2 end *********** * 最後に 駆け足でいろいろのソフトを紹介しました.紹介は簡単過ぎたかも知れませんが,これをきっかけに,自分が使えそうなソフトをインストールして,Linuxを有効に活用して下さい. 参考文献 1. 臼田,井上,伊藤:「Lotus1-2-3による理工系シミュレーション入門」(CQ出版)9章(1993) 2. 真鍋:「プレイパーソナルLinux」23回 Unix User 5月号 (1996).