わいえむねっと

Contents
Categories
Calendar
2026/05
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Monthly Archives
~2000/01
Recent Entries
RSS1.0
Templates
Information
Processed: 0.057 sec
Chashed: -
2014/09/29 Mon
OpenGL ESメモ@Yocto


前提

  • Ubuntu 12.04
  • Yocto Project 1.6.1 - Daisy
  • qemuarm
  • core-image-x11
  • gcc
  • g++
  • libegl-mesa
  • libegl-mesa-dev
  • libgles2-mesa
  • libgles2-mesa-dev


テストコード


#include <stdlib.h>
#include <EGL/egl.h>

int main()
{
    Display* xdisp = XOpenDisplay(NULL);
    if(xdisp == NULL)
    {
        abort();
    }

    Window rootWin = DefaultRootWindow(xdisp);

    int screen = DefaultScreen(xdisp);
    unsigned long white = WhitePixel(xdisp, screen);
    unsigned long black = BlackPixel(xdisp, screen);

    Window window = XCreateSimpleWindow(
        xdisp, rootWin, 
        100, 100,
        640, 480,
        2,
        black, white);

#ifdef DEFAULT
    EGLDisplay eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
#else
    EGLDisplay eglDisplay = eglGetDisplay((EGLNativeDisplayType)xdisp);
#endif
    if(eglDisplay == EGL_NO_DISPLAY)
    {
        abort();
    }
    if(!eglInitialize(eglDisplay, NULL, NULL))
    {
        abort();
    }

    EGLint attr[] = {
        EGL_BUFFER_SIZE, 16,
        EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
        EGL_NONE,
    };
    EGLConfig cfg;
    EGLint numConfigs;
    if(!eglChooseConfig(eglDisplay, attr, &cfg, 1, &numConfigs))
    {
        abort();
    }
    if(numConfigs != 1)
    {
        abort();
    }
    EGLSurface eglSurface = eglCreateWindowSurface(eglDisplay, cfg, window, NULL);
    if(eglSurface == EGL_NO_SURFACE)
    {
        abort();
    }
}


EGL_DEFAULT_DISPLAYで初期化

Native platform type: drm (build-time configuration)


# arm-poky-linux-gnueabi-g++ foo.cpp -lX11 -lEGL -DDEFAULT
# export EGL_LOG_LEVEL=debug
# ./a.out
libEGL debug: Native platform type: drm (build-time configuration)
libEGL debug: EGL search path is /usr/lib/egl
libEGL debug: added egl_dri2 to module array
libEGL debug: added egl_glx to module array
gbm_create_device: invalid fd: -1
libEGL warning: GLX: failed to load GLX
libEGL debug: EGL user error 0x3001 (EGL_NOT_INITIALIZED) in eglInitialize
Aborted

eglInitializeでEGL_NOT_INITIALIZED。


Native platform type: x11 (environment overwrite)


# export EGL_PLATFORM=x11
# ./a.out
libEGL debug: Native platform type: x11 (environment overwrite)
libEGL debug: EGL search path is /usr/lib/egl
libEGL debug: added egl_dri2 to module array
libEGL debug: added egl_glx to module array
libEGL warning: DRI2: failed to authenticate
libEGL debug: DRI2: dlopen(/usr/lib/dri/swrast_dri.so)
libEGL debug: DRI2: found extension `DRI_Core'
libEGL info: DRI2: found extension DRI_Core version 1
libEGL debug: DRI2: found extension `DRI_SWRast'
libEGL info: DRI2: found extension DRI_SWRast version 3
libEGL debug: DRI2: found extension `DRI_TexBuffer'
libEGL info: DRI2: found extension DRI_TexBuffer version 2
libEGL debug: the best driver is DRI2
libEGL debug: EGL user error 0x3003 (EGL_BAD_ALLOC) in xcb_get_geometry
Aborted

eglCreateWindowSurfaceでEGL_BAD_ALLOC。


X11のDisplayで初期化

Native platform type: x11 (autodetected)


# arm-poky-linux-gnueabi-g++ foo.cpp -lX11 -lEGL
# unset EGL_PLATFORM
# ./a.out
libEGL debug: Native platform type: x11 (autodetected)
libEGL debug: EGL search path is /usr/lib/egl
libEGL debug: added egl_dri2 to module array
libEGL debug: added egl_glx to module array
libEGL warning: DRI2: failed to authenticate
libEGL debug: DRI2: dlopen(/usr/lib/dri/swrast_dri.so)
libEGL debug: DRI2: found extension `DRI_Core'
libEGL info: DRI2: found extension DRI_Core version 1
libEGL debug: DRI2: found extension `DRI_SWRast'
libEGL info: DRI2: found extension DRI_SWRast version 3
libEGL debug: DRI2: found extension `DRI_TexBuffer'
libEGL info: DRI2: found extension DRI_TexBuffer version 2
libEGL debug: the best driver is DRI2
libEGL debug: Display 0x1b160 is destroyed with resources

正常終了。


Native platform type: drm (environment overwrite)


# export EGL_PLATFORM=drm
# ./a.out
libEGL debug: Native platform type: drm (environment overwrite)
libEGL debug: EGL search path is /usr/lib/egl
libEGL debug: added egl_dri2 to module array
libEGL debug: added egl_glx to module array
Segmentation fault

eglInitializeでSegmentation fault。


参考サイト

すらりん日記 ≫ Blog Archive ≫ Ubuntuで EGL使えるか?|No:3072|すらりん日記
http://blog.techl​ab-xe.net/archives/3072

Mesa EGL
http://www.mesa3d​.org/egl.html
2014/09/28 Sun
寝付けずに横になったり椅子に座ったりを繰り返しているうちに5時になり気が付いたら落ちていて6時半に目覚ましで飛び起きる。
一路千葉。
某市の卓球大会に参加してくる。



シングルスのみ参加の予定だったけど、K先生がダブルスを組む予定だった教え子が別の教え子と組むことになってK先生自身が余ったからと代替要員として参加することになる。

  • ダブルス
  • 中学生 1-3 ×
  • クラブ所属 2-3 ×
  • 最終セットでデュースにもつれこんだけど、最後の最後にスマッシュをミスって敗北。試合後握手しながら「ミスに救われました!」て笑顔で言われた。ぐぬぬ。
  • シングルス
  • クラブ所属 0-3 ×
  • K先生の教え子 0-3 ×
  • 1、2セット目はデュースで競り負けたけど、3セット目はあっさり取られて敗北。
  • クラブ所属 3-1 ○

かろうじて一勝。
今年はまだ3回しか練習できてなくて圧倒的に練習不足だったけど、それなりに動けた気はする。
サーブとレシーブは駄目すぎた。

いい汗かいた!



そして水分補給@庄や。
K先生が忘れ物というかゴミというかの行方を探しに体育館に戻っている間、弟と二人で飲む。
弟と二人で飲むのとか初めてな気がするなと思いつつ、仕事の話を聞いたりとか。

小一時間してからK先生が合流してさらに飲んだくれ。
さくっと済ませましょうて言ってたけど、ぜんぜんさくっとしてなかった気がするのはいつものこと。
ハイボール大ジョッキ何杯飲んだんだあんた。
2014/09/27 Sat
寝付けずに朝。
最近また生活サイクルが破綻してる。 CMで見かけた「まぜてマジック」を買ってきてタルタル。

商品特長|まぜてマジック まぜマジ100レシピ|ハウス食品
http://mazemagi.h​ousefoods.​jp/ie/product/
2014/09/26 Fri
定時間際になって届いたカーネルパッチを適用したらカーネルクラッシュしなくなったので帰る。 録画タイミングが遅れている気がしたので時計を確認したら1分遅れていました。
自動同期を設定しているはずなのになぁと手動で同期してみたところ時刻が変わらず。
あっれーと思いながら、適当に時計をずらしてから時刻同期をかけてみるとまた1分遅れの時間に。
なんで。

NTPサーバの時計がずれているのかとRTX-1100で show environment してみたけどあってる。

と思ったら、Hyper-Vホストの時刻がずれてた。(※1)
そういえばホストは時刻同期の設定してなかった。
というか、NTPサーバから取得した時刻をホストの時刻で上書くような動きするのか。
なんだそれ。


※1)録画サーバはHyper-Vゲスト。
2014/09/25 Thu
テストボード交換のために昼下がりにダンボール箱を持って外出。
今日は暑すぎる。



No such file or directory を回避したら今度は no devices found と言われるようになってげんなりしていたけどテストボードのリビジョンが上がったことでデバイスが見つかるようになってヒューッ!と思ったけどアクセスを開始した瞬間にカーネルクラッシュして死んだので俺も死んだ。
脂肪増殖の“鍵”を発見 メタボ治療の新たな手がかりに? | 地震予測検証・地震予知情報 / 防災情報【ハザードラボ】
http://www.hazard​lab.jp/know/topics/detail/7/4/7435.html
東京医科歯科大学の研究グループは、病原体センサー分子「Mincle(ミンクル)」が、脂肪肝やメタボリックシンドロームの原因となる脂肪組織の異常増殖を引き起こすことを突き止めた。

都交通局のあいつですか。


というか、あいつ羽生えてたのか。
2014/09/24 Wed

前回までのあらすじ

クロスビルドしたバイナリをボードに持っていって叩くと "No such file or directory" とか言われる。



あるだろ!なにがないのさ!
とかぼやきながら、readelfの出力を小一時間眺めた結果、ld-linux.so.3 が実機にないことに気が付く。

「ダイナミックローダ!」

通常、共有ライブラリが存在しない場合のメッセージは "libXX.so: not found" だけど、大元がいないとこうなるのか。

実機のダイナミックローダは ld-linux-armhf.so.3。
Hard Floatやん…
クロスビルド環境をarmelからarmhfにしたら普通に起動。
やれやれ。


readelf(1): Displays info about ELF files - Linux man page
http://linux.die.​net/man/1/readelf

ld-linux(8): dynamic linker/loader - Linux man page
http://linux.die.​net/man/8/ld-linux
発熱。
なんだかここのところしょっちゅう発熱してる気が。

それはそれとして、人のはけた後の自社に立ち寄って月締めの手続きをしてから帰宅。
2014/09/23 Tue
古いほうの洗濯紐が切れそう。 YoctoでビルドしているARMなカーネルにUSBネットワークアダプタを認識させるメモ。



前提

  • Ubuntu 12.04
  • Yocto Project 1.6.1 - Daisy
  • Logitec LAN-TXU2C
  • チップは ASIX AX88772


カーネルコンフィグ

$ source ./oe-init-build-env
$ bitbake linux-yocto -c kernel_configme -f
$ bitbake linux-yocto -c menuconfig

  • Device Drivers
  • Network device support
  • USB Network Adapters
  • Multi-purpose USB Networking Framework をMで選択
  • Save
  • .configに上書き



メモ

.configのパスは以下。

build/tmp/work/qemuarm-poky-linux-gnueabi/linux-yocto/3.14+gitAUTOINC+09424cee64_d7a5330e50-r0/linux-qemuarm-standard-build/.config


ビルド

$ hob

kernel-module-asix が増えているのでチェックしてビルド。




動作確認

実機がないのでqemu-system-armで。

  • ビルドしたイメージを起動
  • Ctrl+Alt+2 でQEMUモニタに切り替え
  • USBデバイスのIDを確認

(qemu) info usbhost
  Bus 1, Addr 3, Port 2, Speed 12 Mb/s
    Class ff: USB device 0b95:772b, AX88772B
  Bus 1, Addr 2, Port 1, Speed 12 Mb/s
    Class 00: USB device 80ee:0021, USB Tablet

  • ゲストOSにUSBデバイスを接続

(qemu) usb_add host:0b95:772b



  • Ctrl+Alt+1 でゲストOSに復帰
  • asixモジュールがロードされていることを確認。

# lsmod
Module                  Size  Used by
asix                   20571  0
usbnet                 24443  1 asix
libphy                 27955  1 asix
nfsd                  292501  11


参考サイト

Yocto Project Linux Kernel Development Manual
http://www.yoctop​roject.org​/docs/1.6/kernel-dev/kernel-dev.html#generating​-configurat​ion-files

「Yocto Project」の構成を紐解いてみる(その1) : コンピュータ全般情報サイト
http://blog.lived​oor.jp/naokani200​2/archives/52029933.h​tml

その他のメモ
http://www.h7.dio​n.ne.jp/~qemu-win/OtherTips-ja.html#usb
2014/09/22 Mon
朝起きたらK先生の部屋でした。

びっくりするほど記憶ない…!

有休申請しといて良かったわーと思ったけど、翌日休みという意識が飲みすぎを加速させたことを考えると一概に良かったとは言えないな!というか、送る会だったのに送った記憶がまったくないな!と思いながら東京に帰る。
2014/09/21 Sun
昼夜逆転してしまったので8時に寝て10時にK先生からのメールで起きて二度寝して12時に起床。
千葉に発つ。



休み明けに仕事で使う機材を買ったり、名刺ホルダを買ったり。
あと、ミューズのおかんの名前を冠するメモ帳があったので買ってみたり。

BRAND|Mnemosyne(ニーモシネ) 今日の記憶を、明日の創造に
http://www.mnemos​yne-japan.com/brand/index.html​
ギリシア神話にはミューズと呼ばれる9人の女神たちがおり、学問や芸術をつかさどっていました。ニーモシネはその女神たちの母で古代ギリシアの「記憶の女神」といわれています。

メモ帳はずっとRHODIAを使っているけど、Mnemosyneはラインナップが豊富で面白そう。



集合時間まで余裕があったので、津田沼から実籾まで歩く。



というわけで、いつもの鈴蘭苑。
来月から沖縄の大学に勤務するH君を送る会。

朝から何も食べてなかった上に1時間ほど歩いてきてのども渇いていてよくわからないピッチで飲んで速攻でへべれけになる。



まずはハイボール大ジョッキともつ煮。
そして速攻でハイボール大ジョッキおかわり。


ハイボール大ジョッキに海鮮盛りにまるごとトマトチーズもんじゃ。


もち梅ベビーにハイボール大ジョッキ。


ハイボール大ジョッキにしいたけえりんぎ。


ハイボール大ジョッキで火傷を冷やすK先生。


ハイボール大ジョッキにはんぺん。(※1)


デザート焼いてもらって、とどめのハイボール大ジョッキ。

というか、どう考えても飲みすぎです。本当にありがとうございました。


※1)このあたりから記憶ない。はんぺん好きなのにはんぺんの記憶がまったくない。


鈴蘭苑 (すずらんえん) - 実籾/お好み焼き [食べログ]
http://tabelog.co​m/chiba/A1202/A120204/12006158/
2014/09/20 Sat
ネットカフェに泊まって朝帰宅して夕方まで寝こけてたら右足の痙攣なおった。
“代々木公園の芝生”をイメージした、やすらぐiPhoneケース「Shibaful」 - ケータイ Watch
http://k-tai.impres​s.co.jp/docs/news/20140919_6​67636.html​
メーカーによると、Shibaful Yoyogi Parkは“公園の芝生に触れるやすらぎをもっと身近にという想いで、都心にありながら緑あふれる代々木公園の芝生をイメージした”としている。

ここ最近の代々木公園のイメージはやすらぎとかじゃなくてデング熱な気がするのでタイミング悪すぎるんじゃなかろうかと。