Armadilloフォーラム

Android SurfaceFlingerのioctl error発生

wakutsu

2014年10月7日 17時51分

お世話になっております。和久津です。

いつもこちらでは適切なアドバイスを頂きとても助かっております。

現在、Armadillo 800 EVAを利用し、AndroidOSのカスタマイズを実施しているのですが、
以下のようなエラーが発生してしまい、デバッグ用の情報も少なく、上手く進めることができない状態です。

同様のエラーに対処、またはお心あたりのある方のお知恵を拝借できないでしょうか。

■エラー内容(該当部分のADBログ)

I/SurfaceFlinger(  843): GL_MAX_TEXTURE_SIZE = 2048
I/SurfaceFlinger(  843): GL_MAX_VIEWPORT_DIMS = 2048
I/SurfaceFlinger(  843): flags = 00010000
D/libEGL  (  910): loaded /system/lib/egl/libGLES_android.so
D/libEGL  (  910): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
D/libEGL  (  910): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
D/libEGL  (  910): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
E/SurfaceFlinger(  843): ioctl error
E/SurfaceFlinger(  843): ioctl error
W/zipro   (  910): Unable to open zip '/data/local/bootanimation.zip': No such file or directory
W/zipro   (  910): Unable to open zip '/system/media/bootanimation.zip': No such file or directory
E/SurfaceFlinger(  843): ioctl error
E/SurfaceFlinger(  843): ioctl error
E/SurfaceFlinger(  843): ioctl error
E/SurfaceFlinger(  843): ioctl error
I/SamplingProfilerIntegration(  830): Profiler is disabled.
I/Zygote  (  830): Preloading classes...

※上記はSurfaceFlingerの初期化前後の内容を抜粋したものですが、
 ”E/SurfaceFlinger(  843): ioctl error”のエラーが発生し上手く動いていないと考えております。

また該当エラー発生時のStraceを取得した結果も併せて添付させて頂きます
”E/SurfaceFlinger(  843): ioctl error”発生時のStraceログ

recv(44892, 0x81, 2147483647, MSG_DONTROUTE|MSG_PEEK|MSG_EOR|MSG_WAITALL|MSG_ERRQUEUE|MSG_CONFIRM|MSG_PROBE|MSG_FIN|MSG_SYN|MSG_RST|MSG_NOSIGNAL|MSG_MORE|0xffff0000) = 0
ioctl(13, 0x40044620, 0x100ffe5c)       = -1 ENOTTY (Not a typewriter)
writev(4, [{"\6", 1}, {"SurfaceFlinger\0", 15}, {"ioctl error\0", 12}], 3) = 28

以上、お手数をおかけいたしますがよろしくお願いいたします。

コメント

> ioctl(13, 0x40044620, 0x100ffe5c)       = -1 ENOTTY (Not a typewriter)

file descriptor 13番は、なんなんでしょうね?
strace のログの上の方で、openの戻り値が13のところはありませんか?

お世話になっております。和久津です。

ご連絡ありがとうございます。

> file descriptor 13番は、なんなんでしょうね?
> strace のログの上の方で、openの戻り値が13のところはありませんか?

openの戻り値が13となる箇所を取得いたしました。
"/proc/self/cmdline"が原因ということでしょうか。

■straceの該当部分

open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13
fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(13, "/system/bin/surfaceflinger\0", 1024) = 27
read(13, "", 1024)                      = 0
close(13)                               = 0
fstat64(12, {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
brk(0x10000)                            = 0x10000
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(12, "[default]\nHALCompositionBypass=0"..., 4096) = 33
read(12, "", 4096)                      = 0
close(12)                               = 0
open("powervr.ini", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13
fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(13, "/system/bin/surfaceflinger\0", 1024) = 27
read(13, "", 1024)                      = 0
close(13)                               = 0
fstat64(12, {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(12, "[default]\nHALCompositionBypass=0"..., 4096) = 33
read(12, "", 4096)                      = 0
close(12)                               = 0
open("powervr.ini", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13
fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(13, "/system/bin/surfaceflinger\0", 1024) = 27
read(13, "", 1024)                      = 0
close(13)                               = 0
fstat64(12, {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(12, "[default]\nHALCompositionBypass=0"..., 4096) = 33
read(12, "", 4096)                      = 0
close(12)                               = 0
open("powervr.ini", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13
fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(13, "/system/bin/surfaceflinger\0", 1024) = 27
read(13, "", 1024)                      = 0
close(13)                               = 0
fstat64(12, {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(12, "[default]\nHALCompositionBypass=0"..., 4096) = 33
read(12, "", 4096)                      = 0
close(12)                               = 0
open("powervr.ini", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13
fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(13, "/system/bin/surfaceflinger\0", 1024) = 27
read(13, "", 1024)                      = 0
close(13)                               = 0
fstat64(12, {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(12, "[default]\nHALCompositionBypass=0"..., 4096) = 33
read(12, "", 4096)                      = 0
close(12)                               = 0
open("powervr.ini", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13
fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(13, "/system/bin/surfaceflinger\0", 1024) = 27
read(13, "", 1024)                      = 0
close(13)                               = 0
fstat64(12, {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(12, "[default]\nHALCompositionBypass=0"..., 4096) = 33
read(12, "", 4096)                      = 0
close(12)                               = 0
open("powervr.ini", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13
fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x40008000, 4096, PROT_READ)   = 0
read(13, "/system/bin/surfaceflinger\0", 1024) = 27
read(13, "", 1024)                      = 0
close(13)                               = 0

以上、よろしくお願いいたします。

遅くなってスミマセン。
以前返信したつもりだったのですが、できてませんでした。

> > file descriptor 13番は、なんなんでしょうね?
> > strace のログの上の方で、openの戻り値が13のところはありませんか?
>
> openの戻り値が13となる箇所を取得いたしました。
> "/proc/self/cmdline"が原因ということでしょうか。
>
> ■straceの該当部分

> open("/etc/powervr.ini", O_RDONLY|O_LARGEFILE) = 12
> open("/proc/self/cmdline", O_RDONLY|O_LARGEFILE) = 13

ここを見て、cmdline が問題かもという話だとおもうのですが、

> fstat64(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> mprotect(0x40008000, 4096, PROT_READ|PROT_WRITE) = 0
> mprotect(0x40008000, 4096, PROT_READ)   = 0
> read(13, "/system/bin/surfaceflinger\0", 1024) = 27
> read(13, "", 1024)                      = 0
> close(13)                               = 0

ここで close してしまっているので、違うと思います。
ログの他の部分も

E/SurfaceFlinger(  843): ioctl error

と出している形跡がなかったので、多分違う場所じゃないでしょうか?

もともとの

ioctl(13, 0x40044620, 0x100ffe5c)       = -1 ENOTTY (Not a typewriter)

の直前で open が 13番を返しているところがあると思います。その場所を探す必要があります。