Armadilloフォーラム

Armadillo-840 (液晶モデル) で DirectFB を動作させた実績は?

access.mihara

2015年12月14日 16時48分

お世話になっております。三原と申します。

現在、開発中のアプリの性能評価を行うため、顧客の環境に近い Armadillo-840(液晶モデル)にアプリを移植しています。ただ、開発の都合で、アプリが Qt ではなく DirectFB を使っています。

Armadillo-840 で DirectFB を動作させた実績はありますでしょうか? DirectFB 公式サイトがダウンしている状況下で苦しくはございますが、試行はあったのでしょうか?

コメント

あまりに初歩の質問をしてしまったので、自分が行ってつまづいたところまでを記します。

ATDE5 の /usr/arm-linux-gnueabihf/lib には libdirectfb.so があるのですが、romfs-a840-v1.10.img.tar.xz 内にはないため、DirectFB をソースからビルドしようとしました。

DirectFB 公式サイトがダウンしているため https://github.com/Distrotech/DirectFB から取得したタグ DIRECTFB_1_7_7 を ATDE5 でビルドすることにしました。設定は

export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export AR=arm-linux-gnueabihf-ar
export RANLIB=arm-linux-gnueabihf-ranlib
export LD=arm-linux-gnueabihf-ld
 
./configure --host=arm-linux-gnueabihf
make
sudo make DESTDIR=/media/rootfs install <= SD カードをマウント

ならびに手元にあった DirectFB-examples-1.6.0.tar.gz をビルドして動作確認しようとしました。

/root/.directfbrc は最初は最小限に

fbdev=/dev/fb1 <= 液晶パネルに出力したい
mode=800x480

これで df_andi を走らせると、次のエラーが出ます。

(*) Direct/Thread: Started 'SigHandler' (3396) [CRITICAL - OTHER/0] <8388608>...
 
   ~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.7 |~~~~~~~~~~~~~~~~~~~~~~~~~~
        (c) 2012-2015  DirectFB integrated media GmbH
        (c) 2001-2015  The world wide DirectFB Open Source Community
        (c) 2000-2004  Convergence (integrated media) GmbH
      ----------------------------------------------------------------
 
(*) DirectFB/Core: Single Application Core. (2015-12-14 09:57) 
(!) Direct/Modules: Unable to dlopen `/usr/local/lib/directfb-1.7-7/systems/libdirectfb_drmkms_system.so'!
    --> libkms.so.1: cannot open shared object file: No such file or directory
(*) Direct/Memcpy: Using libc memcpy()
(*) Direct/Thread: Started 'Fusion Dispatch' (3397) [MESSAGING - OTHER/0] <8388608>...
(*) Direct/Thread: Started 'VT Switcher' (3402) [CRITICAL - OTHER/0] <8388608>...
(*) Direct/Thread: Started 'VT Flusher' (3403) [DEFAULT - OTHER/0] <8388608>...
(*) DirectFB/FBDev: Found 'SH Mobile LCDC' (ID 0) with frame buffer at 0x56100000, 6000k (MMIO 0x00000000, 0k)
(!) Direct/Modules: Unable to dlopen `/usr/local/lib/directfb-1.7-7/inputdrivers/libdirectfb_tslib.so'!
    --> libts-0.0.so.0: cannot open shared object file: No such file or directory
(*) Direct/Thread: Started 'Keyboard Input' (3404) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (3405) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: IMPS/2 Mouse (1) 1.0 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (3406) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: IMPS/2 Mouse (2) 1.0 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (3407) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: gpio-keys 0.1 (directfb.org)
(*) Direct/Thread: Started 'Hotplug with Linux Input' (3408) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: Hot-plug detection enabled with Linux Input Driver 
(*) DirectFB/Input: Hot-plug detection enabled with Input Hub Driver 
(*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(*) Direct/Thread: Started 'Genefx' (3409) [DEFAULT - OTHER/0] <8388608>...
(*) FBDev/Mode: Setting 800x480 RGB32
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 32 bit (RGB32)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
(*) FBDev/Mode: Setting 800x480 RGB32
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 32 bit (RGB32)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
(*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
(!) [SigHandler        92.911,500] ( 3396) Direct/Signals:                --> Caught signal 2 (sent by the kernel) <--
(!) [SigHandler        92.911,783] ( 3396) Direct/Signals:                --> -1
(!) Direct/Interface: Unable to dlopen `/usr/local/lib/directfb-1.7-7/interfaces/IDirectFBImageProvider/libidirectfbimageprovider_jpeg2000.so'!
    --> libjasper.so.1: cannot open shared object file: No such file or directory
(*) Direct/Interface: Loaded 'PNG' implementation of 'IDirectFBImageProvider'.
(*) Direct/Interface: Using 'JPEG' implementation of 'IDirectFBImageProvider'.
(以下略)

mode を設定するところでの I/O error を修正できず、先に進めなくなりました。

この状況で、次の選択があると思っていますが、どれに見込みがあるか分からないでいます。

・ATDE5 の libdirectfb.so 以下を romfs にコピーする
・Debian イメージを使う
・DirectFB をビルドする際の configure オプションを模索する
・configure オプションは十分とみなして /root/.directfbrc を模索する

よろしくお願いいたします。

> DirectFB 公式サイトがダウンしているため https://github.com/Distrotech/DirectFB から取得したタグ DIRECTFB_1_7_7 を ATDE5 でビルドすることにしました。

github に、メンテナーがコードを上げているようです。
https://github.com/deniskropp/DirectFB

公式サイトになにが起こったのか、という issue も上がっていますが、返事がないようですね。

さて、本題ですが

(*) FBDev/Mode: Setting 800x480 RGB32
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 32 bit (RGB32)!

24 bit 設定だったら、うまくいきますか?

debug を有効にしてビルドすると、いろいろ表示してくれるはずです。

助言ありがとうございます。試してみましたが、改善しません。

行ったことを記します。

1. DirectFB をビルドするのに必要な flux を https://github.com/deniskropp/flux から取得し直して、ホストにインストール

./autogen.sh
make
sudo make install

2. DirectFB を https://github.com/deniskropp/DirectFB から取得すると、タグが DIRECTFB_1_7_0 と DIRECTFB_1_7_4 の2つしかなかったので DIRECTFB_1_7_4 をビルド

./autogen.sh
./configure --enable-debug=yes --host=arm-linux-gnueabihf
make
sudo make DESTDIR=/media/rootfs install <= /media/rootfs に SD カードをマウント
<code>
 
3. DirectFB-examples-1.6.0.tar.gz をビルド
<code>
./configure --host=arm-linux-gnueabihf
make
sudo make DESTDIR=/media/rootfs install

4. /root/.directfbrc を下記のように設定

fbdev=/dev/fb1
mode=800x480
pixelformat=RGB24

5. 1 ~ 4 まで行ったうえで df_andi を動作させると、下記のエラーを出力してアプリが動作しない

(*) Direct/Thread: Started 'SigHandler' (3372) [CRITICAL - OTHER/0] <8388608>...
 
   ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.4 |~~~~~~~~~~~~~~~~~~~~~~~~~~
        (c) 2012-2013  DirectFB integrated media GmbH
        (c) 2001-2013  The world wide DirectFB Open Source Community
        (c) 2000-2004  Convergence (integrated media) GmbH
      ----------------------------------------------------------------
 
(*) DirectFB/Core: Single Application Core. (2015-12-15 05:01) [ DEBUG ]
(!) Direct/Modules: Unable to dlopen `/usr/local/lib/directfb-1.7-4/systems/libdirectfb_drmkms_system.so'!
    --> libkms.so.1: cannot open shared object file: No such file or directory
(*) Direct/Memcpy: Using libc memcpy()
(*) Direct/Thread: Started 'Fusion Dispatch' (3373) [MESSAGING - OTHER/0] <8388608>...
(*) Direct/Thread: Started 'VT Switcher' (3378) [CRITICAL - OTHER/0] <8388608>...
(*) Direct/Thread: Started 'VT Flusher' (3379) [DEFAULT - OTHER/0] <8388608>...
(*) DirectFB/FBDev: Found 'SH Mobile LCDC' (ID 0) with frame buffer at 0x56100000, 6000k (MMIO 0x00000000, 0k)
(!) Direct/Modules: Unable to dlopen `/usr/local/lib/directfb-1.7-4/inputdrivers/libdirectfb_tslib.so'!
    --> libts-0.0.so.0: cannot open shared object file: No such file or directory
(*) Direct/Thread: Started 'Keyboard Input' (3380) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (3381) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: IMPS/2 Mouse (1) 1.0 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (3382) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: IMPS/2 Mouse (2) 1.0 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (3383) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: st1232-touchscreen (1) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (3384) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: gpio-keys (2) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Hotplug with Linux Input' (3385) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: Hot-plug detection enabled with Linux Input Driver 
(*) DirectFB/Input: Hot-plug detection enabled with Input Hub Driver 
(*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(*) Direct/Thread: Started 'Genefx' (3389) [DEFAULT - OTHER/0] <8388608>...
(*) FBDev/Mode: Setting 800x480 RGB24
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 24 bit (RGB24)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
(*) FBDev/Mode: Setting 800x480 RGB24
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 24 bit (RGB24)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
(*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
(!) Direct/Interface: Unable to dlopen `/usr/local/lib/directfb-1.7-4/interfaces/IDirectFBImageProvider/libidirectfbimageprovider_jpeg2000.so'!
    --> libjasper.so.1: cannot open shared object file: No such file or directory
(*) Direct/Interface: Loaded 'PNG' implementation of 'IDirectFBImageProvider'.
(*) Direct/Interface: Using 'JPEG' implementation of 'IDirectFBImageProvider'.
(*) FBDev/Mode: Setting 800x480 RGB24
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x1440) at 24 bit (RGB24)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
(*) FBDev/Mode: Setting 800x480 RGB24
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x1440) at 24 bit (RGB24)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
 
(以下、FBDev/Mode と Core/LayerRegion のエラーのループ)

この状況で次に試すべきことはなんでしょうか?

Framebuffer の mode を設定するまでにエラーを起こさない DirectFB をビルドすることができましたが、液晶に表示できませんでした。

行ったことを記します。

1. tslib を pkg-config から見えなくする (DirectFB の configure で無効にするには他の inputdrivers を列挙しなければならず、書洩らすのが怖かったため)

pushd /usr/arm-linux-gnueabihf/lib/pkgconfig
sudo mv tslib-0.0.pc tslib-0.0.pc.bak
popd

2. DirectFB を下記の設定でビルドする

・enable-drmkms ... NO
・enable-debug ... YES
・host ... arm-linux-gnueabihf

./configure --enable-drmkms=no --enable-debug=yes --host=arm-linux-gnueabihf
make
sudo make DESTDIR=/media/rootfs install <= SD カードをマウント

3. /root/.directfbrc は、とりあえず最小限の1行

fbdev=/dev/fb1

この状態で DirectFB-examples の df_andi を起動させると下記のエラーを起こします。

(*) Direct/Thread: Started 'SigHandler' (3373) [CRITICAL - OTHER/0] <8388608>...
 
   ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.4 |~~~~~~~~~~~~~~~~~~~~~~~~~~
        (c) 2012-2013  DirectFB integrated media GmbH
        (c) 2001-2013  The world wide DirectFB Open Source Community
        (c) 2000-2004  Convergence (integrated media) GmbH
      ----------------------------------------------------------------
 
(*) DirectFB/Core: Single Application Core. (2015-12-16 02:36) [ DEBUG ]
(*) Direct/Memcpy: Using libc memcpy()
(*) Direct/Thread: Started 'Fusion Dispatch' (3374) [MESSAGING - OTHER/0] <8388608>...
(*) Direct/Thread: Started 'VT Switcher' (3379) [CRITICAL - OTHER/0] <8388608>...
(*) Direct/Thread: Started 'VT Flusher' (3380) [DEFAULT - OTHER/0] <8388608>...
(*) DirectFB/FBDev: Found 'SH Mobile LCDC' (ID 0) with frame buffer at 0x56100000, 6000k (MMIO 0x00000000, 0k)
(*) Direct/Thread: Started 'Keyboard Input' (3381) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (3382) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: IMPS/2 Mouse (1) 1.0 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (3383) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: IMPS/2 Mouse (2) 1.0 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (3384) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: st1232-touchscreen (1) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (3385) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: gpio-keys (2) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Hotplug with Linux Input' (3386) [INPUT - OTHER/0] <8388608>...
(*) DirectFB/Input: Hot-plug detection enabled with Linux Input Driver 
(*) DirectFB/Input: Hot-plug detection enabled with Input Hub Driver 
(*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(*) Direct/Thread: Started 'Genefx' (3389) [DEFAULT - OTHER/0] <8388608>...
(*) FBDev/Mode: Setting 800x480 RGB32
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 32 bit (RGB32)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
(*) FBDev/Mode: Setting 800x480 RGB32
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 32 bit (RGB32)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
(*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
(*) Direct/Interface: Loaded 'PNG' implementation of 'IDirectFBImageProvider'.
(*) Direct/Interface: Using 'JPEG' implementation of 'IDirectFBImageProvider'.
(*) FBDev/Mode: Setting 800x480 RGB32
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x1440) at 32 bit (RGB32)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(!) Core/LayerRegion: dfb_layer_region_realize() in dfb_layer_region_flip_update() failed!
    --> A general I/O error occured
 
(以下、FBDev/Mode と Core/LayerRegion のエラーのループ)

また、デフォルトで起動する qmlscene を起動しないように /etc/config/rc.local を編集し flatfsd -s で保存したのちに試しても状況は改善しませんでした。

この状況で次に試すべきことはなんでしょうか?

> debug を有効にしてビルドすると、いろいろ表示してくれるはずです。

すみません。debug 出力するために .directfbrc に debug を指定しなければいけないことに気づいていませんでした。

debug 出力するとエラー発生個所が示されていました。

(*) FBDev/Mode: Setting 800x480 RGB32
(-) [Main Thread      5445.586,718] ( 5107) FBDev/Mode:                dfb_fbdev_find_mode()
(-) [Main Thread      5445.586,763] ( 5107) FBDev/Mode:                dfb_fbdev_set_mode( mode: 0x1e6e8, config: 0x22b9c )
(-) [Main Thread      5445.586,807] ( 5107) FBDev/Mode:                dfb_fbdev_mode_to_var( mode: 0x1e6e8 )
(-) [Main Thread      5445.586,848] ( 5107) FBDev/Mode:                  -> resolution   800x480
(-) [Main Thread      5445.586,886] ( 5107) FBDev/Mode:                  -> virtual      800x480
(-) [Main Thread      5445.586,923] ( 5107) FBDev/Mode:                  -> pixelformat  RGB32
(-) [Main Thread      5445.586,959] ( 5107) FBDev/Mode:                  -> buffermode   FRONTONLY
(-) [Main Thread      5445.587,001] ( 5107) Core/Graphics:             dfb_gfxcard_lock()
(-) [Main Thread      5445.587,041] ( 5107) Fusion/Skirmish:           fusion_skirmish_prevail( 0x1df3c, 'GfxCard' )
(-) [Main Thread      5445.600,904] ( 5107) FBDev/Mode:                  => read back mismatch! (800x480 [800x1920] should be 800x480 [800x480])
(-) [Main Thread      5445.600,974] ( 5107) Fusion/Skirmish:           fusion_skirmish_dismiss( 0x1df3c, 'GfxCard' )
(!) FBDev/Mode: Failed to switched to 800x480 (virtual 800x480) at 32 bit (RGB32)!
(!) Core/LayerRegion: Driver's SetRegion() call failed!
    --> A general I/O error occured
(-) [Main Thread      5445.601,114] ( 5107) Core/Layers:               region_buffer_unlock(): region=0x22708, lock buffer=0x22e50
(-) [Main Thread      5445.601,162] ( 5107) Core/SurfBuffer:           dfb_surface_buffer_unlock( 0x7e9f55d4 )
(-) [Main Thread      5445.601,207] ( 5107) Core/SurfPoolLock:         dfb_surface_pool_unlock( 0x1d610 [2 - Frame Buffer Memory], 0x23d58 )

1. mode を 800x480 に設定したはずなのに、DirectFB が結果を確認すると仮想スクリーンが 800x1920 と大きいので、DirectFB は mode 設定に失敗したと判断した
2. SetRegion() の失敗は debug 出力だけの情報はなし

ここから対策が分かるでしょうか?

液晶パネルの /dev/fb1 に対して fbset を実行すると仮想解像度が 800x1920 と出力されます。どうも仮想解像度が変わらないようです。

[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1
 
mode "800x480-69"
        # D: 37.125 MHz, H: 35.156 kHz, V: 68.934 Hz
        geometry 800 480 800 1920 32
        timings 26936 88 40 20 5 128 5
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode

> 液晶パネルの /dev/fb1 に対して fbset を実行すると仮想解像度が 800x1920 と出力されます。どうも仮想解像度が変わらないようです。

fbset で実解像度は変更できても仮想解像度を変更できなかったコマンド出力結果をコピーします。

[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1
 
mode "800x480-69"
        # D: 37.125 MHz, H: 35.156 kHz, V: 68.934 Hz
        geometry 800 480 800 1920 32
        timings 26936 88 40 20 5 128 5
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode
 
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1 -xres 480
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1
 
mode "480x480-99"
        # D: 37.125 MHz, H: 50.442 kHz, V: 98.905 Hz
        geometry 480 480 800 1920 32
        timings 26936 88 40 20 5 128 5
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode
 
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1 -yres 280
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1
 
mode "480x280-163"
        # D: 37.125 MHz, H: 50.442 kHz, V: 162.715 Hz
        geometry 480 280 800 1120 32
        timings 26936 88 40 20 5 128 5
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode
 
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1 -xres 800
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1 -yres 480
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1
 
mode "800x480-69"
        # D: 37.125 MHz, H: 35.156 kHz, V: 68.934 Hz
        geometry 800 480 800 1920 32
        timings 26936 88 40 20 5 128 5
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode
 
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1 -vxres 400
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1
mode "800x480-69"
        # D: 37.125 MHz, H: 35.156 kHz, V: 68.934 Hz
        geometry 800 480 800 1920 32
        timings 26936 88 40 20 5 128 5
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode
 
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1 -vyres 400
[root@armadillo840-0 (ttySC2) ~]# fbset -fb /dev/fb1
 
mode "800x480-69"
        # D: 37.125 MHz, H: 35.156 kHz, V: 68.934 Hz
        geometry 800 480 800 1920 32
        timings 26936 88 40 20 5 128 5
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode

カーネルをビルドしようとしましたがうまくいきません。

http://armadillo.atmark-techno.com/armadillo-840/downloads から「Linuxカーネル v3.4-at16」を取得しました。make menuconfig を実行すると、"Support for frame buffer devices" 以下が「Armadillo-840 製品マニュアル Version 1.6.0」の記載と異なっています。

Device Drivers --->
  Graphics support --->
    Support for frame buffer devices --->
      SuperH Mobile LCDC framebuffer support    <= この行が make menuconfig 実行時に見つかりません。

上記の tar ボールで間違ってないでしょうか?

> http://armadillo.atmark-techno.com/armadillo-840/downloads から「Linuxカーネル v3.4-at16」を取得しました。make menuconfig を実行すると、"Support for frame buffer devices" 以下が「Armadillo-840 製品マニュアル Version 1.6.0」の記載と異なっています。

すみません。「Armadillo-840 製品マニュアル Version 1.6.0」の「21. Howto」を読んで、Atmark-Dist の make menuconfig から修正するのだと知りました。

そこでカーネルをコンフィグしようとしていますが、Framebuffer の仮想解像度を変えられるようにする設定項目が分かりません。どうすればいいでしょうか?

> https://users.atmark-techno.com/comment/2707#comment-2707
> こちらのコメントで報告されていた以下のエラーをこちらでも再現し、現在調査中です。
> > (!) Direct/Modules: Unable to dlopen `/usr/local/lib/directfb-1.7-4/inputdrivers/libdirectfb_tslib.so'!
> > --> libts-0.0.so.0: cannot open shared object file: No such file or directory

これは、各種ボードで共通に用いる ATDE5 の /usr/arm-linux-gnueabihf/lib/pkgconfig には tslib-0.0.pc が存在するものの Armadillo-840 向け romfs には動的ライブラリ libts-0.0.so.0 が存在しないというミスマッチのため、DirectFB が romfs に存在しない libts-0.0.so.0 を使用するコードをビルドしてしまうことによります。

configure で --with-inputdrivers を明記して tslib を使用しない設定にするか、pkg-config から tslib-0.0.pc を見えなくすると、このエラーは出なくなります。

当方では、このエラーが出ないようにビルドしても画面は描画されませんでした。

ずるい方法で液晶パネルに表示させました。

DirectFB 1.7.4 の /systems/fbdev/fbdev.c の 2079 ~ 2080 行にある、仮想解像度をチェックするコードをコメントアウトしました。

SuperH Mobile HDMI controller support は y 軸の仮想解像度が実解像度の4倍に固定されています。DirectFB はダブルバッファ・トリプルバッファで使用するので最大で3倍しか使用しないことを見ると、4倍確保されていればバッファオーバーフローはないと思い、エラーチェックを外しました。すると他には問題が発生せず DirectFB-examples のアプリも弊社アプリも液晶パネルに描画できました。

弊社では製品ではなくデモ目的で使用するので、とりあえずお客様に動いている画面を見せられるので目的を果たせます。

DirectFB のエラーチェックのコードをつぶさずに対応するには、SuperH Mobile HDMI controller support のコードを改造しなければ無理でしょう。

> https://users.atmark-techno.com/comment/2709#comment-2709
> こちらのコメントについてですが、
> > ./configure --enable-debug=yes --host=arm-linux-gnueabihf
> configure時のパラメータが足りないと思います。

このトラブルは configure では解決しません。ユーザランドの fbset コマンドでも仮想解像度を変えられないのですから、DirectFB の configure を調整することで仮想解像度を変更できるようになるとは思えません。

それと、タッチパネルで操作することができました。

Armadillo-840 のユーザランドに tslib をインストールする方法を記した方がいらっしゃるので、
https://users.atmark-techno.com/blog/750/737
の手順に従いました。その方は液晶パネルは想定していないとお書きなのですが、カーネルのコンフィギュレーションでシングルタッチサポートを有効にすると tslib が液晶パネルのタッチイベントを認識しました。

Device Drivers --->
  Input Device Support --->
    Touchscreens --->
      [*] Sitronix ST1232 touchscreen controllers
        [*] Enable single touch event for ST1232 <= 有効にする