2010年03月01日

AndroidのエミュレータにQEMUが使われているのはご存知のことでしょう。

今回はこれまでの経験をいかしてAndroidのエミュレータに改造を加えてNFSroot化してみます。

続きを読む

2010年02月25日

QEMUの上でDebianなどが動いていると、apt-get で簡単にコンパイラなどもインストールすることができます。しかし、そこで実際にビルドを行うととんでもなく時間がかかります。一晩かけても終わらないこともあります。

QEMUには今まで紹介してきたような、システム全体をエミュレートするものの他に、Linuxのユーザーモードのみをエミュレートするものがあります。今回はユーザーモードエミュレーションを紹介します。

ユーザーモードエミュレーションを利用することでビルドにかかる時間を1/10に短縮することができました。

続きを読む

2010年02月23日

ここまでのQEMUの記事のリンク集です。

なお、CELFテクニカルジャンボリーにて、時間をいただきましたので、このあたりについて話をさせていただきます。

(3月5日 中野サンプラザ 入場無料) よろしければご参加ください。

続きを読む

2010年02月19日

前回はQEMUをアップデートしてLinuxカーネルを最新版にさしかえました。

さらに仮想ハードウェアもARM926のものからARM11MPcoreのものにさしかえました。

今回は残ったユーザーランドをDebianからUbuntuにさしかえてみます。

続きを読む

2010年02月17日

前回nfsからブートできるようにしたことで、ユーザーランドとカーネルの依存性が少なくなりました。そこでカーネルを最新のものに差し替えてみます。

さらに、qemuの仮想ハードウェアをARM926のversatileからARM11MPcoreのRealview_EBボードにさしかえて、SMPでの動作を見てみます。

続きを読む

2010年02月15日

大昔、まだハードディスクが高価だったころ、ディスクレスワークステーションというのがありました。自前でハードディスクを持たずに、ルートディレクトリから全てNFSでマウントするというものです。

この技術はいまでもUnix系OSのDNAに埋め込まれていて、簡単なセットアップでそれを行うことができます。組み込みLinuxの開発でこれを応用すると3つのよい点があります。

1. ターゲット内のファイルにホストからいつでも自由に簡単にアクセスできる。

2. ターゲットにストレージ系のデバイスドライバがまだ実装できていない状態でもカーネルを起動することができる。

3. ターゲットのディスクの空き容量を気にしなくてすむ。

QEMU上のARMのDebianでこれをやってみたので紹介します。

続きを読む

2010年02月09日

GCC では -Wall を付けていても、条件コンパイル時に未定義のシンボル参照に対して警告が出ません。そのため、うっかり typo してしまった場合など、わかりにくいバグの原因となり得ます。
$ cat ifdef.c
#if UNDEFINED_SYMBOL
void f(void){}
#endif
$ gcc -Wall -c ifdef.c


-Wundef オプションにより、警告が出るようになります。
$ gcc -Wall -Wundef -c ifdef.c
ifdef.c:1:5: warning: "UNDEFINED_SYMBOL" is not defined
続きを読む

2010年02月05日

Linuxカーネルを起動する時に使うzImageってvmlinuxをzipで圧縮したものなの?

zImageを伸長するのはブートローダーの仕事?

改めて調べてみたので、ここでそれを紹介します。

続きを読む

2010年02月03日

QEMU上で動いているarmのLinuxとファイルをやりとりするときに、PCのLinuxをNFSサーバにしてファイルを共有するとラクです。

QEMUの場合、ちょっと特殊なオプションが必要でした。その方法を紹介します。

続きを読む

2010年02月01日

前回の方法で、qemu上にきちんと動作するDebianのシステムを構築することができました。これをひとつのベースとして、いろいろいじって試してみることにします。

まずはカーネルのリビルドです。

続きを読む

2010年01月28日

前回試してうまくいかなかったDebianのnetinstallはやはり古いインストーラを使っていたためでした。

新しいものでうまくいったので、その手順を紹介します。

続きを読む

2010年01月26日

QEMUはAndroidのSDKのエミュレータにも使われています。

QEMUのARMのシステムエミュレータをソースからビルドして、その上でDebianを動かしてみたので、その方法を紹介します。

(最近0.12.2がリリースされましたが、私の環境ではうまくうごかなかったので、0.12.1でのビルド手順を紹介します。)

続きを読む

2010年01月22日

GCC のソースツリー中の gcc/config/arm/ 以下には、OCaml という関数型(プログラミングを支援する)言語 ML (Meta-Language) の方言で書かれたプログラムが存在しています。

NEON 命令のためのヘッダ、テストケース、ドキュメントなどを生成するために O'Caml プログラムが使われているようです。

Contents of /trunk/gcc/config/arm/neon-gen.ml
Contents of /trunk/gcc/config/arm/neon-schedgen.ml/a>
Contents of /trunk/gcc/config/arm/neon-testgen.ml
Contents of /trunk/gcc/config/arm/neon.ml
Contents of /trunk/gcc/config/arm/neon-docgen.ml

OCaml は言語処理系の開発によく使用される言語なのですが、まさか GCC の内部でも使われている(直接は関わっていないのですが。生成済みのヘッダが trunk に commit されているので、GCC のビルドの際には O'Caml 処理系は必要ありません。)とは思ってなかったので意外でした。(佐藤先輩に教えていただきました。)

参考リンク:

Modern Compiler Implementation in ML

有名なタイガーブックです。ML の他にも、Java と C による同内容の本が出ていて、Java が一番いろいろなところで参考文献として挙げられている気がします。

Fail-Safe C: 安全なC言語コンパイラ

O'Caml で書かれた C コンパイラです。

CIL (C Intermediate Language)

C のソースコードを解析して、解析が容易な形 (中間言語) に変換する O'Caml のライブラリです。ANSI C だけではなく、GNU 拡張や MS 拡張 (の一部) までサポートしているそうです。ソースコード解析系の研究で、比較的よく使われているような印象です。

2010年01月20日

前回の記事で少し触れた、Linux で使われているソースコード解析ツールである sparse は、Linux Kernel 以外のソースコードに対しても有益そうです。

Sparse - a Semantic Parser for C

MinGW 環境で試してみたところ、ちゃんと GNU C のソースコードを解析することができました。

続きを読む

2010年01月18日

前の2回にひきつづきqemuのソースを追いかけたときのメモを置いておきます。

メモなのでわかりやすくはありませんが、もしかしたらどなたかの役に立つこともあるかもしれないので。

QEMU TCG

続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード