タグ

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

  • KMC Staff Blog:AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その2)

    2009年08月26日 AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その2) 前回はgoldfishのカーネルをcortex-A8向けにリビルドしてemulatorで起動するところまでを紹介しました。 ここで一気にユーザーランドもcortex-A8用にリビルドしてみたいところですが、単純にコンパイルオプションを変えただけではうまくいきませんでした。アセンブラで書いてある所などは書き換えが必要になりそうです。 そこで、今回はまだユーザーランドはarmv5te用のままで使用し、NDKを使って一部の共有ライブラリだけをcortex-a8用にコンパイルし、そこでNEONのSIMD命令を試してみることにします。 2009年11月のEclairのソースリリースでだいぶ状況が変わっています。こちらも参照してください。 NEONのSIMD命

    odawara
    odawara 2011/06/10
  • KMC Staff Blog:Android2.3(Gingerbread)のソースのダウンロードとビルド

    2010年12月21日 Android2.3(Gingerbread)のソースのダウンロードとビルド 12/18にAndroid2.3(Gingerbread)のソースが公開されました。さっそくビルドして動かしてみたので、その方法を簡単に紹介します。 こちらを参照してください。 2011年05月02日 KZM-A9-DualでAndoridのGingerbreadを動かす最短の手順 準備 2.2までと異なり2.3では64bitLinuxがビルド推奨環境になっています。私はUbuntu 10.04(x86_64)を使用しています。 また、けっこう高性能なPCが必要になるようです。私は最近ビルドマシンを新調してもらいました。(CPU: Intel Core i7 950 @3.07GHz, メモリ12GB) ノートPC上の仮想マシンでは厳しいと思います。 JDK6をインストールしておきます。

  • 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

    odawara
    odawara 2010/02/03
  • KMC Staff Blog:GCC の名前付きアドレス空間サポート

    2010年01月12日 GCC の名前付きアドレス空間サポート Linux のソースコードでは、ユーザ空間とカーネル空間のポインタを区別するために、__user や __iomem などのマクロを変数に付けています。これは最終的には noderef や address_space(n) などの attribute に落ちて、sparse チェッカーというプログラムによってチェックされます。 参考: sparseチェッカー これと同じように、異なるアドレス空間を指すポインタ変数に、アドレス空間ごとに任意の名前を付け、静的チェックや自動的に適切なコードを生成してくれるようなしくみがコンパイラにあれば、メモリが複数領域に分かれているような環境でのプログラミング時に便利です。これが名前付きアドレス空間サポートです。 時系列は追いきれてないのですが、2008 年 4 月に RFC が GCC の M

  • KMC Staff Blog:ARM Linux の移植

    2009年12月21日 ARM Linux の移植 新しいターゲットボードに ARM Linux を移植するとき、何をすれば良いのか、各ファイルにはどのような役割があるのか、なかなかわかりにくいと思います。 自分の経験を元に、以下にまとめてみます。内容は無保証です。 ROM 化の部分は扱いません。make vmlinux できるところまでです。とりあえず vmlinux (圧縮前の ELF 形式) さえできれば、PARTNER から直接実行できます。 > l /path/to/vmlinux,/offs=xxxxxxxx # ロードしたい DRAM 物理アドレス位置へのオフセットを指定 > _pc=xxxxxxxx # pc をロードした位置に合わせてセット。 > _r1=xxxx # machine number を正しくセットしておかないとブートできません。 > g # 実行 (それ以

  • KMC Staff Blog:gccでNEONのSIMD命令を生成させる方法

    2009年09月10日 gccでNEONのSIMD命令を生成させる方法 この記事ではgcc 4.4.0を使用しています。もっと新しいgccの場合はこちら。 2013年06月27日 ARMのNEONのSIMD命令をgccのオートベクタライズの最適化で使う方法 AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その2) のときにはarm_neon.hに定義されているintrinsicsを使ってNEONのSIMD命令を生成させました。この方法だとNEONの命令について詳細を知っていなければなりませんし、なによりもそのプログラムがNEONに依存したものになってしまいます。 今回はコンパイラの最適化の機能を使ってNEONのSIMD命令を生成させるコツを紹介します。 以前にSIMD演算のサンプルとしてこんなプログラムを書きました。 void

  • KMC Staff Blog:UNIX v6 を x86 マルチプロセッサシステムに移植した xv6

    2009年08月17日 UNIX v6 を x86 マルチプロセッサシステムに移植した xv6 MIT教育システムは当にすごいですね。 xv6 という、MIT の OS の講義のために、UNIX v6 を ANSI C で書き直して、x86 マルチプロセッサシステムに移植したものが存在することを、ひらさんの twitter で知りました。 wikipedia がよくまとまっています。Lions のように、読みやすくソースコードが編集された PDF へのリンクもあります。OS のソースコード全部で、たったの 75 ページと、非常にコンパクト。 http://en.wikipedia.org/wiki/Xv6 他にも MIT は、初級計算機科学の講義のために書かれた SICP (日語訳 : 計算機プログラムの構造と解釈)などでも非常に有名です。(こちらは Scheme でプログラムが

    odawara
    odawara 2009/08/29
  • KMC Staff Blog:AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その1)

    2009年08月24日 AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その1) 前回はgoldfishのCPUをarm1136に置き換えました。今度はarmv7アーキテクチャのcortex-A8への置き換えに成功したのでその方法を紹介します。 armv7だとNEONのSIMD命令とかThumb2とか色々と面白そうです。 2009年11月のEclairのソースリリースでだいぶ状況が変わっています。こちらも参照してください。 ポイント 先にポイントになるところを説明します。 gccは4.4.0を使用する。 gcc 4.2.1ではまだarmv7アーキテクチャに対応していないので新しいものを使います。 カーネルは2.6.29をベースにする。 どうやら2.6.27ではarmv7アーキテクチャでの動作実績はなさそうです。CPU_V7を有効

  • KMC Staff Blog:ARM11のパフォーマンスモニタを利用した簡単な実行時間の計測方法

    2009年08月14日 ARM11のパフォーマンスモニタを利用した簡単な実行時間の計測方法 ARM11のCP15にパフォーマンスモニタがあり、そのサイクルカウンタを利用して簡単にプログラムの2点間の時間を計測することができます。 計測用の関数を手軽に使えるようにソースコードを一つのヘッダファイルにまとめてみました。 ある関数を複数の方法で実装して、どちらが速いかを比較する場合に便利です。 ソースコード カウンタの読み出しの時のオーバーヘッドを少なくするためインライン関数にしています。 gccの拡張記法を使用しています。 #ifndef __KMC_PMON_ARM11_H #define __KMC_PMON_ARM11_H /* Performance Monitor Control Register of ARM1136*/ #define CMCR_ECC 6 #define CMC

    odawara
    odawara 2009/08/14
  • 1