タグ

ブックマーク / blog.kmckk.com (9)

  • KMC Staff Blog:KZM-A9-DualボードでLinaro 12.04 ALIPを動かす

    2012年05月17日 KZM-A9-DualボードでLinaro 12.04 ALIPを動かす KZM-A9-DualでARM Ubuntu 12.04を動かしてみようと思ったのですが、せっかくなのでシンプルなGUIのついたALIP版を動かしてみることにします。 起動可能なSDカードの作成 今回は4GBのSDカードを使いましたが、2GBでも大丈夫そうです。 KZM-A9-Dualのブート可能なSDを作る方法 にしたがって、まずAndroidが起動するSDカードを作成します。 第一パーティションにあるsdboot.binとuboot-sd.binはこのまま使用します。uImageと第3パーティションのユーザーランドはこのあと書き換えます。 ルートファイルシステムのアーカイブの取得 Linaroのダウンロードサイトにあるものを利用しました。 $ mkdir alip $ cd alip/ $

  • KMC Staff Blog:DalvikVMでのsignalのハンドリング

    2011年02月10日 DalvikVMでのsignalのハンドリング 前回のdebuggerdの話では主に異常状態を示すsignalをどう扱っているかという話でした。 今回はDalvikVMでのsignalのハンドリングを紹介します。 SignalCatcher dalvik/vm/SignalCatcher.c debuggerdでは扱うsignalに共通のシグナルハンドラを登録していましたが、DalvikVMでは、signalを扱うスレッドをひとつ用意して、そこでシステムコールsigwaitでsignalの発生を待つようになっています。 DalvikVMでは、SIGQUIT, SIGUSR1, SIGUSR2のsignalを扱います。ただしSIGUSR2はJITが有効で、かつWITH_JIT_TUNINGが有効にビルドされている時だけです。 SIGQUIT スレッドのスタックをダンプ

  • KMC Staff Blog:QEMUでARM Ubuntuを動作させる

    2012年12月05日 QEMUでARM Ubuntuを動作させる Linaro が公開している ARM Ubuntu を QEMU で動作させる方法を解説します。 ホスト環境は、Windows7 64bit です。(基的には Linux 環境でも同じはずです。) ターゲット環境は、QEMU の ARM Versatile Express 評価ボードです。 QEMU は、以前解説した環境でビルドした、32bit Windows 版を使用しました。バージョンは 1.1.2 です。 ※ pragma で coroutine-win32.c の最適化をオフにしてビルドしました。現在 QEMU ON WINDOWS のサイトでは、MinGW gcc-4.7.2-1 を使用しているようなので、gcc をアップデートすれば、このハックは不要になるかもしれません。(未確認) ARM Ubuntu の構

    iww
    iww 2012/12/05
  • KMC Staff Blog:gccのビルトイン関数 (printf)

    2009年07月03日 gccのビルトイン関数 (printf) gccのtipsを紹介します。主にgcc3.x からgcc4.x で変わっているところです。 #include <stdio.h> int main() { printf("Hello, world!\n"); } このプログラムはgcc3では普通にprintfを呼び出すコードを生成しますが、gcc4ではどうなるでしょうか。ARM版のexeGCC4でちょっと試してみます。 > gcc -S hello.c 生成されたhello.s を見てみると ... .LC0: .ascii "Hello, world!\000" .text .align 2 .global main .type main, %function main: @ args = 0, pretend = 0, frame = 8 @ frame_needed

  • KMC Staff Blog:Androidのemulatorのlocalhost制限を解除する

    2011年08月02日 Androidemulatorのlocalhost制限を解除する 前回の「Androidemulator-x86でrubyを動かす」の記事でemulatorの中でWEBサーバを動かしたときに、WEBサーバのportをqemuの-redir オプションでリダイレクトしても、localhostでしか接続することができませんでした。 この件を調べました。 qemuの-redirオプションでportをリダイレクトした時に、オリジナルのqemuではlocalhostでなくても接続することができます。しかし、Androidemulatorではこれがlocalhostからのみに制限されているようです。つまり前回の例では、http://localhost:8001/ では接続できますが、http://192.168.1.26:8001/ では接続できません。 普通はlocal

  • KMC Staff Blog:QEMUでのNFSの設定の仕方

    2010年02月03日 QEMUでのNFSの設定の仕方 QEMU上で動いているarmのLinuxとファイルをやりとりするときに、PCLinuxをNFSサーバにしてファイルを共有するとラクです。 QEMUの場合、ちょっと特殊なオプションが必要でした。その方法を紹介します。 NFSサーバ側の設定 (参考: http://d.hatena.ne.jp/embedded/20081110/p1) 今回 /etc/exports 以下のようにしました。 /export 192.168.0.0/255.255.0.0(rw,no_root_squash,sync,insecure) insecureのオプションをつけたのはqemuがポートをリダイレクトするためです。(詳細は補足のところで。) QEMU上のarm linuxの設定 armel$ su # apt-get install nfs-com

    iww
    iww 2010/04/22
    illegal port⇒/etc/exports にinsecureオプション
  • KMC Staff Blog:OS 対応デバッガ

    2009年12月11日 OS 対応デバッガ 2 ちゃんねる発祥の Mona OS の開発者 higepon さんが、Mona OS のデバッグ環境を整えようと努力されているようです。 Mona OS は QEMU 上で開発されていて、QEMU は gdbstub.c というプログラムで GDB と接続し、ICE のように使うことができます。 ひげぽん OSとか作っちゃうかMona- 2009/12/08 GDB スタブを書いてみよう その1 GDB スタブを書いてみよう その2 目的 達成したいのは Mona 中のユーザープロセスのデバッグ。ユーザープロセスが出来れば Kernel は簡単だと思う。 特にユーザープロセスが死んだときにソースコード上のどこで死んだかが GDB 一発で分かるようにしたい。 弊社の JTAG デバッガ PARTNER-Jet は、まさしくこのような機能を備えてい

    iww
    iww 2009/12/15
  • KMC Staff Blog:比較を 0 と行うという最適化は有効なのか ?

    2009年11月13日 比較を 0 と行うという最適化は有効なのか ? 多くの CPU の命令セットでは、0 との比較を特別扱いしています。 そのため、ループを書く際には、なるべく 0 と比較するように書いた方が速いので良い、という主張をたまに聞きます。 しかし、一般的な for 文のイディオム for (i = 0; i < N; i++) を崩してまで、0 と比較するように書く意味が、当にあるのでしょうか ? それぐらいは、現代のコンパイラならば勝手に最適化してくれそうな気もします。 というわけで、x86、ARM、SH、MIPS、PPC で検証してみました。 x86 は、手元の MinGW の gcc 4.4.0 です。 それ以外の CPU は、弊社の exeGCC 4 (GCC 4.3.3 ベース) を使用しました。最適化レベルは、全て一般的な -O2 です。(FPU は無関係だと

  • KMC Staff Blog:C++ ではキャストでアドレスが変わる場合があります

    2009年07月24日 C++ ではキャストでアドレスが変わる場合があります このごろは組み込みソフトウェア開発でも C++ が使われるようになってきました。C から C++ に移行する際、おそらく誰もが一度は引っかかるのではないかという C++ の挙動について書きます。 C++ では、多重継承した class(struct) のアドレスを扱う際には注意する必要があります。 #include <stdio.h> struct A { int a; }; struct B { int b; }; struct C : public A, public B { }; int main() { C *c = new C(); B *b = c; A *a = c; printf("C = %p\n", static_cast<void*>(c)); printf("B = %p\n", stat

  • 1