2010年10月24日星期日

qt for palm webos

分开使用,开发两部分来



使用:

首先要安装qt framework
随便看一个qt程序的启动例子
#!/bin/sh
cd /media/cryptofs/apps/usr/palm/applications/net.griffin.qtspread
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/media/cryptofs/apps/usr/palm/applications/net.griffin.qt/qt/lib
export QWS_DISPLAY=palmpresdlfb
./spreadsheet -qws

#$LD_LIBRARY_PATH Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。(该路径在默认路径之前查找) 移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。
#$QWS_DISPLAY指定一个驱动,通过设置QWS_DISPLAY环境变量去指定使用哪个驱动
#-qws选项的含义是使这个应用程序成为服务器。

编译,开发
QtCreator是Nokia Qt SDK的集成开发环境,通过它可以进行程序编写,编译,调试等工作。
需要下载的
http://qt.nokia.com/title-cn/downloads-cn
http://qt.gitorious.org/~darronb/qt/qt-palm-pre
./configure -D QT_NO_QWS_MULTIPROCESS -prefix /media/cryptofs/apps/usr/palm/applications/net.griffin.qt/qt -rpath -opensource -embedded arm -openssl -make demos -make examples -verbose

参考:http://wiki.forum.nokia.com/index.php/Nokia_Qt_SDK%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E4%BD%BF%E7%94%A8
ubuntu下的nokia qt sdk安装:http://musante.i.ph/blogs/musante/?p=74
一些qt开源程序http://qt-apps.org/
编译环境的搭建 http://www.webos-internals.org/wiki/WebOS_Internals_PDK
export PATH="$PATH:/media/cryptofs/apps/usr/palm/applications/net.griffin.qt/qt/bin"

Scratchbox2的使用要配合qemu、交叉工具链和目标平台的根文件系统来使用。

sb2 -M /srv/preware/cross-compile/staging/mapping-armv7
cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc
PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc
cd 是必须的,sbox2-init 初始化当前目录为目标平台根目录;
其中,"-c qemu-arm"表示使用qemu-arm虚拟机;"armv7"表示这次配置的模拟环境的名称;"arm-none-linux-gnueabi-gcc"表示在这个模拟环境中gcc对应的程序是哪个。

详细理解Scratchbox2原理请看这里http://blog.csdn.net/langxing0508/archive/2010/09/03/5861574.aspx
还有这里 http://www.linuxsir.org/bbs/showthread.php?t=346639

mkdir -p /media/cryptofs/apps/usr/palm/applications
cd /media/cryptofs/apps/usr/palm/applications
wget http://www2.griffin.net/preware/qtbuild.tar.gz
tar zxvf qtbuild.tar.gz

export PATH=$PATH:/media/cryptofs/apps/usr/palm/applications/net.griffin.qt/qt/bin
刚好有一台Sprint的Palm pre,TI omap 3430的cpu,cortex-a8的构架,折腾一下编译器。
export $PREFIX=安装目录

一、软件版本
1、gcc-core-4.6-snapshots     ftp://gcc.gnu.org/pub/gcc/snapshots/$version
2、gcc-g++-4.6-snapshots     ftp://gcc.gnu.org/pub/gcc/snapshots/$version
2、bintutils-2.20.51-snapshots    ftp://gcc.gnu.org/pub/binutils/snpshots/binutils.tar.bz2
3、eglibc-2.5-svn         svn co http://www.eglibc.org/cgi-bin/viewcvs.cgi/branches/eglibc-2_5/ eglib-2.5-svn
二、编译步骤:
1、编译binutils
tar -xf binutils.tar.bz2    解压binutils
通常这一步是不会出现什么问题的,具体配置如下:
cd binutils-2.20.51
mkdir build
cd build
../configure --target=arm-linux-gnueabi --build=i686-pc-linux-gnu \
     --with-cpu=cortex-a8 --with-tune=cortex-a8 --with-fpu=neon \
     --prefix=$PREFIX
2、bootstrap gcc
tar -xf gcc-core-$version.tar.bz2    解压gcc
tar -xf gcc-g++-$version.tar.bz2     解压g++
具体配置如下:
../configure --target=arm-linux-gnueabi --build=i686-pc-linux-gnu \
     --with-cpu=cortex-a8 --with-tune=cortex-a8 --with-fpu=neon\
     --disable-shared --disable-threads --disable-libssp --disable-libmudflap\
     --disable-multilib --enable-languages=c --with-newlib --prefix=$PREFIX
这一步大概会遇到zlib编译不能通过,解决方法如下:
cd $GCC_DIR/zlib
vi configure
:%s/exit/echo/g    把所有exit替换成echo,这个是一个老bug了不,经过测试没有问题;
3、安装palm提供的linuxheader-2.6.24头文件
http://opensource.palm.com下载最新版本的palm kernel源代码,连patch一起下载;
tar -xf linuxheader-2.6.24.tar.bz2
cd $KERNEL_SRC
gunzip linuxkernel-2.6.24-patch(pre).gz
patch -Np1 < patch-pre-1.4.1.diff
cp ./arch/arm/configs/omap_sirloin_3430_defconfig .config
make menuconfig    #这一步不做任何设置改动,主要是为了生成相应头文件;
#复制头文件
mkdir $PREFIX/arm-linux-gnueabi/include
cp -a include/asm-arm $PREFIX/arm-linux-gnueabi/include
cp -a include/asm-generic $PREFIX/arm-linux-gnueabi/include
cp -a include/linux $PREFIX/arm-linux-gnueabi/include
cd $PREFIX/arm-linux-gnueabi/include
ln -s asm-arm asm
#头文件制作完成
4、编译eglibc
svn co http://www.eglibc.org/cgi-bin/viewcvs.cgi/branches/eglibc-2_5/ eglibc-2.5-svn
cd eglibc-2.5-svn
mv ports libc
mkdir target
cd target
../configure --host=arm-linux-gnueabi --build=i686-pc-linux-gnu --enable-add-ons --with-headers=#PREFIX/arm-linux-gnueabi/include --prefix=$PREFIX/arm-linux-gnueabi/
这一步是极看RP和脸的一步,很容易出现各类问题;
可做以下措施预防:
vi config.make
将CFLAGS = -g -O2
修改为 CFLAGS = -O3 -ftree-vectorize -fgnu89-inline -mcpu=cortex-a8 -mfpu=neon
vi elf/Makefile
找到这一行:
1-e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \将其修改为:
1-e 's/\. = .* + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \

通过以上修改,即可顺利编译通过
make $$ make install
5、完整的编译 gcc 和g++
cd $GCC_DIR
mkdir build
../configure --target=arm-linux-gnueabi --build=i686-pc-linux-gnu \
     --with-fpu=neon --with-cpu=cortex-a8 --with-float=softfp \
     --prefix=$PREFIX --with-libs=$PREFIX/arm-linux-gnueabi/lib
make $$ make install

1 . cp configure configure.bak
2. vi configure
3. :%s/echo/exit/g
4.CC=arm-linux-gnueabi-gcc ./configure
5 . vi Makefile
6 . /gcc
7 . a
8. -lSDL -I/palm-neon/arm-linux-gnueabi/include/SDL
9. -Wl,--allow-shlib-undefined
10. :wq
11.make
  193  cp -a /home/user/net.griffin.qt/qt/bin/* /home/user/debian/bin
194 cp -a /home/user/net.griffin.qt/qt/lib/* /home/user/debian/usr/lib
195 cp -a /home/user/net.griffin.qt/qt/include/* /home/user/debian/usr/include
197 cp -a /home/user/net.griffin.qt/qt/mkspecs /home/user/debian/usr/
200 cp -a /home/user/net.griffin.qt/qt/demos/embedded/lightmaps /home/user/debian/home
201 leafpad /home/user/debian/home/lightmaps/Makefile
202 cp -a /palm-neon/arm-linux-gnueabi/lib/libGLES_CM.so /home/user/debian/lib
203 cp -a /palm-neon/arm-linux-gnueabi/lib/libGLESv2.so /home/user/debian/lib
204 cp -a /palm-neon/arm-linux-gnueabi/lib/libIMGegl.so /home/user/debian/lib
205 cp -a /palm-neon/arm-linux-gnueabi/lib/libsrv_um.so /home/user/debian/lib
206 cp -a /palm-neon/arm-linux-gnueabi/lib/libpvr2d.so /home/user/debian/lib
216 cp -a /home/user/rootfs/usr/lib/egl /home/user/debian/usr/lib/
217 cp -a /home/user/rootfs/usr/lib/libpng.so.3.42.0 /home/user/debian/usr/lib
218 cp -a /home/user/rootfs/usr/lib/libpng.so.3 /home/user/debian/usr/lib
219 cp -a /home/user/rootfs/usr/lib/libEGL.so /home/user/debian/usr/lib

guest 是arm ubuntu
86 export QMAKESPEC=/usr/mkspecs/linux-g++
90 sudo apt-get install build-essential #安装g++

2 条评论:

  1. target里面,最好echo nameserver 8.8.8.8 > /etc/resolv.conf

    回复删除
  2. export PATH=$PATH:/palm-neon/bin

    回复删除