ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

FPGAだ!クラウドだ!やあっ!やあっ!(ついでにF#)

さくらインターネットVPSFPGAの開発環境を入れた記録です。どこでもFPGAとF#の開発ができるようになりました。

OSのインストール

さくらインターネットと契約を結んだらOSを入れ直しました。僕がUbuntuしか使えない軟弱者なのでOSはUbuntuで。

Ubutuのインストール

VPSコントロールパネルからOS指インストールを選択し、Ubuntu 10.04 i386を選択します。amd64を入れるとQurtusII(64bit)版のインストールが突破できませんでした。素直に32bit版を入れましょう。
OSのインストールの後、デスクトップ環境を入れます。(軟弱者なので)

 sudo tasksel install ubuntu-desktop

この後再起動をすると、VNCコンソールにいつもの画面が表示されれば成功。さくらのVNCコンソールはJava6でないと駄目なので、Java7が入っている人はアンインストールしましょう。

Ubuntu12へアップグレード

続いてOSのアップグレードをしましょう。ここでアップグレードしておかないと、F#が上手くインストールできません。F#大事。
12.04にアップデートが成功すると、VPSから外にアクセスできなくなります。あわてず騒がず下のコマンドを実行

$ sudo cat /etc/resolvconf/resolv.conf.d/original >> /etc/resolvconf/resolv.conf.d/base
$ sudo resolvconf -u

これでインターネットにつながるはずです。

F#のインストール

http://fsharp.org/use/linux/
のOption2のやり方でインストールできました。ちなみにUbuntu 10.04のままだとlibc-dev-binの依存関係がどうのこうの言われて上手くいきません。

QurtusII、ModelSimのインストール

Quartus-web-13.1.0.162-linux.tar をAlteraのWebサイトからダウンロードします。インストーラGUIなので、VNCコンソールを使うか ssh -X でXを飛ばして作業します。

tar xvf Quartus-web-13.1.0.162-linux.tar 

の後、componetフォルダーへ移動し、
sudo ./QuartusSetupWeb-13.1.0.162.run
を実行するとGUIインストーラが立ち上がります。

ISE Webeditonのインストール

Xilinx_ISE_DS_Lin_14.7_1015_1.tar をXilinxのWebサイトからダウンロードします。tarで展開した後、
sudo ./xsetup

を実行するとGUIが立ち上がります。

iseの起動方法は

source /opt/Xilinx/14.7/ISE_DS/settings32.sh
/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin/ise

起動時にライセンスが無いと言われ、ライセンスマネージャが立ち上がりますが、Get Free Vivado/ISE Webpack License を選択すると、ISE WebPackのライセンスが有効になります。この辺、Windows版と動きが違う気がします。

SystemCのインストール

普通にインストールすればOK。
ISEインストール時に、.bachrc に

source /opt/Xilinx/14.7/ISE_DS/settings32.sh

を追加済みの場合、このようなエラーが出て動かなくなります。

/home/natu/Downloads/systemc-2.3.0/objdir/examples/sysc/fft/fft_flpt/.libs/lt-fft: /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /home/natu/Downloads/systemc-2.3.0/objdir/lib-linux/libsystemc-2.3.0.so)
FAIL: fft

.bashrcからその行を削除して、再度ターミナルを立ち上げ直しましょう。

まとめ

勉強用と割り切るには一人で使っても十分VPSの代金がペイできそうです。家の主力PCがノートPCなので、ブログのネタだけに入っているQurtusIIをアンインストールできるのは大きいです。GUI飛ばすにはちょっと動作が遅いので、コマンドラインから実行するノウハウはためていく必要があります。一応、sof(alteraの場合)だけ持ってこれば、FPGAのコンフィグレーションはできます。この後は、JavaRockみたいなハードウェア寄りのオープンソースな環境を動くようにしていきたいですね。

みんなでワイワイやる遊び場にしたいのですが、アイデアがありましたら是非コメントください。あと、FPGAのお仕事もありましたら、お気軽にYRW03704@nifty.comへご連絡ください。

lsを読まずにプログラマを名乗るな!

 なかなか挑発的なタイトルのlsを読まずにプログラマを名乗るな!を読みました。タイトルとは違って、lsの実装を丁寧に説明してあって勉強になりました。lsのソースコードを読みながら、システムコールアルゴリズム、多言語化等の幅広い話題に触れることができます。いくつかCのプログラムを書いていて、次の次のステップに進みたい人にお勧めです。

なぜlsか

 lsを題材にしている理由について、私なりにまとめ直しました。

  • デイレクトリの操作などでシステムコールの使い方がわかる
  • 再帰呼び出し、名前順にソート等の定番アルゴリズムが使われている。
  • 言語化対応
  • 普段よく使うプログラムなので挙動が想像しやすい
  • 限られたリソースで動かす為の技が所々にある。

 普通のプログラマならlsやdirは必ず使うことになるので、良い題材を選んだと感じました。

本の内容

 ls.cから、テーマに沿った部分を抜き出しての説明があります。
 例えばmain関数でディレクトリを抽出するところの処理では、このように説明されています。

  if (n_files <= 0)
    {
      if (immediate_dirs)
        gobble_file (".", directory, NOT_AN_INODE_NUMBER, true, "");
      else
        queue_directory (".", NULL, true);
    }
  else
    do
      gobble_file (argv[i++], unknown, NOT_AN_INODE_NUMBER, true, "");
    while (i < argc);

  if (cwd_n_used)
    {
      sort_files ();
      if (!immediate_dirs)
        extract_dirs_from_files (NULL, true);
      /* 'cwd_n_used' might be zero now.  */
    }

このソースに対して、cwd_n_used変数がどのような動きをするのか、immediate_dir変数によってどう動きが変わるのかの説明があります。

 前章で説明したように、コマンドラインの引数で指定されたファイル・ディレク
トリに対するgobble_file()呼び出し(1397行)を終えた時点で、cwd_n_used
が非ゼロになります。
 その上で、immediate_dirs変数にfalseが格納されていることから、
前章のケースでは実行されなかった、1404行のextract_dirs_from_files()
呼び出しが実行されます。

丁寧な説明と、いろんな角度からのコラムがあり、最後まで楽しく読めました。

知らなかったこと

 この本を読んで勉強になったことをまとめてみます。

条件成立時の値

 関係演算子、等値演算子は、0と非0を返すと思っていたのですが、0か1を返すと規格で決まっています。

  for (i = 0, j = 0; i < cwd_n_used; i++)
    {
      struct fileinfo *f = sorted_file[i];
      sorted_file[j] = f;
      j += (f->filetype != arg_directory);
    }
  cwd_n_used = j;

それを使うと、このような条件が成立したときのみインクリメントというコードが書けます。

整列処理

 ソートです。lsのソートは、libcのqsortを使わず、GNU coreutilsのmpsortを使っています。mpsortは、ソートする対象の5割増しの領域を確保しないと行けません。5割増しというのが面白いですね。mpsortを使ったソートの手順も、わかりやすく説明されています。

1.空き領域を使って、対象の後半部分を整列。結果は後半部分に上書き。
2.対象の前半部分を整列。結果は空き領域に上書き。
3.整列済みの前半部分(空き領域に格納)と後半部分とで、マージソートを実施。結果は整列対象格納領域に上書き。

こんなやり方があるんだと関心しました。

シグナル処理

 最初はlsで使うシグナル処理って何だろうと疑問に思っていたのですが、読んでいて納得しました。最近のlsは色を変えて結果を表示します。その時に端末に制御コードを送って色をつけるのですが、Ctrl-C等でlsが強制終了された時に端末の状態をもどす必要があります。これも言われるまで気がつきませんでした。

まとめ

 全体的に面白そうなトピックを選んで丁寧に説明してあり、最後まで一気に読んでしまいました。歴史のあるソースなので、プアな環境で動かすための工夫と、高速化の為の工夫が同居していて、筆者が首をかしげているような所もあり面白かったです。もう一歩踏み込んで欲しい所もあるのですが、そこは自分で勉強しましょうということだと思います。
 残念な所が2つあります。表紙とタイトルです。本の中身は、すごく真面目に丁寧にソースコードと向き合っているのに、表紙とタイトルが挑発的で損をしていると感じました。
 

たのしいバイナリの歩き方

たのしいバイナリの歩き方を読んだので感想を簡単に。

内容

第一章と第二章は、ゆるふわバイナリ入門です。ツールを使って、逆アセ、メモリダンプを行いながら、アセンブラの雰囲気をつかんでいきます。第三章のバッファオーバーフローから一気に難易度が上がっていき、その後は口をぽかんとあけたまま最後までたのしく読めます。バイナリ系の本は、LinuxGCCな環境が多く、WindowsAPIがらみのテクニックはとてもおもしろく読むことができました。

コードインジェクション

この本を読んでいて一番おもしろかった所です。

他のプロセスに任意のコードを実行させる方法を総称してコードインジェクションと呼びます。このURLの記事が有名として紹介されていました。
Three Ways to Inject Your Code into Another Process
http://www.codeproject.com/Articles/4610/Three-Ways-to-Inject-Your-Code-into-Another-Proces

この本では、上の3つ以外の方法としてDLLインジェクションを説明しています。一つのやり方として、CreateRemoteThreadを利用して実行中の他プロセス内にスレッドを生成し、そのスレッドでDLLをロードさせることでDLLインジェクションを成功させています。Windows APIも調べてみると面白い事いっぱいありそうです。

対象読者

バイナリが好きなら是非お勧めします。この本で読んだことが役に立つか?というと、そういう視点で読む本では無いです。技術評論社の書籍案内にある著者の一言が全てを表しているので、そこから引用して紹介の締めにします。

私はそういった「楽しい」「もっと知りたい」と思えるような技術書を目指し,本書を執筆しました。そして,無数にあるプログラミング言語の中で,アセンブラが一番「楽しい」を持っている言語だと あらためて思いました。

バイナリを楽しみたい人にお勧めです。

FPGA-Based Prototyping Methodology Manual

FPGA-Based Prototyping Methodology Manual(日本語)がシノプシスからダウンロードできます。
http://www.synopsys.com/Systems/FPGABasedPrototyping/FPMM/Pages/default.aspx

 ASICの検証手法としてFPGAプロトタイピングを行う時の注意点が書いてあります。決して夢を見せず、できることとできないことを明確にし、細かいところまで丁寧に書いてある良い本です。

 プロジェクト内でのFPGAプロトの位置づけや、XilinxFPGAの特徴、ボードを設計するときの注意点まで広く説明されています。シノプシスXilinxの中の人が書いているので、内容も正しく参考になる点が多いです。最後には、TIのプロトの事例に加え、社内でプロトをはじめる時の検討事項やコストについても具体的に書かれています。

 もともとFPGAプロトタイピングというのは、ほとんど表に出てこない技術です。というのも、開発対象の秘密性が高くプロトタイピングの技術者にはきついNDAが課されます。そういった中で、こういう情報が日本語で出てくるのは素晴らしいことです。シノプシスから出ている関係でHAPSについての説明が多いですが、他のプロトボードに関しても同じように使えます。

 今からFPGAプロトをやってみたい人、FPGAプロトをやっているけどもやり方が正しいのか、もっと良い方法が無いのかと気になっている人にお勧めします。