Gauche-gtk
SICPがようやく絵を出すところまで来たので、gauche gtkをインストールしてみる。
gtktexttag.c でpad3なんてメンバーはいませんよとエラーが出る。
調べてみたら、インストールしてあるgtkが2.0で、gaucheが要求しているのが2.2だった。
gtkのインストールをしようとしたら、FreeBSDのportsは、Xorgの関係でFreezeしているらしい。もうちょっとまとう。
SICPがようやく絵を出すところまで来たので、gauche gtkをインストールしてみる。
gtktexttag.c でpad3なんてメンバーはいませんよとエラーが出る。
調べてみたら、インストールしてあるgtkが2.0で、gaucheが要求しているのが2.2だった。
gtkのインストールをしようとしたら、FreeBSDのportsは、Xorgの関係でFreezeしているらしい。もうちょっとまとう。
普通に動かすと、例によって
Error: unsupported architecture 'FreeBSD 5.4-RELEASE' と言われるので、verify.plを変更
330行目くらい。
sub get_systemc_arch
{
local( $uname_s ) = `uname -s`;
local( $uname_r ) = `uname -r`;
local( $uname_m ) = `uname -m`;
local( $arch );
local( $cxx );
local( $cxx_comp );
chop( $uname_m );
chop( $uname_s );
chop( $uname_r );
# natu ここを追加
$uname_s = "Linux";
$uname_r = "2.6";
setenv SYSTEMC_HOME /home/natu/systemc/systemc-2.2.0/ で設定したlib-linuxを見に行くと思うので、lib-linuxフォルダーを作成し、lib-freebsdの下のlibsystemc.aをシンボリックリンク。
これで試験開始!
そのままではコンパイル通らない。
今までと同じようにtarget="linux"でだましても、../configureでMakefileを作ってくれない。confiug.logは、
## ----------- ##
## confdefs.h. ##
## ----------- ##
#define PACKAGE_BUGREPORT ""
#define PACKAGE_NAME ""
#define PACKAGE_STRING ""
#define PACKAGE_TARNAME ""
#define PACKAGE_VERSION ""
#endif
#ifdef __cplusplus
extern "C" void std::exit (int) throw (); using std::exit;
configure: exit 0
こんな感じで終わっていて、0返して正常終了していそう。
FreeBSDのPortsの様子を見ていると、FreeBSDでSystemCを使っていて、なおかインストール方法を公開しようという人間は世界で数名しかいないらしい。つまり、放置しておいていつの間にか動くようになる可能性は限りなく低い。しかたがないので、googleと格闘。
配布ファイルを展開したフォルダーにあるconfigure.inを修正。linuxと同じような感じで、FreeBSDを定義。
148行目に追加
*freebsd*)
case "$CXX_COMP" in
c++ | g++)
EXTRA_CXXFLAGS="-Wall"
DEBUG_CXXFLAGS="-g"
OPT_CXXFLAGS="-O3"
TARGET_ARCH="freebsd"
CC="$CXX"
CFLAGS="$EXTRA_CXXFLAGS $OPT_CXXFLAGS"
;;
*)
AC_MSG_ERROR("sorry...compiler not supported")
;;
esac
AS=as
QT_ARCH="iX86"
;;
configure.inがあるフォルダーでautoconfを実行。僕のマシンにはautoconf259が最新だったのでこんな感じ。
./autoconf259
cd objdirでobjdirに移動。gmake debugを実行すると、aclocal-1.6、autoconf、automake-1.6、autoheaderが無いと怒られるので、適当に、シンボリックリンクでごまかす。 (ln -s /usr/local/bin/automake19 ~/bin/automake-1.9 とか)
あとは、
gmake debug
gmake install
でOK。
Portsでは上手く動かなかった(同じ所でエラー)ので、自力でコンパイルしてみました。
INSTALLドキュメントは読んでいる前提で、手順を整理
(1)configureファイルの編集
../configure 3652行目に追加
target_os="linux-gnu"
ついでにここも修正しておく。
//#define _USE_HASH_MAP
objdirから
../configure --with-systemc=/usr/home/natu/systemc/systemc-2.1.v1 --disable-compiler-check
を実行。systemcのPATHは自分の環境に合わせる。
(2)../configureが通ったら
tgzを展開したフォルダーにあるscriptsの中のcopyFiles.shと、CopyExamples.shの一行目 #!/bin/sh -h を#!/bin/sh に変更(-h オプションを取る)
objdirのscriptsじゃないので注意する。
最後にscv_init_seed.cppの先頭を修正
#ifdef __linux__
#include < sys/time.h>
#else
#include < time.h>
#endif
#include < sys/time.h> ←追加
あとは、
gmake
gmake install
でOK。
Binary Hacksにあったstraceですが、FreeBSDでは、ktarceと、kdumpの
組み合わせで使うようです。
さっそく、AVMのサンプルで試してみましょう。
ktrace ./a.out
kdump > ktrace.log
この辺りが、起動部分。
631 ktrace RET ktrace 0
631 ktrace CALL execve(0xbfbfeda7,0xbfbfecc0,0xbfbfecc8)
631 ktrace NAMI "./a.out"
631 ktrace NAMI "/libexec/ld-elf.so.1"
631 a.out RET execve 0
631 a.out CALL mmap(0,0xf50,0x3,0x1000,0xffffffff,0,0,0)
631 a.out RET mmap 671961088/0x280d5000
631 a.out CALL munmap(0x280d5000,0xf50)
631 a.out RET munmap 0
631 a.out CALL __sysctl(0xbfbfea78,0x2,0x280d1c58,0xbfbfea74,0,0)
631 a.out RET __sysctl 0
しばらくして、Copyrightの表示。
631 a.out RET write 1
631 a.out CALL write(0x2,0x80acbc0,0x34)
631 a.out GIO fd 2 wrote 52 bytes
" SystemC 2.1.v1 --- Feb 25 2007 08:54:25"
631 a.out RET write 52/0x34
631 a.out CALL write(0x2,0x2828ea13,0x1)
631 a.out GIO fd 2 wrote 1 byte
"
"
631 a.out RET write 1
631 a.out CALL write(0x2,0x80acb60,0x5b)
631 a.out GIO fd 2 wrote 91 bytes
" Copyright (c) 1996-2005 by all Contributors
ALL RIGHTS RESERVED"
この辺りで、ユーザー回路のログを出しているから、もう回路は動いている。
631 a.out RET write 68/0x44
631 a.out CALL write(0x1,0x816e000,0x50)
631 a.out GIO fd 1 wrote 80 bytes
"loop slave : top.ms1: sending : response: addr=00f3 data=ffff op=read \
status=OK
"
631 a.out RET write 80/0x50
631 a.out CALL write(0x1,0x816e000,0x4e)
631 a.out GIO fd 1 wrote 78 bytes
"loop master:top.ms1: receive: response: addr=00f3 data=ffff op=read st\
atus=OK
"
631 a.out RET write 78/0x4e
631 a.out CALL write(0x1,0x816e000,0x41)
631 a.out GIO fd 1 wrote 65 bytes
"loop master: top.ms1: send request : addr=0023 data=ffff op=read
"
631 a.out RET write 65/0x41
631 a.out CALL write(0x1,0x816e000,0x47)
631 a.out GIO fd 1 wrote 71 bytes
"mem slave : top.ms3: receiving: request : addr=0212 data=0f0d op=write
"
そしてわかったこと。
いったんシミュレーションが開始されれば、スケジューリングの段階でシステムコールは呼ばれていない。pthreadオプションをつけても同じかは微妙だけど、少なくともデフォでは呼ばれていない。仮に、systemcシミュレータのみを動かすのであれば、OSのオーバーヘッドってのはほとんど無視できる。(もちろんテストベンチで、メモリの確保と解放を繰り返したり、ファイル読み込んだりしたら別だよ)
SystemCの現状ってのは、こういうネタに使えるサンプル回路が少ないと思う。
そういう意味で、AVMは貴重な一冊です。
Systemcへの布石として必死でC++勉強中。
何でこんなに難しいんだ。
いつの間にかFreeBSDのportsにsystemcが入ってる。
試しにコンパイルしたらmake install一発だった。
lib-linuxもちゃんとlib-freebsdにしてくれるのね。
ちょっと感激
僕はモバイラなので、Virtualといえばここ。
blogなつたんは、バーチャル・ネット・モバイラー 鯨13歳を応援しています。(ちゆ風)
そんなことはさておき、Virtual PC 2004が無料で使えるようになりました。
1万4000円出して買った僕の立場はどうなりますか。
タテマサにFreeBSDを入れて、Xが動かないことは昨日のブログに書きましたが、
普通にWindows PCとVPC+FreeBSDの組み合わせが案外良いことに気がつく。
ノートPCにFreeBSDを入れる場合、いくつもの壁があります。
(1)インストーラのブート
(2)配布ファイル
(3)レジューム、サスペンド
(4)X (←日本語環境用)
(5)ポインティングデバイス
音を出したい人とか、longrun使いたいって人はさらに壁があるのですが、
僕の場合はこんな感じ。
僕が好むノーパソっていうのは、小さい事が最優先な為、ビデオカードやら
なんやら、変なのな事が多い。さらに、外部のI/Fが非常に限られている。
先人のおかげで、いろいろとインストール方法は整理されレいるのですが、
それでも難しいですよ。
最近はLANポートが標準でついているので、(2)の問題はほとんどなくなったの
ですが、昔(2.2.8とか)はPCMCIAのCD-ROMでブートしているのに、配布ファイル
の為にCD-ROMを認識してくれないとかざら。今、お前がブートした所から
読んでこい!と何回叫んだことか。
インストーラの途中でPCMCIAのカードを取り替えるとか、いろんな技がありました。
タテマサは、USBのFDDでブートさせて、ネットワークインスコで、(1)、(2)は
突破したのですが、Xが駄目でした。kon stealthも画面が乱れる。
ふと思い立って思ってデスクトップのVPC+FreeBSDでkon stealthやってみる。
おおっ、これで十分じゃん。
Xをあきらめれば、ポインティングデバイスとか関係ないし、なんと言っても
サスペンドし放題なのはうれしい。
さっそく、タテマサをWindows XPでリカバリし、Virtual PCを入れてみる。
何回かのWindows updateの再起動を繰り返し、さてFreeBSD入れるかと思った
時に衝撃の事実が!
Virtual PCはクルーソなノーパソでは動きません。
なんだってー!
orz
octaveをFreeBSDにインストールしようとするが、遊びで始めたら
恐ろしいくらいにコンパイルに時間がかかる。
どうやら、Atlasというライブラリの作成に時間がかかっているみたい。
Atlasというのは数値計算専用の高速化ライブラリで、パソコンの
構成(CPUやキャッシュ)などで、いろいろと最適化していくのですが、
いろんなオプションでコンパイル→実行して、一番早いのを
選んでいるようだ。挙げ句の果てに、なんかエラーがでて止まる。
まあ、FreeBSDでこんなときは、package様々になるのだが、
Atlasのpackageはないらしい・・・
しょうがないのでoctave本家に行って、ソースゲット。
./Configureのあと、makeの代わりにgmakeでOK。
こんなページ見つけた。すばらしい。
http://takenaka-akio.cool.ne.jp/etc/fifa_poisson/
ちょっと訳あって会社待機になったので、勝手に遊び出す。
SystemCを動かす環境が欲しくて、cygwinでもいいんだけど、
なんかcygwinってむずがゆいじゃん。だから、Linuxを入れて
みようと思った。
僕にとってLinuxといえば、企業向け=Redhat、大学向け
Turbo、一般人向け=Vine、オタク向け=plamo、と決まって
いたのだが、いつの間にかRedhatなくなってやんの。
で、いろいろ調べたけど、良くわかんないから結局FreeBSDを
選んでしまった。cygwinで動くんだから、FreeBSDで動かない
わけないじゃんと、この時点では甘い観測が。
ちなみに、マシンはWindows XPで動いているVirtual PC。
ひっさしぶりに、http://www.jp.freebsd.org/アクセスしたら、
知らないうちに6.0まででている。2.2.6とか、2.2.8が懐かしい
今日この頃。なけなしのボーナスをはたいて買ったペンプロには
バグがあったんですよ。辛い思いでがフィードバック。
結局チキンなので、まよわず5.4 RELEASE選びました。
とりあえずの環境なので、パーティションとかも適当に。
んで、http://www.systemc.org/にアクセスして、必要なファイルを
ダウンロード。SystemCのインスコを始めるが../Configureでつまる。
とりあえずエラーが出たところを片っ端から消していく。
configure: error: "sorry...architecture not supported"
このエラーが消えない。そんなつれないこと言うなよ。
CXX_COMP=`basename $CXX`
AR_TOOL="ar cru"
>target="linux" ← 追加
case "$target" in
して、linuxとだましうちしてインストール成功
あとはドキュメントを見ながら、
gmake
gmake install
gmake check
うほっ動いた。でも、コンパイル時間かかるなぁ。
Rsaを動かした結果
SystemC 2.1.v1 --- Dec 2 2005 19:31:35
Copyright (c) 1996-2005 by all Contributors
ALL RIGHTS RESERVED
Random number generator seed = 1133521484
RSA public key P: P=( e, n )
e = 5
n = 414832532090579713184323109612550824886712472980352854307755496841423598361
RSA secret key S: S=( d, n )
d = 82966506418115942636864621922510164969194925546160334959527002265833750385
n = 414832532090579713184323109612550824886712472980352854307755496841423598361
Message to be ciphered =
188753570720976593904648163219676681266761886051416482987372243855697005308
Ciphered message =
157964023197615437421345238780716651376763107880193799860160827338552016251
Deciphered message =
188753570720976593904648163219676681266761886051416482987372243855697005308
Note that the original message == the deciphered message,
showing that this algorithm and implementation work correctly.
デスクトップでいろいろ設定してから移行作戦は大成功。
残りの問題点。
この2つが自動でできない。
起動時にpccarddが起動しない
ネットワークカードを刺したらDHCPサーバに接続してIPアドレスをげっとすること
Xを立ち上げた時にEMACS文字化け
オープンオフィスがコンパイル終わらない
時間があればしたいこと
マウスの左ボタンが効かないので別のキーに割り当てたい
hengbandが起動しない。フォントの関係だと思う。
面白そうだったMrprojectがFreeBSDで動かない。しょぼん