'GTK'에 해당되는 글 1건

  1. 2009.10.06 x11-gtk, qt-kong-embedded

 
Version : 1.0
- 초안

Version : 1.1
- GTK 프로그램시 한글처리 추가
- QTextEdit 버그 수정
- sqlite 가 버그 수정 


Last update : 2007.10.15

+-----------------------------------------------------------------------------------------
+ 작업 디렉토리
+-----------------------------------------------------------------------------------------
타겟의 디렉토리 : /user/app
호스트 작업 디렉토리 : /home/qt/target/WallPad
호스트에서 크로스 컴파일된 이미지 설치 디렉토리 : /user/app

 크로스 컴파일된 이미지는 호스트의 /user/app 밑에 모두 모이게 한다.
 gtk 를 컴파일 하고, 설치하는 중에 default 로 생성되는 환경 설정 파일에서
 지정되는 경로를 수정 없이 사용하기 위함이다.

타켓의 /user 는 nand flash 로 yaffs2 파일시스템이다.
/dev/mtdblock/3 on /user type yaffs2 (rw)

+-----------------------------------------------------------------------------------------
+ 환경변수 및 기타
+-----------------------------------------------------------------------------------------
export PKG_CONFIG_PATH=/user/app/lib/pkgconfig

- 실행에 필요한 library 가 무엇이 필요한지 검사
arm-linux-objdump -x $(TARGET) | grep NEEDED

- config.log 에서 유심히 보아야 할 에러들..
No such file or directory
undefined reference to

+-----------------------------------------------------------------------------------------
+
+ X11 및 GTK 포팅
+
+-----------------------------------------------------------------------------------------
 termcap-2.0.8, flex-2.5.4 를 미리 설치 하지 않아도 x는 컴파일이 된다.
 몇몇 app 들이 안 되는 것이 있는 것 같지만, 사용할 일이 없다면, x 만 컴파일 해도 된다.
 
 Gtk를 포팅 한다는 것은 필요한 lib 들의 버전 서로 맞추는 것이 일이다.
 이 후 컴파일 하는 lib 버전은 몇 번의 시행착오를 거치면서, 잘 맞는 버전들이다.
 
 shared memory 를 사용 하도록 하려면, x와 gtk 설정을 해 주어야 한다.
 x 에서는 사용하지 않는 것이 default 이고 gtk 에서는 사용하는 것이 default 이다.
 그대로 하면, gtk 프로그램들이 이유 없이 죽는 경우가 발생한다.
 
 필요한 lib 를 걸러 내는 작업을 하다가 그만 두었다.
 다른 일이 급해서.. 아마도 지금은 풀 버전에 가깝다.
 
+-----------------------------------------------------------------------------------------
+ termcap-2.0.8  http://prdownloads.sourceforge.net/ltsp/termcap-2.0.8.tar.bz2?download
+-----------------------------------------------------------------------------------------
tar zxvf termcap-2.0.8.tar.gz
cd termcap-2.0.8
 
Makefile 파일 수정
 
 CC=arm-linux-gcc
 AR=arm-linux-ar
 prefix=/user/app

#       if [ -x /sbin/ldconfig -o -x /etc/ldconfig ]; then \
#         ldconfig; \
#       fi

make
 :
 arm-linux-gcc -I. -c tparam.c
 In file included from tparam.c:34:
 /usr/local/arm/arm-linux/include/string.h:242: syntax error before '(' token
 /usr/local/arm/arm-linux/include/string.h:242: syntax error before "const"
 make: *** [tparam.o] Error 1
 :
 
툴체인의 string.h 파일에서 에러가 발생한다.
/usr/local/arm/arm-linux/include/string.h 아래 주석 처리
vi /usr/local/arm/arm-linux/include/string.h
// extern void bcopy (__const void *__src, void *__dest, size_t __n) __THROW;

make
 arm-linux-gcc -shared -o ../libtermcap.so.2.0.8 -Wl,-soname,libtermcap.so.2 termcap.o tparam.o version.o
 makeinfo termcap.texi --output=termcap.info
 termcap.texi:2615: warning: `.' or `,' must follow cross reference, not ).

make install
 
 chown bin.bin /user/app/lib/libtermcap.so.2.0.8
 chown: changing ownership of `/user/app/lib/libtermcap.so.2.0.8': Operation not permitted
 make: *** [install] Error 1


심볼링크 에러 난다. 직접 만들어 주었다.
cd /user/app/lib
ln -s libtermcap.so.2.0.8 libtermcap.so
cd -

vi /usr/local/arm/arm-linux/include/string.h
extern void bcopy (__const void *__src, void *__dest, size_t __n) __THROW;

+-----------------------------------------------------------------------------------------
+ flex-2.5.4 --shared 없음 ftp://ftp.gnu.org/non-gnu/flex/flex-2.5.4a.tar.gz
+-----------------------------------------------------------------------------------------
tar zxvf flex-2.5.4a.tar.gz
cd flex-2.5.4

CC=arm-linux-gcc STRIP=arm-linux-strip AR=arm-linux-ar RANLIB=arm-linux-ranlib \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--x-includes=/user/app/include --x-libraries=/user/app/lib

make
make install

+-----------------------------------------------------------------------------------------
+ XFree86 4.2.0  ftp://xfree86.mirror.or.kr/.3/ftp.xfree86.org/pub/XFree86/4.2.0/source/
+ patch   ftp://xfree86.mirror.or.kr/.3/ftp.xfree86.org/pub/XFree86/4.2.0/fixes/
+-----------------------------------------------------------------------------------------
tar zxvf X420src-1.tgz
cd xc
cat ../4.2.0-libGLU-bad-extern.patch | patch -p1
cat ../4.2.0-xlib-i18n-module.patch | patch -p1
cat ../4.2.0-zlib-security.patch | patch -p1
cat ../4.2.0-xlib-security.patch | patch -p1

 +-----------------------------------------------------------
 + host.def 파일을 수정한다.
 +-----------------------------------------------------------

vi config/cf/host.def
#define KDriveXServer YES
#define KdriveServerExtraDefines -DMAXSCREENS=1
#define TinyXServer YES
#define CrossCompiling YES
#define TouchScreen YES
#define XfbdevServer YES
#define ProjectRoot /user/app
#define SystemUsrLibDir /user/app/lib
#define SystemUsrIncDir /user/app/include
#define EtcX11Directory /user/app/etc
#define BuildXprint NO

 +-----------------------------------------------------------
 + 2006.12.05. "xc/config/cf/host.def" shared memory
 + shared memory 를 사용하도록 하기 위해서는 아래 define이 필요하며,
 +-----------------------------------------------------------
 
#define HasShm YES

 +-----------------------------------------------------------
 + 커널에서도 아래의 설정이 요구된다.
 +-----------------------------------------------------------

File systems  --->
[*] Virtual memory file system support (former shm fs)
[*] /dev file system support (EXPERIMENTAL)

 +-----------------------------------------------------------
 + cross.def 파일을 수정한다.
 +-----------------------------------------------------------

vi config/cf/cross.def
/* $XFree86: xc/config/cf/cross.def,v 1.2 2001/03/30 02:15:17 keithp Exp $ */
/*
 * This file contains redefinitions of some symbols to enable
 * cross compilation: e.g. paths for include files and paths to
 * compiler images.  It will have to be edited to reflect these
 * given your local configuration.
 */
#undef i386Architecture
#define Arm32Architecture

#undef OptimizedCDebugFlags
#define OptimizedCDebugFlags  -O2
#define ServerCDebugFlags -O2
#undef StandardDefines
#define StandardDefines  -Dlinux -D__arm__ -D_POSIX_SOURCE -D_BSD_SOURCE -D_GNU_SOURCE
#undef CcCmd
#define StdIncDir /usr/local/arm/arm-linux/include
#define PreIncDir
#undef PostIncDir
#define PostIncDir /usr/local/arm/lib/gcc-lib/arm-linux/3.2.3/include
#define CcCmd /usr/local/arm/bin/arm-linux-gcc
#undef CplusplusCmd
#define HasCplusplus YES
#define CplusplusCmd /usr/local/arm/bin/arm-linux-g++
#define DoRanlibCmd YES
#define RanlibCmd /usr/local/arm/bin/arm-linux-ranlib
#undef ExtraLoadFlags
#define ExtraLoadFlags
#define FbNoPixelAddrCode
/*
#undef TermcapLibrary
#define TermcapLibrary -ltermcap
*/
#undef LdPostLib
#define LdPostLib

#undef ExtensionOSDefines
#define ExtensionOSDefines
/*
#define ServerXdmcpDefines
*/
#include <cross.rules>

 +-----------------------------------------------------------
 + kdrive.cf 파일을 수정한다. ( 안 해도 상관없다. )
 + 폰트는 다 필요 없다. 이후에 하나의 폰트만 포팅 할 것이다.
 +-----------------------------------------------------------

vi config/cf/kdrive.cf
/*#define DefaultFontPath built-ins,$(FONTDIR)/misc/,$(FONTDIR)/75dpi/,$(FONTDIR)/100dpi/ */
#define DefaultFontPath built-ins

 +-----------------------------------------------------------
 + 마우스를 사용 하지 않도록 한다. 사용하면 이상이 생긴다.
 + 콘솔 먹통 되고, 터치가 올바르게 동작하지 않는다.
 +-----------------------------------------------------------
 
programs/Xserver/hw/kdrive/kinput.c

#if 0 // by B.LEE
 if (kdMouseFuncs)
     (*kdMouseFuncs->Init) ();
#endif

#if 0  // by B.LEE    
     if (kdMouseFuncs)
  (*kdMouseFuncs->Fini) ();
#endif

 +-----------------------------------------------------------
 + 컴파일 및 인스톨
 +-----------------------------------------------------------
  
make World > World.log 2>&1
make intall

 +-----------------------------------------------------------
 + 만약 폰트를 추가해 주고 싶으면
 +-----------------------------------------------------------
/user/app/lib/X11/fonts/ 밑에 추가해 주자.. 인터넷에 떠도는 폰트로 설치해 주었다. 폰트 설정은 호스트에서 작업한다.
/user/app/lib/X11/fonts/Type1/blee.ttf
cd /user/app/lib/X11/fonts/Type1/
mkfontdir
mkfontscale

 +-----------------------------------------------------------
 + 만약 호스트의 font 를 복사 할 경우, 폰트가 많아지면, gtk가
 + 실행하면서 font cache 를 하기 때문에, 뜨는데 엄청나게 오래 걸린다.
 +-----------------------------------------------------------
 cp -rv /usr/app/lib/X11/fonts /user/app/lib/X11/fonts

 +-----------------------------------------------------------
 + 폰트 캐쉬 디렉토리를 만들어 주자.. 그리고 권한을 모두 풀어 놓자..
 + 왜냐면, nfs 실행시키면 이곳에 타겟이 접근해야 하는데,
 + 권한이 없으면, 제대로 뜨질 않는다.
 +-----------------------------------------------------------
 
mkdir -p /user/app/var/cache/fontconfig
chmod chmod -R 777 /user/app/var/

 +-----------------------------------------------------------
 + 테스트
 + /user/app/lib 및 /user/app/etc 등 x에 관련된 파일들이 생성된 것을 확인한다.
 +-----------------------------------------------------------

nfs 로 마운트 후 테스트 해 본다.
호스트의 /user/app 를 타켓의 /user/app 로 nfs 마운트 해서 테스트 한다. 이는 경로가 바뀌지 않게 하기 위함이다.
테스트 후에 그대로 /user/app 로 복사를 하면 된다.

mount -t nfs 10.2.1.101:/user /mnt/nfs
ln -s /mnt/nfs/app /user/app

export FONTCONFIG_FILE=/user/app/etc/fonts/fonts.conf
export PATH=$PATH:/user/app/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/user/app/lib
export DISPLAY=:0.0

 +-----------------------------------------------------------
 + tty 가 없다면 만들어 준다.
 +-----------------------------------------------------------

mknod /dev/tty0 c 4 0
mknod /dev/tty1 c 4 1
mknod /dev/tty2 c 4 2
mknod /dev/tty3 c 4 3
mknod /dev/tty4 c 4 4
mknod /dev/tty5 c 4 5
mknod /dev/tty6 c 4 6
mknod /dev/tty7 c 4 7
mknod /dev/tty8 c 4 8

Xfbdev &

* 실행이 안된다면, xdpyinfo 로 정보를 출력해 본다.
x가 실행이 안 되는 것은 십중팔구 커널의 fb device driver 가 제대로 작성이 안된 것이다.

# xdpyinfo
name of display:    :0.0
version number:    11.0
vendor string:    Keith Packard
vendor release number:    600300
maximum request size:  4194300 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    7
supported pixmap formats:
    depth 1, bits_per_pixel 1, scanline_pad 32
    depth 4, bits_per_pixel 4, scanline_pad 32
    depth 8, bits_per_pixel 8, scanline_pad 32
    depth 12, bits_per_pixel 16, scanline_pad 32
    depth 16, bits_per_pixel 16, scanline_pad 32
    depth 24, bits_per_pixel 24, scanline_pad 32
    depth 32, bits_per_pixel 32, scanline_pad 32
keycode range:    minimum 8, maximum 135
focus:  PointerRoot
number of extensions:    13
    BIG-REQUESTS
    DEC-XTRAP
    FontCache
    MIT-SCREEN-SAVER
    MIT-SHM
    MIT-SUNDRY-NONSTANDARD
    RANDR
    RENDER
    SHAPE
    SYNC
    TOG-CUP
    XC-MISC
    XTEST
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    800x480 pixels (271x163 millimeters)
  resolution:    75x75 dots per inch
  depths (7):    1, 4, 8, 12, 16, 24, 32
  root window id:    0x33
  depth of root window:    12 planes
  number of colormaps:    minimum 1, maximum 1
  default colormap:    0x20
  default number of colormap cells:    16
  preallocated pixels:    black 0, white 4095
  options:    backing-store NO, save-unders NO
  largest cursor:    800x480
  current input event mask:    0x0
  number of visuals:    1
  default visual id:  0x21
  visual:
    visual id:    0x21
    class:    TrueColor
    depth:    12 planes
    available colormap entries:    16 per subfield
    red, green, blue masks:    0xf00, 0xf0, 0xf
    significant bits in color specification:    8 bits
   
+-----------------------------------------------------------------------------------------
+ xc/programs/Xserver 연관된 디렉토리
+-----------------------------------------------------------------------------------------
dix
fb
mi
miext/shadow
miext/layer
os
randr
render
Xext
XTrap
hw/kdrive
hw/kdrive/linux
hw/kdrive/fbdev
 
+-----------------------------------------------------------------------------------------
+ tslib-0.1.1  http://tslib.berlios.de/
+-----------------------------------------------------------------------------------------
타겟은 터치스크린을 사용하며, X11 에서 터치 기능 향상을 위해서 ts lib 를 사용 하도록 포팅 할 것이다.
x에 구현되어 있는 터치는 잘 맞지 않는다.
ts lib 를 포팅 하면, 터치가 티는 것을 보정하며, 잘 맞는 것을 볼 수 있다.

tar zxvf tslib-0.1.1.tar.gz
cd tslib-0.1.1

./configure --prefix=/user/app --host=arm-linux --build=i386-linux

rpl_malloc 가 정의 되지 않도록 config.h 를 수정한다.
vi config.h
//#define malloc rpl_malloc

make
make install

 +-----------------------------------------------------------
 + ts.conf 수정한다. 드라이버를 지정해 주어야 한다.
 +-----------------------------------------------------------

vi /user/app/etc/ts.conf
# Uncomment if you're using an HP iPaq h3600 or similar
module_raw h3600
# Uncomment if you're using a Hitachi Webpad
#module_raw mk712

 +-----------------------------------------------------------
 + 환경변수
 +-----------------------------------------------------------

export TSLIB_TSDEVICE=/dev/digi
export TSLIB_CONFFILE=/user/app/etc/ts.conf
export TSLIB_PLUGINDIR=/user/app/lib/ts
export TSLIB_CALIBFILE=/user/app/etc/pointercal

 +-----------------------------------------------------------
 + 테스트
 +-----------------------------------------------------------
nfs 로 호스트의 /user/app 를 타겟의 /user/app 로 마운트 한다.

/user/app/bin/ts_calibrate 를 실행해서 포인터를 찍고,
/user/app/etc/pointercal 파일을 만든다.(  nfs 에서 접근 할 수 있도록 권한을 풀자 )
/user/app/bin/ts_test 로 확인 할 수 있다.

 +-----------------------------------------------------------
 + x에서 ts lib 를 링크 하도록 한다. 이후에 x11 코드를 수정하여,
 + ts lib 를 사용할 것이다.
 +-----------------------------------------------------------

vi config/cf/cross.def 파일을 수정한다.
#undef LdPostLib
#define LdPostLib -L/user/app/lib -lts
  
programs/Xserver/hw/kdrive/kdrive.h(201)
  
typedef struct _KdMouseInfo {
    struct _KdMouseInfo *next;
    void  *driver;
    void  *closure;
    char  *name;
    char  *prot;
    char  map[KD_MAX_BUTTON];
    int   nbutton;
    Bool  emulateMiddleButton;
    unsigned long emulationTimeout;
    Bool  timeoutPending;
    KdMouseState mouseState;
    Bool  eventHeld;
    xEvent  heldEvent;
    unsigned char buttonState;
    int   emulationDx, emulationDy;
 int inputType; // by B.LEE
} KdMouseInfo;

programs/Xserver/hw/kdrive/linux/ts.c

/*
 * $XFree86: xc/programs/Xserver/hw/tinyx/linux/tslib.c,v 1.1tsi Exp $
 * TSLIB based touchscreen driver for TinyX
 * Derived from ts.c by Keith Packard
 * Derived from ps2.c by Jim Gettys
 *
 * Copyright ?1999 Keith Packard
 * Copyright ?2000 Compaq Computer Corporation
 * Copyright ?2002 MontaVista Software Inc.
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Keith Packard or Compaq not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Keith Packard and Compaq makes no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * KEITH PACKARD AND COMPAQ DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
 * IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Michael Taht or MontaVista not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Michael Taht and Montavista make no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * MICHAEL TAHT AND MONTAVISTA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
 * IN NO EVENT SHALL EITHER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */


#define NEED_EVENTS
#include "X.h"
#include "Xproto.h"
#include "inputstr.h"
#include "scrnintstr.h"
#include "kdrive.h"
#include "Xpoll.h"
#include <sys/ioctl.h>
#include <tslib.h>

static long lastx = 0, lasty = 0;
static struct tsdev *tsDev = NULL;
int TsScreen;
extern int TsFbdev;

void
TsRead (int tsPort, void *closure)
{
    KdMouseInfo     *mi = closure;
    int      fd = (int) mi->driver;
    struct ts_sample event;
    int      n;
    long     pressure;
    long     x, y;
    unsigned long   flags;
    unsigned long   buttons;

#if 0
    n = ts_read(tsDev, &event, 1);
    if (n == 1) 
    {
 if (event.pressure)
 {
     /*
      * HACK ATTACK.  (static global variables used !)
      * Here we test for the touch screen driver actually being on the
      * touch screen, if it is we send absolute coordinates. If not,
      * then we send delta's so that we can track the entire vga screen.
      */
     if (TsScreen == TsFbdev) {
      flags = KD_BUTTON_1;
      x = event.x;
      y = event.y;
     } else {
      flags = /* KD_BUTTON_1 |*/ KD_MOUSE_DELTA;
      if ((lastx == 0) || (lasty == 0)) {
          x = 0;
          y = 0;
      } else {
          x = event.x - lastx;
          y = event.y - lasty;
      }
      lastx = event.x;
      lasty = event.y;
     }
 } else {
     flags = KD_MOUSE_DELTA;
     x = 0;
     y = 0;
     lastx = 0;
     lasty = 0;
 }
// fprintf(stderr, "B.LEE \t %d %s , (%d,%d)\n", n, (flags==KD_BUTTON_1) ? "KD_BUTTON_1" : "KD_MOUSE_DELTA", x, y);
 KdEnqueueMouseEvent (mi, flags, x, y);
    }
#endif

 n = 1;

 while(n)
 {
//  fprintf(stderr, "B.LEE \t ts_read start\n");
 n = ts_read(tsDev, &event, 1);
    if (n == 1) 
    {
 if (event.pressure)
 {
     /*
      * HACK ATTACK.  (static global variables used !)
      * Here we test for the touch screen driver actually being on the
      * touch screen, if it is we send absolute coordinates. If not,
      * then we send delta's so that we can track the entire vga screen.
      */
     if (TsScreen == TsFbdev) {
      flags = KD_BUTTON_1;
      x = event.x;
      y = event.y;
     } else {
      flags = /* KD_BUTTON_1 |*/ KD_MOUSE_DELTA;
      if ((lastx == 0) || (lasty == 0)) {
          x = 0;
          y = 0;
      } else {
          x = event.x - lastx;
          y = event.y - lasty;
      }
      lastx = event.x;
      lasty = event.y;
     }
 } else {
     flags = KD_MOUSE_DELTA;
     x = 0;
     y = 0;
     lastx = 0;
     lasty = 0;
 }
 fprintf(stderr, " %s , (%d,%d)\n", (flags==KD_BUTTON_1) ? "KD_BUTTON_1" : "KD_MOUSE_DELTA", x, y);
 KdEnqueueMouseEvent (mi, flags, x, y);
    }
 }

// fprintf(stderr, "B.LEE \t finish \n");

}

static char *TsNames[] = {
   "/dev/digi"
};

#define NUM_TS_NAMES (sizeof (TsNames) / sizeof (TsNames[0]))

int TsInputType;

int
TsInit (void)
{
    int  i;
    KdMouseInfo *mi, *next;
    int  fd= 0;
    int  n = 0;

   if (!TsInputType)
 TsInputType = KdAllocInputType ();
    
    for (mi = kdMouseInfo; mi; mi = next)
    {
 next = mi->next;
// if (mi->inputType)
//     continue;

 if (!mi->name)
 {
     for (i = 0; i < NUM_TS_NAMES; i++)   
     {
if( tsDev == NULL )
{
  if(!(tsDev = ts_open(TsNames[i],0)))
  {
   fprintf(stderr,"B.LEE TsInit open error.\n");
   continue;
  }
     ts_config(tsDev);
}

     fd=ts_fd(tsDev);

  if (fd >= 0)
  {
      mi->name = KdSaveString (TsNames[i]);
      break;
  }
     }
 }

 if (fd > 0 && tsDev != 0)
   {
     mi->driver = (void *) fd;
     mi->inputType = TsInputType;
      if (KdRegisterFd (TsInputType, fd, TsRead, (void *) mi))
      n++;
   }
 else
 {
   if (fd > 0) close(fd);
 }
 }
}

void
TsFini (void)
{
    KdMouseInfo *mi;
 

//    KdUnregisterFds (TsInputType, TRUE);
    KdUnregisterFds (TsInputType, 0);
    for (mi = kdMouseInfo; mi; mi = mi->next)
    {
 if (mi->inputType == TsInputType)
 {
     if(mi->driver)
  { ;
  // ts_close(tsDev);
  // tsDev = NULL
     }
     mi->driver = 0;
     mi->inputType = 0;
     if (mi->name != NULL)
  {
  free(mi->name);
  mi->name = NULL;
     }
 }
   }
}

KdMouseFuncs TsFuncs = {
    TsInit,
    TsFini
};

make World > World.log 2>&1
make intall


테스트, nfs 로 마운트 후 테스트 해 본다.
호스트의 /user/app 를 타켓의 /user/app 로 nfs 마운트 해서 테스트 한다.
이는 경로가 바뀌지 않게 하기 위함이다.
테스트 후에 그대로 /user/app 로 복사를 하면 된다.

export TSLIB_TSDEVICE=/dev/digi
export TSLIB_CONFFILE=/user/app/etc/ts.conf
export TSLIB_PLUGINDIR=/user/app/lib/ts
export TSLIB_CALIBFILE=/user/app/etc/pointercal
export FONTCONFIG_FILE=/user/app/etc/fonts/fonts.conf
export PATH=$PATH:/user/app/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/user/app/lib
export DISPLAY=:0.0

mknod /dev/tty0 c 4 0
mknod /dev/tty1 c 4 1
mknod /dev/tty2 c 4 2
mknod /dev/tty3 c 4 3
mknod /dev/tty4 c 4 4
mknod /dev/tty5 c 4 5
mknod /dev/tty6 c 4 6
mknod /dev/tty7 c 4 7
mknod /dev/tty8 c 4 8

Xfbdev

* ts_calibrate로 /user/app/etc/pointercal 파일이 생성되어 있어야 한다.

 +-----------------------------------------------
 + x 백그라운드 색 바꾸기
 +-----------------------------------------------
programs/Xserver/dix/window.c
//! by B.LEE 백그라운드 색..
//!static unsigned char _back_lsb[4] = {0x88, 0x22, 0x44, 0x11};
//!static unsigned char _back_msb[4] = {0x11, 0x44, 0x22, 0x88};
static unsigned char _back_lsb[4] = {0xff, 0xff, 0xff, 0xff};
static unsigned char _back_msb[4] = {0xff, 0xff, 0xff, 0xff};

 +-----------------------------------------------
 + x 마우스 커서를 없애기
 +-----------------------------------------------
programs/Xserver/dix/cursor.c

/***********************************************************
 * CreateRootCursor
 *
 * look up the name of a font
 * open the font
 * add the font to the resource table
 * make a cursor from the glyphs
 * add the cursor to the resource table
 *************************************************************/

CursorPtr
CreateRootCursor(pfilename, glyph)
    char *  pfilename;
    unsigned int glyph;
{
    CursorPtr  curs;
    FontPtr  cursorfont;
    int err;
    XID  fontID;

//! return NullCursor;

#if 0 //! by b.lee
   fontID = FakeClientID(0);
    err = OpenFont(serverClient, fontID, FontLoadAll | FontOpenSync,
 (unsigned)strlen( pfilename), pfilename);
    if (err != Success)
 return NullCursor;

    cursorfont = (FontPtr)LookupIDByType(fontID, RT_FONT);
    if (!cursorfont)
 return NullCursor;
//!    if (AllocGlyphCursor(fontID, glyph, fontID, glyph + 1,
//!    if (AllocGlyphCursor(fontID, glyph, fontID, glyph,
    if (AllocGlyphCursor(fontID, 40, fontID, 41,
  0, 0, 0, ~0, ~0, ~0, &curs, serverClient) != Success)
 return NullCursor;

    if (!AddResource(FakeClientID(0), RT_CURSOR, (pointer)curs))
 return NullCursor;
#else
//! 스크린 세이버 루틴에서.. 참조..
    int j;
    int result;
    XID attributes[3];
    Mask mask;
    WindowPtr pWin;  
    CursorMetricRec cm;
    unsigned char *srcbits, *mskbits;
    CursorPtr cursor;
    XID cursorID = 0;
    int attri;
   /*
     * create a blank cursor
     */

    cm.width=16;
    cm.height=16;
    cm.xhot=8;
    cm.yhot=8;
    srcbits = (unsigned char *)xalloc( BitmapBytePad(32)*16);
    mskbits = (unsigned char *)xalloc( BitmapBytePad(32)*16);
    if (!srcbits || !mskbits)
    {
 xfree(srcbits);
 xfree(mskbits);
 cursor = 0;
    }
    else
    {
 for (j=0; j<BitmapBytePad(32)*16; j++)
     srcbits[j] = mskbits[j] = 0x0;
 cursor = AllocCursor(srcbits, mskbits, &cm, 0, 0, 0, 0, 0, 0);
 if (cursor)
 {
     cursorID = FakeClientID(0);
     if (AddResource (cursorID, RT_CURSOR, (pointer) cursor))
     {
  attributes[attri] = cursorID;
  mask |= CWCursor;


  curs = cursor; //!
     }
     else
  cursor = 0;
 }
 else
 {
     xfree (srcbits);
     xfree (mskbits);
 }
    }
#endif

    return curs;
}

* 다음부터는 줄줄이.. gtk 를 설치해 주기 위함이다.
+-----------------------------------------------------------------------------------------
+ xproto-7.0.7  http://packages.debian.org/unstable/source/libx11
+     http://xlibs.freedesktop.org/release/
+-----------------------------------------------------------------------------------------
tar zxvf x11proto-core_7.0.7.orig.tar.gz
cd xproto-7.0.7
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ x11proto-xext-7.0.2
+-----------------------------------------------------------------------------------------
tar zxvf x11proto-xext_7.0.2.orig.tar.gz
cd x11proto-xext-7.0.2
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ xtrans-1.0.1
+-----------------------------------------------------------------------------------------
tar zxvf xtrans_1.0.1.orig.tar.gz
cd xtrans-1.0.1
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ x11proto-xcmisc-1.1.2
+-----------------------------------------------------------------------------------------
tar zxvf x11proto-xcmisc_1.1.2.orig.tar.gz
cd x11proto-xcmisc-1.1.2
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ x11proto-bigreqs-1.0.2
+-----------------------------------------------------------------------------------------
tar zxvf x11proto-bigreqs_1.0.2.orig.tar.gz
cd x11proto-bigreqs-1.0.2
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ kbproto-1.0.3
+-----------------------------------------------------------------------------------------
tar zxvf x11proto-kb_1.0.3.orig.tar.gz
cd kbproto-1.0.3
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ x11proto-input-1.3.2
+-----------------------------------------------------------------------------------------
tar zxvf x11proto-input_1.3.2.orig.tar.gz
cd x11proto-input-1.3.2
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ x11proto-xf86bigfont-1.1.2
+-----------------------------------------------------------------------------------------
tar zxvf x11proto-xf86bigfont_1.1.2.orig.tar.gz
cd x11proto-xf86bigfont-1.1.2
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ libiconv-1.11  http://www.gnu.org/software/libiconv/
+-----------------------------------------------------------------------------------------
tar zxvf libiconv-1.11.tar.gz
cd libiconv-1.11
#CFLAGS=-I/user/app/include \
LDFLAGS=-L/user/app/lib \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ glib-2.12.0  http://www.gtk.org/download/
+-----------------------------------------------------------------------------------------

tar jxvf glib-2.12.0.tar.bz2
cd glib-2.12.0

rm win32.cache
[참조] glib-2.12.0/docs/reference/glib/html/glib-cross-compiling.html

 +-----------------------------------------------------------
 + win32.cache는 configure 에서 사용하는데..
 + 이전에 사용된 것이 있다면, 지우고 다시 만들어 준다. 이 파일이 있으면, configure 를 변경해도
 + 적용이 안 되는 경우가 있다.
 +-----------------------------------------------------------
vi win32.cache 
glib_cv_stack_grows=no
glib_cv_uscore=no
ac_cv_func_posix_getpwuid_r=no


CFLAGS=-I/user/app/include \
LDFLAGS=-L/user/app/lib \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--cache-file=win32.cache --with-libiconv=gnu

 +-----------------------------------------------------------
 + 내가 가진 툴체인은 상수가 정의되어 있지 않는 것들이 몇 개 있다.
 + 이러한 것은 에러가 나면, 추가해 주자.
 + 미리 추가 할 필요는 없다.. 에러가 나면 그곳을 찾아서 해 주면 된다.
 +-----------------------------------------------------------

vi glib-2.12.0/glib/giounix.c

#ifndef SSIZE_MAX  // by B.LEE
# define SSIZE_MAX      INT_MAX
#endif

make
make install
+-----------------------------------------------------------------------------------------
+ atk-1.9.1  http://www.gtk.org/
+-----------------------------------------------------------------------------------------
tar jxvf atk-1.9.1.tar.bz2
cd atk-1.9.1
./configure --prefix=/user/app --host=arm-linux --build=i386-linux

make
make install

+-----------------------------------------------------------------------------------------
+ zlib-1.2.3
+-----------------------------------------------------------------------------------------
tar jxvf zlib-1.2.3.tar.bz2
cd zlib-1.2.3

CC=arm-linux-gcc CXX=arm-linux-g++ AR=arm-linux-ar RANLIB=arm-linux-ranlib STRIP=arm-linux-strip \
./configure  --prefix=/user/app --shared
make
make install

cp zlib.h zconf.h /user/app/include
cp: cannot create regular file `/user/app/include/zlib.h': Permission denied
cp: cannot create regular file `/user/app/include/zconf.h': Permission denied

cd /user/app/include
mv zlib.h zlib.bak.h
mv zconf.h zconf.bak.h

make install

+-----------------------------------------------------------------------------------------
+ freetype-2.2.1  http://www.freetype.org
+-----------------------------------------------------------------------------------------
tar zxvf freetype-2.2.1.tar.gz
cd freetype-2.2.1

./configure --prefix=/user/app --host=arm-linux --build=i386-linux --target=arm-linux

apinames 은 호스트에서 사용하는 것인데, 크로스 컴파일 되므로 에러가 발생된다. 미리 컴파일 해주고 진행한다.

cd src/tools/
gcc apinames.c -o apinames
mv apinames ../../objs/
cd -

make
make install

+-----------------------------------------------------------------------------------------
+ libxml2-2.6.23 http://xmlsoft.org/
+-----------------------------------------------------------------------------------------

tar zxvf libxml2-2.6.23.tar.gz
cd libxml2-2.6.23

LDFLAGS=-L/user/app/lib \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-zlib=/user/app --with-iconv=/user/app

 +-----------------------------------------------------------
 + 내가 가진 툴체인은 상수가 정의되어 있지 않는 것들이 몇 개 있다. 이러한 것은 에러가 나면, 추가해 주자.
 + 미리 추가 할 필요는 없다.. 에러가 나면 그곳을 찾아서 해 주면 된다.
 +-----------------------------------------------------------

#ifndef PATH_MAX // by B.LEE
#define PATH_MAX        4096
#endif

make
make install

+-----------------------------------------------------------------------------------------
+ fontconfig-2.4.1  http://www.fontconfig.org
+-----------------------------------------------------------------------------------------

tar zxvf fontconfig-2.4.1.tar.gz
cd fontconfig-2.4.1

./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--enable-libxml2 --with-arch=arm --with-freetype-config=/user/app/bin/freetype-config \
--with-default-fonts=/user/app/lib/X11/fonts \
--with-cache-dir=/user/app/var/cache/fontconfig \
--with-confdir=/user/app/etc/fonts

make
make install

+-----------------------------------------------------------------------------------------
+ libpng-1.2.12  http://www.libpng.org/
+-----------------------------------------------------------------------------------------

tar zxvf libpng-1.2.12.tar.gz
cd libpng-1.2.12
CFLAGS=-I/user/app/include \
LDFLAGS=-L/user/app/lib \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-pkgconfigdir=/user/app/lib/pkgconfig

:
checking for GNU libc compatible malloc... no
:

 +-----------------------------------------------------------
 + vi config.h
 +-----------------------------------------------------------
/* Define to rpl_malloc if the replacement function should be used. */
//#define malloc rpl_malloc

make
make install

+-----------------------------------------------------------------------------------------
+ render-0.8 http://xlibs.freedesktop.org/release/
+-----------------------------------------------------------------------------------------

tar zxvf render-0.8.tar.gz
cd render-0.8
./configure --prefix=/user/app

make
make install

+-----------------------------------------------------------------------------------------
+ libXrender-0.8.4 http://xlibs.freedesktop.org/release/
+-----------------------------------------------------------------------------------------

tar zxvf libXrender-0.8.4.tar.gz
cd libXrender-0.8.4

./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib

make
make install

+-----------------------------------------------------------------------------------------
+ libXft-2.1.10  http://xlibs.freedesktop.org/release/
+-----------------------------------------------------------------------------------------

tar jxvf libXft-2.1.10.tar.bz2
cd libXft-2.1.10
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib

make
make install

+-----------------------------------------------------------------------------------------
+ jpeg-6b  http://www.ijg.org/
+-----------------------------------------------------------------------------------------
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b

CC=arm-linux-gcc AR=arm-linux-ar RANLIB=/usr/bin/ranlib STRIP=arm-linux-strip \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib --enable-shared

make
make install

+-----------------------------------------------------------------------------------------
+ tiff-3.7.4  http://www.libtiff.org/
+-----------------------------------------------------------------------------------------

tar zxvf tiff-3.7.4.tar.gz
cd tiff-3.7.4
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-zlib-include-dir=/user/app/include \
--with-zlib-lib-dir=/user/app/lib \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib \
--with-docdir=/user/app/share/doc/tiff-3.7.4


Libtiff is now configured for arm-unknown-linux-gnu

  Installation directory:             /user/app
  Documentation directory:            /user/app/share/doc/tiff-3.7.4
  C compiler:                         arm-linux-gcc -I/user/app/include -Wall
  C++ compiler:                       arm-linux-g++ -g -O2
  Enable runtime linker paths:        no

 Support for internal codecs:
  CCITT Group 3 & 4 algorithms:       yes
  Macintosh PackBits algorithm:       yes
  LZW algorithm:                      yes
  ThunderScan 4-bit RLE algorithm:    yes
  NeXT 2-bit RLE algorithm:           yes
  LogLuv high dynamic range encoding: yes

 Support for external codecs:
  ZLIB support:                       yes
  Pixar log-format algorithm:         yes
  JPEG support:                       yes
  Old JPEG support:                   no

  C++ support:                        yes

  OpenGL support:                     no
 
  make
  make install
+-----------------------------------------------------------------------------------------
+ cairo-1.2.4  http://cairographics.org
+-----------------------------------------------------------------------------------------

tar zxvf cairo-1.2.4.tar.gz
cd cairo-1.2.4

configure( 28019)
  LIBS="$LIBS $ft_LIBS" =>
   LIBS="$LIBS $ft_LIBS -lxml2 -lz -liconv"


./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib

make
make install

+-----------------------------------------------------------------------------------------
+ pango-1.14.4 http://www.gtk.org/download/
+-----------------------------------------------------------------------------------------
tar zxvf pango-1.14.4.tar.gz
cd pango-1.14.4

configure 수정
LIBS="-lcairo  $LIBS"
LIBS="-lcairo  $LIBS -lz -lfreetype -lfontconfig -lpng12 -lXrender -lX11 -lxml2 -liconv"


CFLAGS="-I/user/app/include" \
LDFLAGS="-L/user/app/lib" \
FREETYPE_CONFIG=/usr/bin/freetype-config \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib

configuration:
        backends: FreeType X Xft Cairo

* backends: FreeType X Xft Cairo 가 모두 출력 되는지 확인한다....

make
make install
+-----------------------------------------------------------------------------------------
+ xextensions-1.0.1  http://xlibs.freedesktop.org/release/
+-----------------------------------------------------------------------------------------
tar zxvf xextensions-1.0.1.tar.gz
cd xextensions-1.0.1
./configure --prefix=/user/app --host=arm-linux --build=i386-linux
make
make install
+-----------------------------------------------------------------------------------------
+ fixesext-2.0.1
+-----------------------------------------------------------------------------------------
tar zxvf fixesext-2.0.1.tar.gz
cd fixesext-2.0.1
./configure --prefix=/user/app --host=arm-linux --build=i386-linux
make
make install

+-----------------------------------------------------------------------------------------
+ libXfixes-2.0.1
+-----------------------------------------------------------------------------------------
tar zxvf libXfixes-2.0.1.tar.gz
cd libXfixes-2.0.1
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib

+-----------------------------------------------------------------------------------------
+ libXcursor-1.1.2
+-----------------------------------------------------------------------------------------
tar zxvf libXcursor-1.1.2.tar.gz
cd libXcursor-1.1.2
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--with-x --x-includes=/user/app/include --x-libraries=/user/app/lib

+-----------------------------------------------------------------------------------------
+ gtk+-2.10.0 http://www.gtk.org/download/
+-----------------------------------------------------------------------------------------
tar zxvf gtk+-2.10.0.tar.gz
cd gtk+-2.10.0

vi configure ( 30735 )
  PANGO_LIBS=`$PKG_CONFIG --libs $PANGO_PACKAGES` =>
  PANGO_LIBS="`$PKG_CONFIG --libs $PANGO_PACKAGES` -lpangoft2-1.0 -lfontconfig -lfreetype -lz -lpng12 -lXrender -lX11 -lxml2 -liconv"


 +-----------------------------------------------------------
 + no shared memory
 +-----------------------------------------------------------
 
CFLAGS=-I/user/app/include \
LDFLAGS=-L/user/app/lib \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--disable-glibtest --with-gdktarget=x11 --with-x \
--x-includes=/user/app/include --x-libraries=/user/app/lib \
--enable-shm=no

 +-----------------------------------------------------------
 + shared memory
 +-----------------------------------------------------------
 
CFLAGS=-I/user/app/include \
LDFLAGS=-L/user/app/lib \
./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--disable-glibtest --with-gdktarget=x11 --with-x \
--x-includes=/user/app/include --x-libraries=/user/app/lib
      
module/Makefile 수정
#PRINTBACKENDS_SUBDIR = printbackends
PRINTBACKENDS_SUBDIR =

gtk/Makefile 수정
#          ./gtk-update-icon-cache --force --ignore-theme-index                 \
#          --source builtin_icons stock-icons > gtkbuiltincache.h

* 이를 수정하지 않으면.. gtkbuiltincache.h 사이즈가 0 이 된다.

make
make install

테스트

cd /user/app/etc
mkdir gtk-2.0
chmod 777 gtk-2.0
chmod 777 /user/app/var/cache/fontconfig/
타겟에서
/user/app/bin/gdk-pixbuf-query-loaders > /user/app/etc/gtk-2.0/gdk-pixbuf.loaders
/user/app/bin/pango-querymodules > /user/app/etc/pango/pango.modules
 +---------------------------------------------------------------------------+
  * /user/app/etc/pango/pangorc 만들어 줌

  [Pango]
  ModuleFiles = /user/app/etc/pango/pango.modules
  ModulesPath = /user/app/lib/pango/1.5.0/modules
 +---------------------------------------------------------------------------+

export TSLIB_TSDEVICE=/dev/digi
export TSLIB_CONFFILE=/user/app/etc/ts.conf
export TSLIB_PLUGINDIR=/user/app/lib/ts
export TSLIB_CALIBFILE=/user/app/etc/pointercal
export FONTCONFIG_FILE=/user/app/etc/fonts/fonts.conf
export PATH=$PATH:/user/app/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/user/app/lib
export DISPLAY=:0.0

mknod /dev/tty0 c 4 0
mknod /dev/tty1 c 4 1
mknod /dev/tty2 c 4 2
mknod /dev/tty3 c 4 3
mknod /dev/tty4 c 4 4
mknod /dev/tty5 c 4 5
mknod /dev/tty6 c 4 6
mknod /dev/tty7 c 4 7
mknod /dev/tty8 c 4 8

Xfbdev&
gtk-demo

+-----------------------------------------------------------------------------------------
+ 에러 해결 방법
+-----------------------------------------------------------------------------------------

(gtk-demo:424): Gdk-WARNING **: Error converting from UTF-8 to STRING: Could not open converter from 'UTF-8' to 'ISO-8859-1'
(gtk-demo:424): Gdk-WARNING **: Error converting from UTF-8 to STRING: Conversion from character set 'UTF-8' to 'ISO-8859-1' is not supported

 +---------------------------------------------------------------------------+
  glib-2.12.0 의 glib\gconvert.c , open_converter 에서 나는 에러로 예상
  glib-2.12.0/INSTALL 내용중
 
  In order to implement conversions between character sets,
  GLib requires an implementation of the standard iconv() routine.
  Most modern systems will have a suitable implementation, however
  many older systems lack an iconv() implementation. On such systems,
  you must install the libiconv library. This can be found at:
  
   http://www.gnu.org/software/libiconv/
  
 * libiconv-1.11 설치로 해결 
 +---------------------------------------------------------------------------+

(gtk-demo:424): GdkPixbuf-WARNING **: Cannot open pixbuf loader module file '/user/app/etc/gtk-2.0/gdk-pixbuf.loaders': No such file or directory

 +---------------------------------------------------------------------------+
 * /user/app/etc/gtk-2.0/gdk-pixbuf.loaders 를 생성시켰다.
 그리고, png 부분만 빼고 삭제.. 왜냐면 죽는다.
 
 > host
mkdir gtk-2.0
chmod 777 gtk-2.0
 
 > target
  #/user/app/bin/gdk-pixbuf-query-loaders > /user/app/etc/gtk-2.0/gdk-pixbuf.loaders
 +---------------------------------------------------------------------------+

(gtk-demo:424): Pango-WARNING **: No builtin or dynamically
loaded modules were found. Pango will not work correctly.
This probably means there was an error in the creation of:
  '/user/app/etc/pango/pango.modules'
You should create this file by running pango-querymodules.
 +---------------------------------------------------------------------------+
  [root@localhost pango-1.14.4]# find / -name pango-querymodules
  /usr/bin/pango-querymodules
  /home/qt/target/X/pango-1.14.4/pango/.libs/pango-querymodules
  /home/qt/target/X/pango-1.14.4/pango/pango-querymodules
  /home/qt/target/user/bin/pango-querymodules
  /home/qt/target/N/pango-1.14.4/pango/.libs/pango-querymodules
  /home/qt/target/N/pango-1.14.4/pango/pango-querymodules
  /user/bin/pango-querymodules
  /user/app/bin/pango-querymodules

  
  * /user/app/etc/pango/pango.modules 를 생성해 주었다.

  /user/app/bin/pango-querymodules > /user/app/etc/pango/pango.modules
  
 +---------------------------------------------------------------------------+


(gtk-demo:422): Pango-WARNING **: error opening config file '/user/app/etc/pango/pangorc': Success

 +---------------------------------------------------------------------------+
  * /user/app/etc/pango/pangorc 만들어 줌
 +---------------------------------------------------------------------------+

  [Pango]
  ModuleFiles = /user/app/etc/pango/pango.modules
  ModulesPath = /user/app/lib/pango/1.5.0/modules

 +---------------------------------------------------------------------------+
  * 폰트 디렉토리가 없을 때 발생한다.
 +---------------------------------------------------------------------------+
Could not init font path element /user/app/lib/X11/fonts/misc/, removing from list!
Could not init font path element /user/app/lib/X11/fonts/75dpi/, removing from list!
Could not init font path element /user/app/lib/X11/fonts/100dpi/, removing from list!


 +---------------------------------------------------------------------------+
  * 아이콘이 안 보일 때
 +---------------------------------------------------------------------------+
 gtk를 컴파일 할 때, Makefile 를 수정하지 않아서, gtkbuiltincache.h 가 사이즈가 0 인 경우..
 
+-----------------------------------------------------------------------------------------
+ 줄인 파일 목록
+-----------------------------------------------------------------------------------------
# du
680     ./lib/X11/fonts/Type1
684     ./lib/X11/fonts
688     ./lib/X11
240     ./lib/pango/1.5.0/modules
244     ./lib/pango/1.5.0
248     ./lib/pango
276     ./lib/gtk-2.0/2.10.0/loaders
280     ./lib/gtk-2.0/2.10.0
284     ./lib/gtk-2.0
40      ./lib/ts
13096   ./lib
6868    ./bin
116     ./etc/fonts/conf.avail
4       ./etc/fonts/conf.d
140     ./etc/fonts
24      ./etc/pango
8       ./etc/gtk-2.0
184     ./etc
12      ./var/cache/fontconfig
16      ./var/cache
20      ./var
20172   .

# ls -Rl
.:
total 16
drwxrwxr-x    2 qt       qt           4096 Jun 20 15:15 bin
drwxrwxr-x    5 qt       qt           4096 Jun 20 14:13 etc
drwxrwxr-x    6 qt       qt           4096 Jun 20 15:14 lib
drwxrwxr-x    3 qt       qt           4096 Jun 20 10:01 var

./bin:
total 6864
-rwxr-xr-x    1 qt       qt        6261012 Jun 20 15:15 netfront
-rwxr-xr-x    1 qt       qt          18312 Jun 20 15:15 ts_calibrate
-rwxr-xr-x    1 qt       qt          16472 Jun 20 15:15 ts_test
-rwxr-xr-x    1 qt       qt         704852 Jun 20 15:15 Xfbdev

./etc:
total 20
drwxrwxr-x    4 qt       qt           4096 Jun 20 10:01 fonts
drwxrwxr-x    2 qt       qt           4096 Jun 20 12:49 gtk-2.0
drwxrwxr-x    2 qt       qt           4096 Jun 20 12:51 pango
-rwxrwxr-x    1 qt       qt             43 Jun  8 10:20 pointercal
-rw-r--r--    1 qt       qt            644 Jun  8 08:03 ts.conf

./etc/fonts:
total 24
drwxrwxr-x    2 qt       qt           4096 Jun 20 10:01 conf.avail
drwxrwxr-x    2 qt       qt           4096 Jun 20 10:01 conf.d
-rw-r--r--    1 qt       qt           5217 Jun 20 10:01 fonts.conf
-rw-r--r--    1 qt       qt           6907 Jun 20 10:01 fonts.dtd

./etc/fonts/conf.avail:
total 112
-rw-r--r--    1 qt       qt            250 Jun 20 10:01 10-autohint.conf
-rw-r--r--    1 qt       qt            257 Jun 20 10:01 10-no-sub-pixel.conf
-rw-r--r--    1 qt       qt            256 Jun 20 10:01 10-sub-pixel-bgr.conf
-rw-r--r--    1 qt       qt            256 Jun 20 10:01 10-sub-pixel-rgb.conf
-rw-r--r--    1 qt       qt            257 Jun 20 10:01 10-sub-pixel-vbgr.conf
-rw-r--r--    1 qt       qt            257 Jun 20 10:01 10-sub-pixel-vrgb.conf
-rw-r--r--    1 qt       qt            247 Jun 20 10:01 10-unhinted.conf
-rw-r--r--    1 qt       qt            943 Jun 20 10:01 20-fix-globaladvance.conf
-rw-r--r--    1 qt       qt            301 Jun 20 10:01 20-lohit-gujarati.conf
-rw-r--r--    1 qt       qt           1188 Jun 20 10:01 20-unhint-small-vera.conf
-rw-r--r--    1 qt       qt            514 Jun 20 10:01 30-amt-aliases.conf
-rw-r--r--    1 qt       qt           1484 Jun 20 10:01 30-urw-aliases.conf
-rw-r--r--    1 qt       qt           1723 Jun 20 10:01 40-generic.conf
-rw-r--r--    1 qt       qt            545 Jun 20 10:01 49-sansserif.conf
-rw-r--r--    1 qt       qt            269 Jun 20 10:01 50-user.conf
-rw-r--r--    1 qt       qt            271 Jun 20 10:01 51-local.conf
-rw-r--r--    1 qt       qt           1064 Jun 20 10:01 60-latin.conf
-rw-r--r--    1 qt       qt          12559 Jun 20 10:01 65-fonts-persian.conf
-rw-r--r--    1 qt       qt            954 Jun 20 10:01 65-nonlatin.conf
-rw-r--r--    1 qt       qt            454 Jun 20 10:01 69-unifont.conf
-rw-r--r--    1 qt       qt            306 Jun 20 10:01 70-no-bitmaps.conf
-rw-r--r--    1 qt       qt            296 Jun 20 10:01 70-yes-bitmaps.conf
-rw-r--r--    1 qt       qt            433 Jun 20 10:01 80-delicious.conf
-rw-r--r--    1 qt       qt           1754 Jun 20 10:01 90-synthetic.conf
-rw-r--r--    1 qt       qt           1474 Jun 20 10:01 README

./etc/fonts/conf.d:
total 0
lrwxrwxrwx    1 qt       qt             39 Aug 14 10:25 20-fix-globaladvance.conf -> ../conf.avail/20-fix-globaladvance.conf
lrwxrwxrwx    1 qt       qt             36 Aug 14 10:25 20-lohit-gujarati.conf -> ../conf.avail/20-lohit-gujarati.conf
lrwxrwxrwx    1 qt       qt             39 Aug 14 10:25 20-unhint-small-vera.conf -> ../conf.avail/20-unhint-small-vera.conf
lrwxrwxrwx    1 qt       qt             33 Aug 14 10:25 30-amt-aliases.conf -> ../conf.avail/30-amt-aliases.conf
lrwxrwxrwx    1 qt       qt             33 Aug 14 10:25 30-urw-aliases.conf -> ../conf.avail/30-urw-aliases.conf
lrwxrwxrwx    1 qt       qt             29 Aug 14 10:25 40-generic.conf -> ../conf.avail/40-generic.conf
lrwxrwxrwx    1 qt       qt             31 Aug 14 10:25 49-sansserif.conf -> ../conf.avail/49-sansserif.conf
lrwxrwxrwx    1 qt       qt             26 Aug 14 10:25 50-user.conf -> ../conf.avail/50-user.conf
lrwxrwxrwx    1 qt       qt             27 Aug 14 10:25 51-local.conf -> ../conf.avail/51-local.conf
lrwxrwxrwx    1 qt       qt             27 Aug 14 10:25 60-latin.conf -> ../conf.avail/60-latin.conf
lrwxrwxrwx    1 qt       qt             35 Aug 14 10:25 65-fonts-persian.conf -> ../conf.avail/65-fonts-persian.conf
lrwxrwxrwx    1 qt       qt             30 Aug 14 10:25 65-nonlatin.conf -> ../conf.avail/65-nonlatin.conf
lrwxrwxrwx    1 qt       qt             29 Aug 14 10:25 69-unifont.conf -> ../conf.avail/69-unifont.conf
lrwxrwxrwx    1 qt       qt             31 Aug 14 10:25 80-delicious.conf -> ../conf.avail/80-delicious.conf
lrwxrwxrwx    1 qt       qt             31 Aug 14 10:25 90-synthetic.conf -> ../conf.avail/90-synthetic.conf

./etc/gtk-2.0:
total 4
-rw-r--r--    1 qt       qt           2802 Jun 20 12:49 gdk-pixbuf.loaders

./etc/pango:
total 20
-rw-r--r--    1 qt       qt           2560 Jun 20 12:49 pango.modules
-rw-rw-r--    1 qt       qt            104 Jun 20 12:51 pangorc
-rw-r--r--    1 qt       qt          11446 Jun 20 10:20 pangox.aliases

./lib:
total 11848
drwxrwxr-x    3 qt       qt           4096 Jun 20 14:17 gtk-2.0
lrwxrwxrwx    1 qt       qt             21 Aug 14 10:25 libatk-1.0.so.0 -> libatk-1.0.so.0.901.0
-rwxr-xr-x    1 qt       qt         105640 Jun 20 15:14 libatk-1.0.so.0.901.0
lrwxrwxrwx    1 qt       qt             17 Aug 14 10:25 libcairo.so.2 -> libcairo.so.2.9.2
-rwxr-xr-x    1 qt       qt         377260 Jun 20 15:14 libcairo.so.2.9.2
lrwxrwxrwx    1 qt       qt             22 Aug 14 10:25 libfontconfig.so.1 -> libfontconfig.so.1.1.0
-rwxr-xr-x    1 qt       qt         182576 Jun 20 15:14 libfontconfig.so.1.1.0
lrwxrwxrwx    1 qt       qt             21 Aug 14 10:25 libfreetype.so.6 -> libfreetype.so.6.3.10
-rwxr-xr-x    1 qt       qt         383108 Jun 20 15:14 libfreetype.so.6.3.10
lrwxrwxrwx    1 qt       qt             29 Aug 14 10:25 libgdk_pixbuf-2.0.so.0 -> libgdk_pixbuf-2.0.so.0.1000.0
-rwxr-xr-x    1 qt       qt         125352 Jun 20 15:14 libgdk_pixbuf-2.0.so.0.1000.0
lrwxrwxrwx    1 qt       qt             26 Aug 14 10:25 libgdk-x11-2.0.so.0 -> libgdk-x11-2.0.so.0.1000.0
-rwxr-xr-x    1 qt       qt         733288 Jun 20 15:14 libgdk-x11-2.0.so.0.1000.0
lrwxrwxrwx    1 qt       qt             23 Aug 14 10:25 libglib-2.0.so.0 -> libglib-2.0.so.0.1200.0
-rwxr-xr-x    1 qt       qt         826708 Jun 20 15:14 libglib-2.0.so.0.1200.0
lrwxrwxrwx    1 qt       qt             26 Aug 14 10:25 libgmodule-2.0.so.0 -> libgmodule-2.0.so.0.1200.0
-rwxr-xr-x    1 qt       qt          12988 Jun 20 15:14 libgmodule-2.0.so.0.1200.0
lrwxrwxrwx    1 qt       qt             26 Aug 14 10:25 libgobject-2.0.so.0 -> libgobject-2.0.so.0.1200.0
-rwxr-xr-x    1 qt       qt         319124 Jun 20 15:14 libgobject-2.0.so.0.1200.0
lrwxrwxrwx    1 qt       qt             26 Aug 14 10:25 libgthread-2.0.so.0 -> libgthread-2.0.so.0.1200.0
-rwxr-xr-x    1 qt       qt          17960 Jun 20 15:14 libgthread-2.0.so.0.1200.0
lrwxrwxrwx    1 qt       qt             26 Aug 14 10:25 libgtk-x11-2.0.so.0 -> libgtk-x11-2.0.so.0.1000.0
-rwxr-xr-x    1 qt       qt        4911396 Jun 20 15:14 libgtk-x11-2.0.so.0.1000.0
lrwxrwxrwx    1 qt       qt             17 Aug 14 10:25 libiconv.so.2 -> libiconv.so.2.4.0
-rwxr-xr-x    1 qt       qt         904296 Jun 20 15:14 libiconv.so.2.4.0
lrwxrwxrwx    1 qt       qt             24 Aug 14 10:25 libpango-1.0.so.0 -> libpango-1.0.so.0.1400.4
-rwxr-xr-x    1 qt       qt         320120 Jun 20 15:14 libpango-1.0.so.0.1400.4
lrwxrwxrwx    1 qt       qt             29 Aug 14 10:25 libpangocairo-1.0.so.0 -> libpangocairo-1.0.so.0.1400.4
-rwxr-xr-x    1 qt       qt          37808 Jun 20 15:14 libpangocairo-1.0.so.0.1400.4
lrwxrwxrwx    1 qt       qt             27 Aug 14 10:25 libpangoft2-1.0.so.0 -> libpangoft2-1.0.so.0.1400.4
-rwxr-xr-x    1 qt       qt         260924 Jun 20 15:14 libpangoft2-1.0.so.0.1400.4
lrwxrwxrwx    1 qt       qt             25 Aug 14 10:25 libpangox-1.0.so.0 -> libpangox-1.0.so.0.1400.4
-rwxr-xr-x    1 qt       qt          54472 Jun 20 15:14 libpangox-1.0.so.0.1400.4
lrwxrwxrwx    1 qt       qt             27 Aug 14 10:25 libpangoxft-1.0.so.0 -> libpangoxft-1.0.so.0.1400.4
-rwxr-xr-x    1 qt       qt          31448 Jun 20 15:14 libpangoxft-1.0.so.0.1400.4
lrwxrwxrwx    1 qt       qt             18 Aug 14 10:25 libpng12.so.0 -> libpng12.so.0.12.0
-rwxr-xr-x    1 qt       qt         208600 Jun 20 15:14 libpng12.so.0.12.0
lrwxrwxrwx    1 qt       qt             18 Aug 14 10:25 libts-0.0.so.0 -> libts-0.0.so.0.1.1
-rwxr-xr-x    1 qt       qt           8524 Jun 20 15:14 libts-0.0.so.0.1.1
lrwxrwxrwx    1 qt       qt             18 Aug 14 10:25 libts.so -> libts-0.0.so.0.1.1
lrwxrwxrwx    1 qt       qt             13 Aug 14 10:25 libX11.so.6 -> libX11.so.6.2
-rwxr-xr-x    1 qt       qt         671708 Jun 20 15:14 libX11.so.6.2
lrwxrwxrwx    1 qt       qt             19 Aug 14 10:25 libXcursor.so.1 -> libXcursor.so.1.0.2
-rwxr-xr-x    1 qt       qt          31968 Jun 20 15:14 libXcursor.so.1.0.2
lrwxrwxrwx    1 qt       qt             14 Aug 14 10:25 libXext.so.6 -> libXext.so.6.4
-rwxr-xr-x    1 qt       qt          58372 Jun 20 15:14 libXext.so.6.4
lrwxrwxrwx    1 qt       qt             18 Aug 14 10:25 libXfixes.so.0 -> libXfixes.so.0.1.0
-rwxr-xr-x    1 qt       qt          14304 Jun 20 15:14 libXfixes.so.0.1.0
lrwxrwxrwx    1 qt       qt             15 Aug 14 10:25 libXft.so.2 -> libXft.so.2.1.2
-rwxr-xr-x    1 qt       qt          67992 Jun 20 15:14 libXft.so.2.1.2
lrwxrwxrwx    1 qt       qt             17 Aug 14 10:25 libxml2.so.2 -> libxml2.so.2.6.23
-rwxr-xr-x    1 qt       qt        1205308 Jun 20 15:14 libxml2.so.2.6.23
lrwxrwxrwx    1 qt       qt             19 Aug 14 10:25 libXrender.so.1 -> libXrender.so.1.2.2
-rwxr-xr-x    1 qt       qt          27120 Jun 20 15:14 libXrender.so.1.2.2
lrwxrwxrwx    1 qt       qt             13 Aug 14 10:25 libz.so.1 -> libz.so.1.2.3
-rwxr-xr-x    1 qt       qt          75264 Jun 20 15:14 libz.so.1.2.3
drwxrwxr-x    3 qt       qt           4096 Jun 20 14:17 pango
drwxrwxr-x    2 qt       qt           4096 Jun 20 14:30 ts
drwxrwxr-x    3 qt       qt           4096 Jun 20 14:31 X11

./lib/gtk-2.0:
total 4
drwxrwxr-x    3 qt       qt           4096 Jun 20 14:17 2.10.0

./lib/gtk-2.0/2.10.0:
total 4
drwxrwxr-x    2 qt       qt           4096 Jun 20 14:17 loaders

./lib/gtk-2.0/2.10.0/loaders:
total 272
-rwxr-xr-x    1 qt       qt          16812 Jun 20 14:17 libpixbufloader-ani.so
-rwxr-xr-x    1 qt       qt          20404 Jun 20 14:17 libpixbufloader-bmp.so
-rwxr-xr-x    1 qt       qt          30564 Jun 20 14:17 libpixbufloader-gif.so
-rwxr-xr-x    1 qt       qt          19776 Jun 20 14:17 libpixbufloader-ico.so
-rwxr-xr-x    1 qt       qt          17868 Jun 20 14:17 libpixbufloader-jpeg.so
-rwxr-xr-x    1 qt       qt          14256 Jun 20 14:17 libpixbufloader-pcx.so
-rwxr-xr-x    1 qt       qt          18720 Jun 20 14:17 libpixbufloader-png.so
-rwxr-xr-x    1 qt       qt          19852 Jun 20 14:17 libpixbufloader-pnm.so
-rwxr-xr-x    1 qt       qt          10496 Jun 20 14:17 libpixbufloader-ras.so
-rwxr-xr-x    1 qt       qt          19084 Jun 20 14:17 libpixbufloader-tga.so
-rwxr-xr-x    1 qt       qt          15888 Jun 20 14:17 libpixbufloader-tiff.so
-rwxr-xr-x    1 qt       qt           8256 Jun 20 14:17 libpixbufloader-wbmp.so
-rwxr-xr-x    1 qt       qt          11416 Jun 20 14:17 libpixbufloader-xbm.so
-rwxr-xr-x    1 qt       qt          29264 Jun 20 14:17 libpixbufloader-xpm.so

./lib/pango:
total 4
drwxrwxr-x    3 qt       qt           4096 Jun 20 14:17 1.5.0

./lib/pango/1.5.0:
total 4
drwxrwxr-x    2 qt       qt           4096 Jun 20 14:30 modules

./lib/pango/1.5.0/modules:
total 236
-rwxr-xr-x    1 qt       qt          13404 Jun 20 14:17 pango-arabic-fc.so
-rwxr-xr-x    1 qt       qt          11736 Jun 20 14:17 pango-basic-fc.so
-rwxr-xr-x    1 qt       qt          81368 Jun 20 14:17 pango-basic-x.so
-rwxr-xr-x    1 qt       qt          12412 Jun 20 14:17 pango-hangul-fc.so
-rwxr-xr-x    1 qt       qt          15828 Jun 20 14:17 pango-hebrew-fc.so
-rwxr-xr-x    1 qt       qt          27040 Jun 20 14:17 pango-indic-fc.so
-rwxr-xr-x    1 qt       qt          11288 Jun 20 14:17 pango-khmer-fc.so
-rwxr-xr-x    1 qt       qt          13064 Jun 20 14:17 pango-syriac-fc.so
-rwxr-xr-x    1 qt       qt          23228 Jun 20 14:17 pango-thai-fc.so
-rwxr-xr-x    1 qt       qt          10584 Jun 20 14:17 pango-tibetan-fc.so

./lib/ts:
total 36
-rwxr-xr-x    1 qt       qt           5096 Jun 20 14:17 dejitter.so
-rwxr-xr-x    1 qt       qt           4032 Jun 20 14:17 h3600.so
-rwxr-xr-x    1 qt       qt           5216 Jun 20 14:17 linear.so
-rwxr-xr-x    1 qt       qt           4784 Jun 20 14:17 pthres.so
-rwxr-xr-x    1 qt       qt           4912 Jun 20 14:17 variance.so

./lib/X11:
total 4
drwxr-xr-x    3 qt       qt           4096 Jun 20 14:17 fonts

./lib/X11/fonts:
total 4
drwxr-xr-x    2 qt       qt           4096 Jun 20 14:17 Type1

./lib/X11/fonts/Type1:
total 676
-rw-r--r--    1 qt       qt         674756 Jun 20 14:17 blee.ttf
-rw-r--r--    1 qt       qt           2587 Jun 20 14:17 fonts.cache-1
-rw-r--r--    1 qt       qt            128 Jun 20 14:17 fonts.dir
-rw-r--r--    1 qt       qt            128 Jun 20 14:17 fonts.scale

./var:
total 4
drwxrwxr-x    3 qt       qt           4096 Jun 20 10:01 cache

./var/cache:
total 4
drwxrwxr-x    2 qt       qt           4096 Jun 20 14:36 fontconfig

./var/cache/fontconfig:
total 8
-rw-r--r--    1 qt       qt           3120 Jun 20 14:36 025940843c8f619711e5a2e4315ec693-arm.cache-2
-rw-r--r--    1 qt       qt            112 Jun 20 14:36 3c4cc90c92e4ad1f6479574f39aa30d0-arm.cache-2
+-----------------------------------------------------------------------------------------
+
+ gtk 한글 처리
+
+-----------------------------------------------------------------------------------------

gchar *str = NULL;
 gchar *tmp="한글";
 
{
 GError *error = NULL;
 str = g_convert (tmp, -1, "UTF-8", "euc-kr", NULL, NULL, &error);
 if (!str)
 {
    g_warning ("Cannot convert text from charset to UTF-8 %s: %s", "euc-kr", error->message);
    g_error_free (error);
  }
  g_free (tmp);
 }
 
    /* Creates a new button with the label "Hello World". */
    button = gtk_button_new_with_label (str);


+-----------------------------------------------------------------------------------------
+
+ qt 및 konq-embedded 포팅
+
+-----------------------------------------------------------------------------------------
 * qt, konq-embedded 컴파일 옵션에서 -fno-rtti 제거하고 컴파일 한다.
 
export PKG_CONFIG_PATH=/user/app/lib/pkgconfig
export QTDIR=/home/qt/target/WallPad/qt

+-----------------------------------------------------------------------------------------
+ qt-embedded-free-3.3.3
+-----------------------------------------------------------------------------------------

tar zxvf qt-embedded-free-3.3.3.tar.gz
ln -s qt-embedded-free-3.3.3 qt
cd qt

./configure -qconfig full -depths 16 -embedded arm \
-thread -no-qvfb -no-xft -no-cups -qt-sql-sqlite \
-qt-gif -qt-libpng -qt-libjpeg -qt-libmng  -qt-imgfmt-png  -qt-imgfmt-jpeg  -qt-imgfmt-mng \
-qt-mouse-linuxtp -prefix /user/app \
-little-endian

Makefile 수정, examples , tools 등 필요 없는 것은 뺀다.

all: symlinks src-qmake src-moc sub-src

 +-----------------------------------------------------------
 + -fno-rtti 옵션을 제거, 이는 konq-embedded 가 이를 사용하기 때문이다.
 + konq-embedded가 자바 스크립터에서 죽는 부분 해결 위함
 +-----------------------------------------------------------
 
모든 Makefile 에서 -fno-rtti 옵션을 제거한다.

 +-----------------------------------------------------------
 + 특정 arm보드 계열에서 QTextEdit 생성 안되는 문제
 +-----------------------------------------------------------
$QTDIR/src/kernel/qfont.cpp
QString QFont::toString() const
{
    const QChar comma( ',' );
    return family() + comma +
#if 0 // by B.LEE
 QString::number(  pointSizeFloat() ) + comma +
#else
 QString::number(  (int)pointSizeFloat() ) + comma +
#endif
 QString::number(       pixelSize() ) + comma +
 QString::number( (int) styleHint() ) + comma +
 QString::number(          weight() ) + comma +
 QString::number( (int)    italic() ) + comma +
 QString::number( (int) underline() ) + comma +
 QString::number( (int) strikeOut() ) + comma +
 QString::number( (int)fixedPitch() ) + comma +
 QString::number( (int)   rawMode() );
}

 +-----------------------------------------------------------
 + sqlite 에 버그가 있다는데, 다른분이 수정했다. 뭘 했는지 모른다.
 +-----------------------------------------------------------

 +-----------------------------------------------------------
 + 터치를 사용하기 위해 linuxtp 를 수정한다.
 +-----------------------------------------------------------

vi src/embedded/qmouselinuxtp_qws.cpp

/****************************************************************************
** $Id: qt/qmouselinuxtp_qws.cpp   3.3.3   edited Apr 7 10:45 $
**
** Implementation of Qt/Embedded mouse drivers
**
** Created : 20020220
**
** Copyright (C) 1992-2002 Trolltech AS.  All rights reserved.
**
** This file is part of the kernel module of the Qt GUI Toolkit.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses for Qt/Embedded may use this file in accordance with the
** Qt Embedded Commercial License Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
**   information about Qt Commercial License Agreements.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/

#include "qmouselinuxtp_qws.h"

#ifndef QT_NO_QWS_MOUSE_LINUXTP
#include "qwindowsystem_qws.h"
#include "qsocketnotifier.h"
#include "qtimer.h"
#include "qapplication.h"
#include "qgfx_qws.h"

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>

#define QT_QWS_IPAQ

#if defined(QT_QWS_IPAQ)
#define QT_QWS_IPAQ_RAW
typedef struct {
 unsigned short pressure;
 unsigned short x;
 unsigned short y;
 unsigned short pad;
} TS_EVENT;
#elif defined(QT_QWS_EBX)
#define QT_QWS_EBX_RAW
#ifndef QT_QWS_SHARP
typedef struct {
        unsigned short pressure;
        unsigned short x;
        unsigned short y;
        unsigned short pad;
} TS_EVENT;
#else
typedef struct {
       long y;
       long x;
       long pressure;
       long long millisecs;
} TS_EVENT;
#define QT_QWS_TP_SAMPLE_SIZE 10
#define QT_QWS_TP_MINIMUM_SAMPLES 1
#define QT_QWS_TP_PRESSURE_THRESHOLD 500

#define QT_QWS_TP_MOVE_LIMIT 50
#define QT_QWS_TP_JITTER_LIMIT 2
#endif
#else
typedef struct {
 unsigned short pressure;
 unsigned short x;
 unsigned short y;
 unsigned short pad;
} TS_EVENT;
#endif

#ifndef QT_QWS_TP_SAMPLE_SIZE
#define QT_QWS_TP_SAMPLE_SIZE 5
#endif

#ifndef QT_QWS_TP_MINIMUM_SAMPLES
#define QT_QWS_TP_MINIMUM_SAMPLES 5
#endif

#ifndef QT_QWS_TP_PRESSURE_THRESHOLD
#define QT_QWS_TP_PRESSURE_THRESHOLD 1
#endif

#ifndef QT_QWS_TP_MOVE_LIMIT
#define QT_QWS_TP_MOVE_LIMIT 100
#endif

#ifndef QT_QWS_TP_JITTER_LIMIT
#define QT_QWS_TP_JITTER_LIMIT 2
#endif

// by nahel
#define QT_QWS_TP_SAMPLE_SIZE 10
#define QT_QWS_TP_MINIMUM_SAMPLES 1
#define QT_QWS_TP_PRESSURE_THRESHOLD 10
#define QT_QWS_TP_MOVE_LIMIT 50
#define QT_QWS_TP_JITTER_LIMIT 1

class QWSLinuxTPMouseHandlerPrivate : public QObject
{
    Q_OBJECT
public:
    QWSLinuxTPMouseHandlerPrivate( QWSLinuxTPMouseHandler *h );
    ~QWSLinuxTPMouseHandlerPrivate();

private:
    static const int mouseBufSize = 2048;
    int mouseFD;
    QPoint oldmouse;
    QPoint oldTotalMousePos;
    bool waspressed;
    QPointArray samples;
    unsigned int currSample;
    unsigned int lastSample;
    unsigned int numSamples;
    int skipCount;
    int mouseIdx;
    uchar mouseBuf[mouseBufSize];
    QWSLinuxTPMouseHandler *handler;

private slots:
    void readMouseData();
};

QWSLinuxTPMouseHandler::QWSLinuxTPMouseHandler( const QString &, const QString & )
{
    d = new QWSLinuxTPMouseHandlerPrivate( this );
}

QWSLinuxTPMouseHandler::~QWSLinuxTPMouseHandler()
{
    delete d;
}

QWSLinuxTPMouseHandlerPrivate::QWSLinuxTPMouseHandlerPrivate( QWSLinuxTPMouseHandler *h )
    : samples(QT_QWS_TP_SAMPLE_SIZE), currSample(0), lastSample(0),
    numSamples(0), skipCount(0), handler(h)
{
// by nahel
//printf("QWSLinuxTPMouseHandlerPrivate open\n");

/*
#if defined(QT_QWS_IPAQ)
# ifdef QT_QWS_IPAQ_RAW
printf("#1\n");
    if ((mouseFD = open( "/dev/h3600_tsraw", O_RDONLY | O_NDELAY)) < 0) {
# else
printf("#2\n");
    if ((mouseFD = open( "/dev/h3600_ts", O_RDONLY | O_NDELAY)) < 0) {
# endif
 qWarning( "Cannot open /dev/h3600_ts (%s)", strerror(errno));
 return;
    }
#elif defined(QT_QWS_EBX)
printf("#3\n");
//# ifdef QT_QWS_EBX_TSRAW
# if 0
    if ((mouseFD = open( "/dev/tsraw", O_RDONLY | O_NDELAY)) < 0) {
        qWarning( "Cannot open /dev/tsraw (%s)", strerror(errno));
       return;
    }
# else
// by nahel
printf("ts open\n");
    if ((mouseFD = open( "/dev/ts", O_RDONLY | O_NDELAY)) < 0) {
        qWarning( "Cannot open /dev/ts (%s)", strerror(errno));
        return;
     }
# endif
#endif
*/

//printf("ts open\n");
    if ((mouseFD = open( "/dev/digi", O_RDONLY | O_NDELAY)) < 0) {
        qWarning( "Cannot open /dev/digi (%s)", strerror(errno));
        return;
     }

//printf("#5\n");
    QSocketNotifier *mouseNotifier;
    mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read,
      this );
    connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData()));
    waspressed=FALSE;
    mouseIdx = 0;
}

QWSLinuxTPMouseHandlerPrivate::~QWSLinuxTPMouseHandlerPrivate()
{
    if (mouseFD >= 0)
 close(mouseFD);
}


void QWSLinuxTPMouseHandlerPrivate::readMouseData()
{
    if(!qt_screen)
 return;

    int n;
    do {
 n = read(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx );
 if ( n > 0 )
     mouseIdx += n;
    } while ( n > 0 && mouseIdx < mouseBufSize );

    TS_EVENT *data;
    int idx = 0;

    // perhaps we shouldn't be reading EVERY SAMPLE.
    while ( mouseIdx-idx >= (int)sizeof( TS_EVENT ) ) {
 uchar *mb = mouseBuf+idx;
 data = (TS_EVENT *) mb;

//printf("data->pressure=%d:%d\n", data->pressure, QT_QWS_TP_PRESSURE_THRESHOLD);

 if(data->pressure >= QT_QWS_TP_PRESSURE_THRESHOLD)
 {

#ifdef QT_QWS_SHARP
     samples[currSample] = QPoint( 1000 - data->x, data->y );
#else
     samples[currSample] = QPoint( data->x, data->y );
#endif

     numSamples++;
     if ( numSamples >= QT_QWS_TP_MINIMUM_SAMPLES ) {
  int sampleCount = QMIN(numSamples + 1,samples.count());

  // average the rest
  QPoint mousePos = QPoint( 0, 0 );
  QPoint totalMousePos = oldTotalMousePos;
  totalMousePos += samples[currSample];
  if(numSamples >= samples.count())
      totalMousePos -= samples[lastSample];

  mousePos = totalMousePos / (sampleCount - 1);

# if defined(QT_QWS_IPAQ_RAW) || defined(QT_QWS_EBX_RAW)
  mousePos = handler->transform( mousePos );
# endif
  if(!waspressed)
      oldmouse = mousePos;
  QPoint dp = mousePos - oldmouse;
  int dxSqr = dp.x() * dp.x();
  int dySqr = dp.y() * dp.y();
  if ( dxSqr + dySqr < (QT_QWS_TP_MOVE_LIMIT * QT_QWS_TP_MOVE_LIMIT) ) {
      if ( waspressed ) {
   if ( (dxSqr + dySqr > (QT_QWS_TP_JITTER_LIMIT * QT_QWS_TP_JITTER_LIMIT) ) || skipCount > 2) {
//printf("#1\n");
       handler->mouseChanged(mousePos,Qt::LeftButton);
       oldmouse = mousePos;
       skipCount = 0;
   } else {
       skipCount++;
   }
      } else {
   handler->mouseChanged(mousePos,Qt::LeftButton);
   oldmouse=mousePos;
   waspressed=true;
      }

      // save recuring information
      currSample++;
      if (numSamples >= samples.count())
   lastSample++;
      oldTotalMousePos = totalMousePos;
  } else {
      numSamples--; // don't use this sample, it was bad.
  }
     } else {
  // build up the average
  oldTotalMousePos += samples[currSample];
  currSample++;
     }
     if ( currSample >= samples.count() )
  currSample = 0;
     if ( lastSample >= samples.count() )
  lastSample = 0;
 } else {
     currSample = 0;
     lastSample = 0;
     numSamples = 0;
     skipCount = 0;
     oldTotalMousePos = QPoint(0,0);
     if ( waspressed ) {
  handler->mouseChanged(oldmouse,0);
  oldmouse = QPoint( -100, -100 );
  waspressed=false;
     }
 }
 idx += sizeof( TS_EVENT );
    }

    int surplus = mouseIdx - idx;
    for ( int i = 0; i < surplus; i++ )
 mouseBuf[i] = mouseBuf[idx+i];
    mouseIdx = surplus;
}

#include "qmouselinuxtp_qws.moc"
#endif //QT_NO_QWS_MOUSE_LINUXTP


make
make install
+-----------------------------------------------------------------------------------------
+ PCRE - Perl Compatible Regular Expressions http://www.pcre.org/
+-----------------------------------------------------------------------------------------

./configure --prefix=/user/app --host=arm-linux --build=i386-linux

+-----------------------------------------------------------------------------------------
+ konqueror3-embedded-0.2-20060121 http://www.cirulla.net/kdenox-snapshots/
+         http://www.konqueror.org/embedded/
+-----------------------------------------------------------------------------------------

 +-----------------------------------------------------------
 + configure 파일 수정
 +-----------------------------------------------------------
linux* 에 해당하는 lib 경로가 fix 되어 있다. 타켓에 맞게 수정해 준다.
여러 군데 있으므로 잘 찾아서 고쳐 준다.
 
#sys_lib_dlsearch_path_spec="/lib /usr/lib"
#sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
sys_lib_dlsearch_path_spec="/user/app/lib /usr/local/arm/lib/gcc-lib/arm-linux/3.2.3/../../../../arm-linux/lib"
sys_lib_search_path_spec="/user/app/lib /usr/local/arm/lib/gcc-lib/arm-linux/3.2.3/../../../../arm-linux/lib"


./configure --prefix=/user/app --host=arm-linux --build=i386-linux \
--enable-debug=yes \
--enable-qt-embedded \
--enable-pie \
--disable-pcre \
--enable-embedded \
--disable-qtopia \
--disable-mac \
--enable-mt \
--disable-dlopen \
--disable-printing \
--enable-ftp \
--enable-cgi \
--enable-pcre \
--disable-bookmarks \
--with-konq-tmp-prefix="/user/temp" \
--with-extra-includes=/user/app/include \
--with-extra-libs=/user/app/lib \
--with-qt-dir="/home/qt/target/WallPad/qt" \
--with-qt-includes="/home/qt/target/WallPad/qt/include" \
--with-qt-libraries="/user/app/lib" \
--without-arts \
--with-javascript=static \
--with-ipv6-lookup=no \
--without-ssl \
--with-gui=kiosk

#--disable-pcre \

 +-----------------------------------------------------------
 + -fno-rtti 옵션을 제거, 이는 konq-embedded 가 이를 사용하기 때문이다.
 +-----------------------------------------------------------
모든 Makefile 에서 -fno-rtti 옵션을 제거한다.


make
make install

 +-----------------------------------------------------------
 + user/app/share/config/kcookiejarrc 생성
 + 이 파일이 없다면, 쿠키를 가진 웹페이지는 제대로 로딩되지 않는다.
 +-----------------------------------------------------------
 
vi /user/app/share/config/kcookiejarrc 
[Cookie Dialog]
PreferredPolicy=1
ShowCookieDetails=false
[Cookie Policy]
CookieGlobalAdvice=Accept
Cookies=true
IgnoreExpirationDate=false

 +-----------------------------------------------------------
 + 그 외 필요한 파일, 하지만 install 하면 자동 생성된다.
 +-----------------------------------------------------------
 
user/app/share/config/konq-embedrc
user/app/share/apps/khtml/css/html4.css
+-----------------------------------------------------------------------------------------
+ 테스트
+-----------------------------------------------------------------------------------------
 +-----------------------------------------------------------
 + QT 환경 설정
 +-----------------------------------------------------------

export LD_LIBRARY_PATH=/user/app/lib:$LD_LIBRARY_PATH
export TSLIB_TSDEVICE=/dev/digi
export QTDIR=/user/app
export QWS_MOUSE_PROTO=linuxtp:/dev/digi
cp /user/app/etc/pointercal /etc/

 +-----------------------------------------------------------
 + konq-embedded 환경 설정
 +-----------------------------------------------------------
export KDEDIR=/user/qpp
export KDEHOME=$KDEDIR
export KDEROOTHOME=$KDEDIR
#export KIO_HTTP_USECACHE=true
export KIO_HTTP_USECACHE=false
export KIO_HTTP_MAXCACHESIZE=1024

export KIO_HTTP_CONNECT_TIMEOUT=5
export KIO_HTTP_RESPONSE_TIMEOUT=3
export KIO_HTTP_READ_TIMEOUT=3

CACHE_DIR=/var/webbrowser/cache

if [ ! -d $CACHE_DIR ]
then
        mkdir -p $CACHE_DIR
fi

./konqueror -qws
+-----------------------------------------------------------------------------------------
+ 실행시 필요한 파일
+-----------------------------------------------------------------------------------------
-rw-r--r-- root/root        38 2007-08-10 21:08:45 user/app/etc/pointercal
-rw-r--r-- root/root        47 2007-08-10 21:02:37 user/app/share/config/konq-embedrc
-rw-r--r-- root/root       171 2007-08-10 21:02:37 user/app/share/config/kcookiejarrc
-rw-r--r-- root/root      8033 2007-08-10 21:01:47 user/app/share/apps/khtml/css/html4.css
lrwxrwxrwx root/root         0 2007-08-10 20:59:45 user/app/lib/libqte-mt.so -> libqte-mt.so.3.3.3
lrwxrwxrwx root/root         0 2007-08-10 20:59:43 user/app/lib/libqte-mt.so.3 -> libqte-mt.so.3.3.3
-rwxr-xr-x root/root   7725664 2007-08-11 00:15:53 user/app/lib/libqte-mt.so.3.3.3
lrwxrwxrwx root/root         0 2007-08-10 21:01:03 user/app/lib/libkonqe.so -> libkonqe.so.0.0.0
drwxr-xr-x root/root         0 2007-08-11 00:28:49 user/app/lib/fonts/
-rwxr--r-- root/root    756264 2007-08-11 00:29:16 user/app/lib/fonts/na.ttf
-r-xr--r-- root/root    538044 2007-08-11 00:29:15 user/app/lib/fonts/ygo130.ttf
-rwxr--r-- root/root  10500792 2007-08-11 00:29:14 user/app/lib/fonts/simsun.ttc
-rwxr--r-- root/root     26580 2007-08-11 00:29:02 user/app/lib/fonts/nekoyanagi.ttf
-r-xr--r-- root/root   2569040 2007-08-11 00:29:02 user/app/lib/fonts/mssong.ttf
-r-xr--r-- root/root      1629 2007-08-11 00:28:56 user/app/lib/fonts/mkfontdir-qws
-rwxr--r-- root/root     21628 2007-08-11 00:28:56 user/app/lib/fonts/m36_ledbit.TTF
-r-xr--r-- root/root     72680 2007-08-11 00:28:56 user/app/lib/fonts/lcd.ttf
-rwxr--r-- root/root   6114396 2007-08-11 00:28:56 user/app/lib/fonts/HMFMOLD.TTF
-rwxr--r-- root/root     46320 2007-08-11 00:28:49 user/app/lib/fonts/gaufontkusanagi.ttf
-rwxr--r-- root/root      7822 2007-08-11 00:28:49 user/app/lib/fonts/fontdir-lots
-rwxr--r-- root/root        50 2007-08-11 00:28:49 user/app/lib/fonts/fontdir
lrwxrwxrwx root/root         0 2007-08-11 00:24:54 user/app/lib/libz.so -> libz.so.1.2.3
lrwxrwxrwx root/root         0 2007-08-11 00:24:53 user/app/lib/libz.so.1 -> libz.so.1.2.3
-rwxr-xr-x root/root     75264 2007-08-11 00:24:40 user/app/lib/libz.so.1.2.3
lrwxrwxrwx root/root         0 2007-08-10 21:01:02 user/app/lib/libkonqe.so.0 -> libkonqe.so.0.0.0
lrwxrwxrwx root/root         0 2007-08-11 00:24:18 user/app/lib/libjpeg.so -> libjpeg.so.62.0.0
lrwxrwxrwx root/root         0 2007-08-11 00:24:17 user/app/lib/libjpeg.so.62 -> libjpeg.so.62.0.0
-rwxr-xr-x root/root    115676 2007-08-11 00:24:05 user/app/lib/libjpeg.so.62.0.0
lrwxrwxrwx root/root         0 2007-08-11 00:23:47 user/app/lib/libpng12.so -> libpng12.so.0.12.0
lrwxrwxrwx root/root         0 2007-08-11 00:23:46 user/app/lib/libpng12.so.0 -> libpng12.so.0.12.0
-rwxr-xr-x root/root    208600 2007-08-11 00:23:20 user/app/lib/libpng12.so.0.12.0
-rwxr-xr-x root/root   1404092 2007-08-11 00:16:09 user/app/lib/libkonqe.so.0.0.0
-rwxr-xr-x root/root       702 2007-08-11 00:34:38 user/app/bin/run_web
-rwxr-xr-x root/root   4306548 2007-08-11 00:58:21 user/app/bin/konqueror

+-----------------------------------------------------------------------------------------
+ 소스 수정
+-----------------------------------------------------------------------------------------

 +-----------------------------------------------------------
 + 마우스 커서 없애기
 +-----------------------------------------------------------
konq-embed/src/main.cc

QWSServer::setCursorVisible(FALSE);

 +-----------------------------------------------------------
 + 페이지 요청 실패, 에러 다이얼로그 박스 대신에  web 페이지 출력하도록 수정
 +-----------------------------------------------------------

konq-embed/kdesrc/khtml/khtml_part.cpp

void KHTMLPart::showError( KIO::Job* job )
{
  kdDebug(6050) << "KHTMLPart::showError d->m_bParsing=" << (d->m_doc && d->m_doc->parsing()) << " d->m_bComplete=" << d->m_bComplete
                << " d->m_bCleared=" << d->m_bCleared << endl;

  if (job->error() == KIO::ERR_NO_CONTENT)
 return;

  if ( (d->m_doc && d->m_doc->parsing()) || d->m_workingURL.isEmpty() ) // if we got any data already
#if 0 //! by B.LEE
   job->showErrorDialog( /*d->m_view*/ );
#else
  {
  QString myHTMLCode = QString::fromLatin1( "<HTML><HEAD></HEAD><BODY><P>" );
  myHTMLCode += job->errorString();
  myHTMLCode += QString::fromLatin1( "<P>BY B.LEE</BODY></HTML>" );
  begin();
  write(myHTMLCode);
  end();
  }
#endif
  else
  {
    htmlError( job->error(), job->errorText(), d->m_workingURL );
  }
}

 +-----------------------------------------------------------
 + 보안 경고 다이얼로그 띄우지 않게
 +-----------------------------------------------------------

konq-embed\kdesrc\khtml\khtml_part.cpp

#if 0 //! by B.LEE
  if (!d->m_submitForm) {
    if (u.protocol() != "https" && u.protocol() != "mailto") {
      if (d->m_ssl_in_use) {    // Going from SSL -> nonSSL
        int rc = KMessageBox::warningContinueCancel(NULL, i18n("Warning:  This is a secure form but it is attempting to send your data back unencrypted."
                                                               "\nA third party may be able to intercept and view this information."
                                                               "\nAre you sure you wish to continue?"),
                                                    i18n("Network Transmission"),KGuiItem(i18n("&Send Unencrypted")));
        if (rc == KMessageBox::Cancel)
          return;
      } else {                  // Going from nonSSL -> nonSSL
        KSSLSettings kss(true);
        if (kss.warnOnUnencrypted()) {
          int rc = KMessageBox::warningContinueCancel(NULL,
                                                      i18n("Warning: Your data is about to be transmitted across the network unencrypted."
                                                           "\nAre you sure you wish to continue?"),
                                                      i18n("Network Transmission"),
                                                      KGuiItem(i18n("&Send Unencrypted")),
                                                      "WarnOnUnencryptedForm");
          // Move this setting into KSSL instead
          KConfig *config = kapp->config();
          QString grpNotifMsgs = QString::fromLatin1("Notification Messages");
          KConfigGroupSaver saver( config, grpNotifMsgs );

          if (!config->readBoolEntry("WarnOnUnencryptedForm", true)) {
            config->deleteEntry("WarnOnUnencryptedForm");
            config->sync();
            kss.setWarnOnUnencrypted(false);
            kss.save();
          }
          if (rc == KMessageBox::Cancel)
            return;
       }
      }
    }

    if (u.protocol() == "mailto") {
      int rc = KMessageBox::warningContinueCancel(NULL,
                                                  i18n("This site is attempting to submit form data via email.\n"
                                                       "Do you want to continue?"),
                                                  i18n("Network Transmission"),
                                                  KGuiItem(i18n("&Send Email")),
                                                  "WarnTriedEmailSubmit");

      if (rc == KMessageBox::Cancel) {
        return;
      }
    }
  }
#endif
  // End form security checks
  //

+-----------------------------------------------------------------------------------------
+ 터치 serial 바꾸었다.
+-----------------------------------------------------------------------------------------

./configure -qconfig full -depths 16 -embedded arm \
-thread -no-qvfb -no-xft -no-cups -qt-sql-sqlite \
-qt-gif -qt-libpng -qt-libjpeg -qt-libmng  -qt-imgfmt-png  -qt-imgfmt-jpeg  -qt-imgfmt-mng \
-qt-mouse-yopy -prefix /user/app \
-little-endian


qmouseyopy_qws.cpp

export QWS_MOUSE_PROTO=yopy

Posted by blee
,