[SOLVED] Qt embedded segfault

 ( martonmiklos | 2011. február 5., szombat - 18:05 )

Egy ARM alapú demópanelre generáltam Qt embeddedet is tartalmazó rootfs-t meg kernelt buildroot segítségével.
ts_calibrate lefutott, a programot indító szkript a következőket állítja be:

#!/bin/bash

APPNAME=QI2CTester
export TSLIB_TSEVENTTYPE=INPUT
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts

if [ -f $TSLIB_CALIBFILE ]
then
  echo "Touchscreen already calibrated..."
else
  echo "Calibrating Touchscreen..."
  ts_calibrate $TSLIB_CALIBFILE
fi

export QWS_MOUSE_PROTO=tslib:$TSLIB_TSDEVICE
export QWS_SIZE=800x480
export QWS_DISPLAY=LinuxFb:mmWidth=155:mmHeight=95

if [ -f /tmp/$APPNAME.lck ]
then
	echo "Lockfile exists, an another instance of the program is running."
else
	touch /tmp/$APPNAME.lck
	./$APPNAME -qws -embedded 
	rm -rf /tmp/$APPNAME.lck
fi

Ugyanez az indítóscript openembeddeddel generált angström alatt működött (az glibc alapú volt a buildrootos meg uclibc).

ldd szerint minden függősége meg van:# ldd ./untitled
libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0x4000e000)
libQtNetwork.so.4 => /usr/lib/libQtNetwork.so.4 (0x408fa000)
libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0x409c5000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40c82000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x40c9c000)
libm.so.0 => /lib/libm.so.0 (0x40d55000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40d6d000)
libc.so.0 => /lib/libc.so.0 (0x40d80000)
libts-1.0.so.0 => /usr/lib/libts-1.0.so.0 (0x40dcf000)
libdl.so.0 => /lib/libdl.so.0 (0x40dd9000)
librt.so.0 => /lib/librt.so.0 (0x40de4000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x40000000)


strace kimenet:
http://codepaste.appspot.com/show?id=442122

Bárimlyen ötletet szívesen fogadok!

Megoldás:
Ne használjunk freetype2-t ha arra nincs szükségünk, a Qt által szállítottat meg főleg nem.

Tanulság:
Embedded retkeknél leszed, lefordít, tesztel, nem pedig leszed érzésre optimális beállításokat keres, lefordít és szop a helyes munkametódus.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nos faragtam debug Qt libeket meg gdbt a targetre és:

http://pastie.org/1556125
Nézem hogy wattafakk is harfbuzz, és jött az asztal megfejelése.
Hát igen Miklóska farok volt és úgy gondolta hogy neki kell Freetype2 mégpedig abból is Qt boundled verzió.

Ezt kikapcsolva csak a tslibet kellett megkókányolni, mert a buildroot valamiért a két kernelt használ az egyiket a targetre forgatja le a másiknak a forrását pedig csak úgy felteszi a build mappába, gondolom hogy a hostra pörgetett programok ha kérnek valamit akkor kapjanak belőle.

Én egy url-ről lehúzott 2.6.32 kernelt használok a targeten, a buildroottal ezt pedig nem sikerült megbeszélni hogy a toolchainnel is ezt használja. No mindegy átírtam az #include elérési utat úgy hogy az a target headerére mutasson, így már nem anyázik a ts_calibrate, hogy

 
tslib: Selected device uses a different version of the event protocol than tslib was compiled for

Az eredmény:
http://dl.dropbox.com/u/4295670/100_9914.JPG

Öröm bódottá van.