2009/11/22
NetWalker PC-Z1 i.MX515 OpenGL ES 2.0 (3)
わかる方、自力で何とか出来る方のみ参考にしてください。
すべて自己責任でお願いします。
(1) カーネルをコンパイルできる環境を作る。( 参考1, 参考2 )
(2) module を読み込めるようにカーネルを作る。
(CONFIG_MODVERSIONS を無効化するなど> 例 Module versioning support を外す)
(3) 作成したカーネルを使って起動出来る環境を作る。
・SD カード上に作成
・本体フラッシュ (/dev/mtd3) を書き換え
など
SD 上の debian で起動して insmod だけ確認した後、面倒なので /dev/mtd3 を
置き換えました。壊れても気にしない人のみ。それ以外はお勧めしません。
3Gモデム対応ツールを適用しており、かつ互換性あるカーネルを作っている前提です。
L2.6.28_4.5.1_SDK_Aug2009_source.tar.gz (こちら)を展開して install を実行。
以後メッセージに従う。
入力した展開先フォルダの中の ltib/pkgs の中からアーカイブを参照。
ファイルを手でコピー。ここでも気にしないでシステムを置き換えています。
分けるなら /usr/local 以下に配置。
最後の gpu-install でドライバを読み込んでいます。
「sudo /usr/local/bin/gpu-install install 」は再起動の度に必要。
添付のサンプルで動作確認。
(実行結果の画面) フルスクリーンで起動するので VRAM を破壊します。実害はありません。
最初は ssh などネットワーク経由での実行をお勧めします。
サンプルが動けば動作はうまくいったように見えますが、ドキュメントやサンプル
ソースがあるわけでもないので、実際の使い方はまだまだ手探り状態です。
Display インターフェースは egl なので、初期化は以前 OpenGL ES 2.0 Emulator
を取り扱ったときのコードがほぼそのまま使えます。
AMD 版 GL ES 2.0 Emulator のターゲットがこの Z430 なので当たり前といえば
当たり前です。
・OpenGL ES 2.0 Emulator
eglGetDisplay() は EGL_DEFAULT_DISPLAY を使用。
eglChooseConfig() では 4444, 565, 5551, 8888 が使えるようです。
depth は 0, 16, 24 (24+ stencil8) のどれかと組み合わせ。
カラーバッファが 16bit でも 24bit depth を使えます。
バックバッファのフォーマットなので、8888 を指定してもフロントバッファが
32bit になるわけではありません。
eglCreateWindowSurface() で描画と API をバインドしますが、この場合
EGLNativeWindowType に何を指定すればよいのか悩みました。
いろいろ試した結果、/dev/fb0 を渡したら動きました。
描画のフラッシュと転送は普通に eglSwapBuffers() で動きます。
デバイスファイルにアクセスするため root で実行する必要があります。
フレームバッファは 16bit 1024x600 ですが、倍の容量存在しているのは 32bit
への切り替えを考慮してのことでしょうか。
この辺いろいろとステートを読み出したりしつつ調べている最中です。
例えば EGL_HORIZONTAL_RESOLUTION が 2048 になっている点など、まだ良く
わかっていない部分が多数あります。
描画の印象としてあまり速くありません。eglSwapInterval() に 1 しか設定
できないため、常にモニタのリフレッシュレートと同期している可能性があります。
ただ動作時間が半分ほどで終わってしまい、計算と一致していないのも謎です。
性能はまだ未知数。
取りあえず GLSL のシェーダーを読み込んで、テクスチャの描画まで成功。
シェーダーのコンパイルエラー発生時に、ドライバが詳細なエラーメッセージ(log)
を返してこないのも はまったところです。デバッグは Emulator で行った方が
良いかもしれません。
ヘッダ (GL ES 2.0 の場合)
ライブラリの指定など (Makefile)
ARM Cortex-A8 + OpenGL ES 2.0 は iPhone 3GS などハイエンドスマートフォントにも
搭載されています。
比べると NetWalker の良いところはクロス開発しなくてもいいところでしょう。
修正したり設定を変えてテストを繰り返していると、自分でコンパイルできるのは非常に
便利だと実感します。
micro SD 上で作業しているので、開発環境もこの小さい本体だけです。
関連エントリ
・NetWalker PC-Z1 i.MX515 OpenGL ES 2.0 (2)
・NetWalker PC-Z1 i.MX515 OpenGL ES 2.0
・OpenGL ES 2.0 Emulator
すべて自己責任でお願いします。
(1) カーネルをコンパイルできる環境を作る。( 参考1, 参考2 )
(2) module を読み込めるようにカーネルを作る。
(CONFIG_MODVERSIONS を無効化するなど> 例 Module versioning support を外す)
(3) 作成したカーネルを使って起動出来る環境を作る。
・SD カード上に作成
・本体フラッシュ (/dev/mtd3) を書き換え
など
SD 上の debian で起動して insmod だけ確認した後、面倒なので /dev/mtd3 を
置き換えました。壊れても気にしない人のみ。それ以外はお勧めしません。
3Gモデム対応ツールを適用しており、かつ互換性あるカーネルを作っている前提です。
L2.6.28_4.5.1_SDK_Aug2009_source.tar.gz (こちら)を展開して install を実行。
以後メッセージに従う。
入力した展開先フォルダの中の ltib/pkgs の中からアーカイブを参照。
$ tar -zxvf amd-gpu-bin-mx51-4.5.1.tar.gz $ cd amd-gpu-bin-mx51-4.5.1 $ sudo cp -r lib/module/2.6.28-419-g12a78a3/extra /lib/modules/2.6.28-15-araneo/kernel/drivers/ $ sudo depmod
ファイルを手でコピー。ここでも気にしないでシステムを置き換えています。
分けるなら /usr/local 以下に配置。
$ sudo cp -r usr/include/* /usr/include/ $ sudo cp usr/lib/* /usr/lib/ $ sudo mkdir /usr/local/bin $ sudo cp usr/bin/* /usr/local/bin/ $ sudo /usr/local/bin/gpu-install install
最後の gpu-install でドライバを読み込んでいます。
「sudo /usr/local/bin/gpu-install install 」は再起動の度に必要。
添付のサンプルで動作確認。
$ sudo /usr/local/bin/tiger $ sudo /usr/local/bin/es11ex
(実行結果の画面) フルスクリーンで起動するので VRAM を破壊します。実害はありません。
最初は ssh などネットワーク経由での実行をお勧めします。
サンプルが動けば動作はうまくいったように見えますが、ドキュメントやサンプル
ソースがあるわけでもないので、実際の使い方はまだまだ手探り状態です。
Display インターフェースは egl なので、初期化は以前 OpenGL ES 2.0 Emulator
を取り扱ったときのコードがほぼそのまま使えます。
AMD 版 GL ES 2.0 Emulator のターゲットがこの Z430 なので当たり前といえば
当たり前です。
・OpenGL ES 2.0 Emulator
eglGetDisplay() は EGL_DEFAULT_DISPLAY を使用。
eglChooseConfig() では 4444, 565, 5551, 8888 が使えるようです。
depth は 0, 16, 24 (24+ stencil8) のどれかと組み合わせ。
カラーバッファが 16bit でも 24bit depth を使えます。
バックバッファのフォーマットなので、8888 を指定してもフロントバッファが
32bit になるわけではありません。
eglCreateWindowSurface() で描画と API をバインドしますが、この場合
EGLNativeWindowType に何を指定すればよいのか悩みました。
いろいろ試した結果、/dev/fb0 を渡したら動きました。
EGLNativeWindowType eglwin= open( "/dev/fb0", O_RDWR, 0 ); egl_Surface= eglCreateWindowSurface( egl_Display, egl_Config, eglwin, NULL );
描画のフラッシュと転送は普通に eglSwapBuffers() で動きます。
デバイスファイルにアクセスするため root で実行する必要があります。
フレームバッファは 16bit 1024x600 ですが、倍の容量存在しているのは 32bit
への切り替えを考慮してのことでしょうか。
この辺いろいろとステートを読み出したりしつつ調べている最中です。
例えば EGL_HORIZONTAL_RESOLUTION が 2048 になっている点など、まだ良く
わかっていない部分が多数あります。
描画の印象としてあまり速くありません。eglSwapInterval() に 1 しか設定
できないため、常にモニタのリフレッシュレートと同期している可能性があります。
ただ動作時間が半分ほどで終わってしまい、計算と一致していないのも謎です。
性能はまだ未知数。
取りあえず GLSL のシェーダーを読み込んで、テクスチャの描画まで成功。
シェーダーのコンパイルエラー発生時に、ドライバが詳細なエラーメッセージ(log)
を返してこないのも はまったところです。デバッグは Emulator で行った方が
良いかもしれません。
ヘッダ (GL ES 2.0 の場合)
#include <EGL/egl.h> #include <GLES2/gl2.h> #include <GLES2/gl2ext.h>
ライブラリの指定など (Makefile)
CC = gcc LIBS = -lm -lstdc++ -legl13 -lgles20 INCS = CFLAGS = -O4 -Wall \ -march=armv7-a \ -mtune=cortex-a8 \ -mfloat-abi=softfp \ -mfpu=neon \ TARGET = main OBJS = main.o $(TARGET): $(OBJS) $(CC) -o $(TARGET) $(OBJS) $(LIBS) %.o:%.cpp $(CC) -c -o $@ $< $(CFLAGS) $(INCS)
ARM Cortex-A8 + OpenGL ES 2.0 は iPhone 3GS などハイエンドスマートフォントにも
搭載されています。
比べると NetWalker の良いところはクロス開発しなくてもいいところでしょう。
修正したり設定を変えてテストを繰り返していると、自分でコンパイルできるのは非常に
便利だと実感します。
micro SD 上で作業しているので、開発環境もこの小さい本体だけです。
関連エントリ
・NetWalker PC-Z1 i.MX515 OpenGL ES 2.0 (2)
・NetWalker PC-Z1 i.MX515 OpenGL ES 2.0
・OpenGL ES 2.0 Emulator
2009/11/21
NetWalker PC-Z1 i.MX515 OpenGL ES 2.0 (2)


いろいろ手間取ったけど、何とか動かすことに成功
追記:
Version: 1 3 EGL_CLIENT_APIS: OpenGL_ES OpenVG EGL_EXTENSIONS: eglCreatePbufferFromClientBuffer EGL_KHR_image EGL_AMD_create_image EGL_VENDOR: Advanced Micro Devices, Inc EGL_VERSION: 1.3 Internal version 1.4.1 GL_VERSION: OpenGL ES 2.0 GL_RENDERER: AMD Z430 GL_VENDOR: Advanced Micro Devices, Inc. GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00
関連エントリ
・NetWalker PC-Z1 i.MX515 OpenGL ES 2.0
2009/11/19
NetWalker PC-Z1 i.MX515 OpenGL ES 2.0
見つけたのは自分ではありませんが、このあたりに Linux のソースコードとか
i.MX515 用の OpenGL ES SDK とかいろいろとファイルが追加されているそうです。
・Freescale i.MX515 Software & Tools
関連エントリ
・NetWalker PC-Z1 ubuntu で ctrla を動かす ([A] キーで Control と両立)
i.MX515 用の OpenGL ES SDK とかいろいろとファイルが追加されているそうです。
・Freescale i.MX515 Software & Tools
関連エントリ
・NetWalker PC-Z1 ubuntu で ctrla を動かす ([A] キーで Control と両立)
久しぶりに NetWalker の情報を探したら、モジュールを作れるようになっているし
キーカスタマイズソフト「窓使いの憂鬱」も動くようになっているとのことです。
かなり便利になってきました。ありがたいことです。
Android Zaurusの日記
・NetWalkerのカーネルとローダブルモジュールのビルド
ひとりぶろぐ
・[NetWalker]窓使いの憂鬱をNetWalkerで動かす
しかも「窓使いの憂鬱」では [A]キー を Control にする設定まで出来るようです。
これで ctrla を作らなくて済むし、楽が出来る!!
と思って試したら ctrla の動作とはちょっと違いました。少々甘かったようです。
そこで上のページを参考にして uinput.ko を作り、ctrla を NetWalker 本体の Ubuntu
で動くようにしてみました。
Android Zaurusの日記 さん、ひとりぶろぐ さんの記事を参考にさせていただきました。
ありがとうございました。
以下
・ctrla の動作の違い
・新しい ctrla v1.10
・ctrla を NetWalker の Ubuntu で動かすまで
ctrla は、[A] キーを Control キー兼用として用いるためのソフトです。
● ctrla の動作の違い
「窓使いの憂鬱」の "mod control += !!A" の設定では、[A]キー を押している間に
他のキーが押されたタイミングで Control キーと見なしています。
これだけだと、素早く文字入力を行った場合に意図しない Control キーが挿入されて
しまうことがあります。
例えば「会議」と打とうとして "kai" と素早くタイプすると、[A] を離す前に [I]
が押されて Control-I が入ってしまうことになります。
ctrla では連続タイプについていろいろ検証しており、この状態を区別できるように
二つのクロスストローク判定を導入しています。
もしかしたら「窓使いの憂鬱」でも設定次第で実現出来るのかもしれません。
そのような機能がすでにありましたらごめんなさい。
●クロスストローク判定1、遅延判定
"kai" を素早く打つと、下記のように前のキーを離す前に次のキーを押してしまう
ことがあります。
「窓使いの憂鬱」+ "mod control += !!A" はおそらく (1) のタイミングで判定
しています。これだと Control-I が入ってしまいます。
ctrla では、[A] キーを先に離すと 'A' キーを、[I] を先に離すと Control-I が
入るように判定を遅らせています。
つまり上の例だと (2) のタイミングで 'A' キーを送信します。
下記の例では先に [I] を離しているので (3) のタイミングで Control-I になります。
●クロスストローク判定2、id による識別
実際に使ってみると、上の「遅延判定」だけでは不十分なことがわかります。
例えば「朝」と高速にタイプしようとすると下記のキーストローク "asa" になります。
[S] を押したタイミング (4) でも、[S] を離したタイミング (5) でも、どちらも
[A] キーが押されているため、単純な遅延判定だと (5) で Control-S が入ってしまいます。
そこで ctrla では、[A] キーを押す度に毎回異なる id 値を割り振るようにしています。
キーを押した時点の id と離した時の id 値が異なる場合は、別の [A] キーとみなして
Control に変換しません。
よって上の例の場合、(5) のタイミングで id が異なるのでそのまま 'S' キーを送信します。
●新しい ctrla v1.10
・プログラム ctrla110.tgz
下記の修正を行いました。
1. NetWalker の Ubuntu (uinput.ko) で動作しない問題を修正
2. 連続して 1秒以上 [A] キーだけ押し続けた場合、Control とみなす
1. は hook_main.c で構造体がクリアされていないところがあったために、module
として組み込んだ場合に誤動作していました。カーネルに組み込んだ場合はメモリが
0 初期化されているらしく動いていました。(/dev/input/event* で動くのもそのせい)
テキストエディタ上で考え事をしているとき、無意識に Ctrl キーを押しっぱなしに
していることがあります。カーソル移動とか編集操作を一切せずにキーを離すと
'A' キーが入ってしまうことがありました。
そこで [A] を 1秒以上押し続けた場合は Control と見なすようにしました。
● ctrla を NetWalker の Ubuntu で動かすまで
(1) 3Gモデム対応ツールを入れる
・NetWalker(PC-Z1) 「3Gモデム対応ツール」
この更新を行うと無線 LAN 接続でトラブルが起こる可能性が高いので、先に無線LAN
を off にしておいてください。以前自分でカーネルを build したときに無線 LAN
が動かなかった症状と良く似ています。
(2) uinput.ko を作る
「NetWalkerのカーネルとローダブルモジュールのビルド」の手順をそのまま実行します。
Makefile の修正は「EXTRAVERSION = .10」の行を「EXTRAVERSION = -15-araneo」
に置き換えます。
1時間くらいしてコンパイルが通ったらモジュールを作ります。
メニューで下記の設定を変更します。
(space キーを押して User level driver support を '<M>' にする )
(3) ctrla v1.10 を動かす
まずはこの状態で、他のターミナルやソフトでキーの動作を確認してみてください。
万が一キー入力できなくなった場合も、慌てずに USB キーボードつないでください。
外付けキーボードの動作には影響を与えません。
関連エントリ
・NetWalker PC-Z1 カーネルのコンパイル
・NetWalker PC-Z1 Debian (2)
・NetWalker PC-Z1 Debian
・NetWalker PC-Z1 [A] キーを Control キーと兼用する実験
・NetWalker PC-Z1 Bluetooth とキーカスタムその他
キーカスタマイズソフト「窓使いの憂鬱」も動くようになっているとのことです。
かなり便利になってきました。ありがたいことです。
Android Zaurusの日記
・NetWalkerのカーネルとローダブルモジュールのビルド
ひとりぶろぐ
・[NetWalker]窓使いの憂鬱をNetWalkerで動かす
しかも「窓使いの憂鬱」では [A]キー を Control にする設定まで出来るようです。
これで ctrla を作らなくて済むし、楽が出来る!!
と思って試したら ctrla の動作とはちょっと違いました。少々甘かったようです。
そこで上のページを参考にして uinput.ko を作り、ctrla を NetWalker 本体の Ubuntu
で動くようにしてみました。
Android Zaurusの日記 さん、ひとりぶろぐ さんの記事を参考にさせていただきました。
ありがとうございました。
以下
・ctrla の動作の違い
・新しい ctrla v1.10
・ctrla を NetWalker の Ubuntu で動かすまで
ctrla は、[A] キーを Control キー兼用として用いるためのソフトです。
● ctrla の動作の違い
「窓使いの憂鬱」の "mod control += !!A" の設定では、[A]キー を押している間に
他のキーが押されたタイミングで Control キーと見なしています。
これだけだと、素早く文字入力を行った場合に意図しない Control キーが挿入されて
しまうことがあります。
例えば「会議」と打とうとして "kai" と素早くタイプすると、[A] を離す前に [I]
が押されて Control-I が入ってしまうことになります。
ctrla では連続タイプについていろいろ検証しており、この状態を区別できるように
二つのクロスストローク判定を導入しています。
もしかしたら「窓使いの憂鬱」でも設定次第で実現出来るのかもしれません。
そのような機能がすでにありましたらごめんなさい。
●クロスストローク判定1、遅延判定
"kai" を素早く打つと、下記のように前のキーを離す前に次のキーを押してしまう
ことがあります。
→時間 (1) (2) --------------------------------------- [K]dw ------ [K]up [A]dw ------ [A]up [I]dw ------ [I]up
「窓使いの憂鬱」+ "mod control += !!A" はおそらく (1) のタイミングで判定
しています。これだと Control-I が入ってしまいます。
ctrla では、[A] キーを先に離すと 'A' キーを、[I] を先に離すと Control-I が
入るように判定を遅らせています。
つまり上の例だと (2) のタイミングで 'A' キーを送信します。
下記の例では先に [I] を離しているので (3) のタイミングで Control-I になります。
(3) --------------------------------------- [A]dw ------------------- [A]up [I]dw --- [I]up
●クロスストローク判定2、id による識別
実際に使ってみると、上の「遅延判定」だけでは不十分なことがわかります。
例えば「朝」と高速にタイプしようとすると下記のキーストローク "asa" になります。
→時間 (4) (5) --------------------------------------- [A]dw ------ [A]up [S]dw ------ [S]up [A]dw ------ [A]up --------------------------------------- ID1→ ID2→
[S] を押したタイミング (4) でも、[S] を離したタイミング (5) でも、どちらも
[A] キーが押されているため、単純な遅延判定だと (5) で Control-S が入ってしまいます。
そこで ctrla では、[A] キーを押す度に毎回異なる id 値を割り振るようにしています。
キーを押した時点の id と離した時の id 値が異なる場合は、別の [A] キーとみなして
Control に変換しません。
よって上の例の場合、(5) のタイミングで id が異なるのでそのまま 'S' キーを送信します。
●新しい ctrla v1.10
・プログラム ctrla110.tgz
下記の修正を行いました。
1. NetWalker の Ubuntu (uinput.ko) で動作しない問題を修正
2. 連続して 1秒以上 [A] キーだけ押し続けた場合、Control とみなす
1. は hook_main.c で構造体がクリアされていないところがあったために、module
として組み込んだ場合に誤動作していました。カーネルに組み込んだ場合はメモリが
0 初期化されているらしく動いていました。(/dev/input/event* で動くのもそのせい)
テキストエディタ上で考え事をしているとき、無意識に Ctrl キーを押しっぱなしに
していることがあります。カーソル移動とか編集操作を一切せずにキーを離すと
'A' キーが入ってしまうことがありました。
そこで [A] を 1秒以上押し続けた場合は Control と見なすようにしました。
● ctrla を NetWalker の Ubuntu で動かすまで
(1) 3Gモデム対応ツールを入れる
・NetWalker(PC-Z1) 「3Gモデム対応ツール」
この更新を行うと無線 LAN 接続でトラブルが起こる可能性が高いので、先に無線LAN
を off にしておいてください。以前自分でカーネルを build したときに無線 LAN
が動かなかった症状と良く似ています。
(2) uinput.ko を作る
「NetWalkerのカーネルとローダブルモジュールのビルド」の手順をそのまま実行します。
Makefile の修正は「EXTRAVERSION = .10」の行を「EXTRAVERSION = -15-araneo」
に置き換えます。
1時間くらいしてコンパイルが通ったらモジュールを作ります。
$ sudo aptitude install libncurses5-dev $ make menuconfig
メニューで下記の設定を変更します。
(space キーを押して User level driver support を '<M>' にする )
Input device support ---> Miscellaneous devices ---> <M> User level driver support
$ make modules $ sudo cp drivers/input/misc/uinput.ko /lib/modules/2.6.28-15-araneo/kernel/drivers/input/ $ sudo insmod /lib/modules/2.6.28-15-araneo/kernel/drivers/input/uinput.ko
(3) ctrla v1.10 を動かす
$ mkdir $HOME/ctrla $ cd $HOME/ctrla $ wget http://dench.flatlib.jp/arfiles/ctrla110.tgz $ tar -zxvf ctrla110.tgz $ sleep 1; sudo ctrla/ctrla /dev/input/event5
まずはこの状態で、他のターミナルやソフトでキーの動作を確認してみてください。
万が一キー入力できなくなった場合も、慌てずに USB キーボードつないでください。
外付けキーボードの動作には影響を与えません。
関連エントリ
・NetWalker PC-Z1 カーネルのコンパイル
・NetWalker PC-Z1 Debian (2)
・NetWalker PC-Z1 Debian
・NetWalker PC-Z1 [A] キーを Control キーと兼用する実験
・NetWalker PC-Z1 Bluetooth とキーカスタムその他