这段时间,晚上一直在弄把qtopia-free-2.2.0移植到arm9上,昨天晚上成功了!非常高兴
。
把在这个移植过程中出现的一些问题和大家分享一下,希望对大家有所帮助
时间:2008-9 作者:Darby
host环境:系统:Fedora 1 完全安装,交叉工具arm 2.95.3和3.3.2(libjpeg.a)
target环境:arm s3c2410,320x240屏外加触摸屏,yaffs文件系统
软件:cross-2.95.3.tar.bz2和cross-3.3.2.tar.bz2
qtopia-free-src-2.2.0.tar.gz =>qtopia-free-2.2.0)
e2fsprogs-1.39.tar.gz=>(e2fs)
jpegsrc.v6b.tar.gz=>(jpeg)
libpng -1.2.14.tar.bz2=>(libpng)
tslib-1.3.tar.bz2=>(tslib)
zlib-1.2.3.tar.bz2=>(zlib)
准备路径
我的arm-linux-gcc已安装到/usr/local/arm/2.95.3/bin/,并已设置$PATH变量
设置环境变量:
export MYHOME=/usr/local/s3c2410linux/qt-embedded/yizhi/qtopia-free-2.2.0
export PATH=$PATH:/usr/local/arm/2.95.3/bin
mkdir $MYHOME/arm/lib
mkdir $MYHOME/arm/include(这两个目录是存放编译后的库与头文件,为后面交叉编译用)
mkdir $MYHOME/qtopia
然后分别编译:
1.e2fs
:
cd $MYHOME/arm/e2fs
./configure --host=arm-linux --enable-elf-shlibs--with- cc=arm-linux-gcc --with-linker=arm-linux-ld --prefix=/usr/local/arm/2.95.3/arm-linux
make
cp lib/ libuuid .so* ../lib
make install
2. jpeg :
cd $MYHOME/arm/ jpeg
./configure –enable-shared
vi Makefile
修改
:
CC= arm-linux-gcc
AR= arm-linux-ar rc
AR2=arm-linux-ranlib
make
cp *.h ../include/
cp libjpeg.a ../lib/
如果当前没有libjpeg.a文件,在
cp /usr/local/arm/3.3.2/lib/libjpeg.a ../lib/
3.zlib:
cd $MYHOME/arm/zlib
./configure -shared
vi Makefile
修改
:
[begin]
...
CC=arm-linux-gcc
...
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
CPP=arm-linux-g++ -E
...
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
...
prefix =/usr/local/arm/2.95.3/arm-linux
...
[end]
make
cp libz.so* ../lib/
cp *.h ../include/
make install
4. libpng :
cd $MYHOME/arm/ libpng
cp scripts/makefile.linux ./Makefile
vi Makefile
修改
:
[begin]
...
AR_RC=arm-linux-ar rc
CC=arm-linux-gcc
...
RANLIB=arm-linux-ranlib
...
prefix=/usr/local/arm/2.95.3/arm-linux
...
[end]
make
cp libpng12.so* ../lib/
cp libpng12.so ../lib/ libpng .so
cp *.h ../include/
5.tslib
(如果准备用 Qt 自带的触摸屏校正工具可以不编译
)
:
cd $MYHOME/arm/tslib
./autogen.sh
echo"ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no --srcdir=/usr/local/s3c2410linux/qt-embedded/tslib-1.3
为了防止出现“libtool:link: only absolute run-paths are allowed“的错误,在/tslib/plugins/Makefile里面找rpath,找到将其注释并加上绝对路径。
#LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
LDFLAGS :=$(LDFLAGS) -rpath $(PWD)/plugins
make
cp src/.libs/libts-0.0.so.0* ../lib/
cp src/.libs/libts.so ../lib/
cp src/*.h ../include/
make install
编译
Qtopia
(1)准备
:
建立安装目录
:
mkdir $MYHOME/nfs/qtopia
修改文件
vi$MYHOME/nfs/qtopia-free-2.2.0/qtopia/mkspecs/qws/linux-arm-g++/qmake.conf(由于些文件为只读文件,可用chmod命令给些文件加上W的权限,否则修改不了!)
将此行
QMAKE_LIBS_QT = -lqte
修改为
QMAKE_LIBS_QT= -lqte -lpng -lts -lz -luuid -ljpeg
如果想让Qtopia自己支持触摸屏,需要修改$QPEDIR/qtopia/src/ qt /qconfig-qpe.h文件,定义相应的宏,在最后加上
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
在最后运行的时候,加上如下环境变量
:
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0
(
触摸屏具体名称和位置可能需要根据实际情况修改
)
如果想让Qtopia支持鼠标,需要修改$QPEDIR/src/ qt /qconfig-qpe.h文件
注释如下部分
:
/*
#ifndef QT_NO_QWS_CURSOR
#define QT_NO_QWS_CURSOR
#endif
#ifndef QT_NO_QWS_MOUSE_AUTO
#define QT_NO_QWS_MOUSE_AUTO
#endif
#ifndef QT_NO_QWS_MOUSE_PC
#define QT_NO_QWS_MOUSE_PC
#endif
*/
在最后运行的时候,加上如下环境变量
:
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0
(
触摸屏具体名称和位置可能需要根据实际情况修改
)
export QWS_MOUSE_PROTO=USB:/dev/input/mice(
不需要暂时可不写
)
如果想让Qtopia支持USB标准键盘,在最后运行的时候,加上如下环境变量
:
export QWS_KEYBOARD=USB:/dev/input/event0
(2)
设置环境变量
:
export QPEDIR=$MYHOME/nfs/qtopia-free-2.2.0/qtopia
export QTDIR=$MYHOME/nfs/qtopia-free-2.2.0/qt2
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib
export TMAKEDIR=$MYHOME/nfs/qtopia-free-2.2.0/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
(3)
准备配置文件
:
cp $QPEDIR/src/ qt /qconfig-qpe.h $QTDIR/src/tools
cd $QPEDIR/src/libraries/qtopia
cp custom-linux-ipaq-g++.cpp custom-linux-arm-g++.cpp
cp custom-linux-ipaq-g++.h custom-linux-arm-g++.h
(4)
开始
configure
cd$MYHOME/nfs/qtopia-free-2.2.0
如果想让Qtopia自己支持触摸屏,用下面的命令
:
echo'yes'|./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb-depths 16,24 -system- jpeg -system- libpng -system-zlib -gif -thread -no-xft-release -I$MYHOME/arm/include -L$MYHOME/arm/lib -lpng -lz -luuid -ljpeg"-qpe '-xplatform linux-arm-g++ -edition pda -displaysize 320x240-I$MYHOME/arm/include -L$MYHOME/arm/lib -prefix=$MYHOME/nfs/qtopia'
如果想用tslib可以加上-tslib和-lts选项
:
echo 'yes'|./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb -depths 4,8,16 -system- jpeg -system- libpng -system-zlib -tslib -gif -thread -no-xft -release -I/usr/local/s3c1410linux/qt-embedded/yizhi/arminclude -L/usr/local/s3c2410linux/qt-embedded/yizhi/armlib -lpng -lts -lz -luuid -ljpeg" -qpe '-xplatform linux-arm-g++ -edition pda -displaysize 320x240 -I$/usr/local/s3c2410linux/qt-embedded/yizhi/arminclude -L/usr/local/s3c2410linux/qt-embedded/yizhi/armlib -prefix=/usr/local/s3c2410linux/qt-embedded/yizhi/qtopia'
make
make install
会出现一个摄像头的文件的问题,找到对应文件,修改一下便可。以上的路径可能有些出路,由于匆忙,记的不是特别清楚,要是用可以根据实际情况进行修改,敬请见谅!
拷贝库与触摸屏校准/测试程序
mkdir /root/2410s/qtopia/bin/tests
mkdir /root/2410s/qtopia/lib/ts
cp /root/2410s/tslib-1.3/tests/.libs/ts_* /root/2410s/qtopia/bin/tests
cp /root/2410s/tslib-1.3/src/.libs/libts-0.0.so.0* /root/2410s/qtopia/lib
cp /root/2410s/tslib-1.3/src/.libs/libts.so /root/2410s/qtopia/lib
cp /root/2410s/tslib-1.3/plugins/.libs/*.so /root/2410s/qtopia/lib/ts
cp /root/2410s/armlib/*.so* /root/2410s/qtopia/lib //所有需要的支持的库文件
将qtopia复制到共享文件夹/nfs/rootfs/
cp -r /root/2410s/qtopia /nfs/rootfs/
注意 :::: 把文件/root/2410s/tslib-1.3/etc/ts.conf文件拷贝到你的板子的/etc/目录下
cp /root/2410s/tslib-1.3/etc/ts.conf /nfs/rootfs/
把文件/root/share/tslib/etc/ts.conf文件拷贝到你的板子的/mnt/yaffs目录下
cp /mnt/nfs/ts.conf /mnt/yaffs
(默认是/etc目录下面的,我这里需要修改也是因为根文件系统不可写的缘故)
运行[以下操作在目标板上进行]:
在你的板子上设置运行[url=javascript:;] 环境 [/url]变量
export QTDIR=/mnt/nfs/qtopia
export QPEDIR=/mnt/nfs/qtopia
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0(根据自己的实际来写)
export LD_LIBRARY_PATH=/mnt/nfs/qtopia/lib
export TSLIB_TSEVENTTYPE=H3600 对tslib中的设备结构体定义
export TSLIB_CONSOLEDEVICE=none tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty
export TSLIB_FBDEVICE=/dev/fb0 指定帧缓冲设备
(我的开发板上只有/dev/fb/0,所以做了一个链接 ln -s /dev/fb/0 /dev/fb0)
export TSLIB_TSDEVICE=/dev/touchscreen/0raw指定开发板对应触摸屏设备节点文件
export TSLIB_CALIBFILE=/mnt/yaffs/pointercal指定触摸屏校准文件pintercal的存放位置
(默认是在/etc下面,可写文件系统为/etc/pointercal)
export TSLIB_CONFFILE=/mnt/yaffs/ts.conf 指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=$QTDIR/lib/ts 指定触摸屏插件所在路径
***************************
如果为可写根文件系统,可以修改开发板/etc/profile文件,将这些环境变量写入,就不用每次设置了
*****************************
校准屏幕(5点校准)
cd /mnt/nfs/qtopia/bin/tests
./ts_calibrate
会陆续在LCD的4个角和中点出现光标,点击光标进行校准,生成校准文件
再运行测试
/ts_test
这时LCD上出现光标,你的手指点哪里光标就会跟到哪里才成功
运行PDA cd ..
./qpe
如果条件允许建议大家把上面的全部过程写成一个shell角本,运行会比较好(Jacky.J 指导)
以上出现PDA手机界面的就是说明成功了,当然在中途可能会遇到各种各样的问题,不过,
”事上无难事,只怕有心人“ 认真做了,认真想了,肯定会成功没有问题。
些项止要特别感谢:Jacky.J 老师(中国人)--此人比较低调,大家就不用找他了!有问题可以给我留言, 哈哈
在其大力的帮助下,得以顺利完成!至此90%工作已经完成,剩下的可以根据自己的实际需要对一些设备(如声卡)
驱动进行适当的调整,以达到自己的所需!感觉各位朋友耐心的看完此篇文章,希望上述内容对大家有所帮助,谢谢
把在这个移植过程中出现的一些问题和大家分享一下,希望对大家有所帮助
时间:2008-9 作者:Darby
host环境:系统:Fedora 1 完全安装,交叉工具arm 2.95.3和3.3.2(libjpeg.a)
target环境:arm s3c2410,320x240屏外加触摸屏,yaffs文件系统
软件:cross-2.95.3.tar.bz2和cross-3.3.2.tar.bz2
qtopia-free-src-2.2.0.tar.gz =>qtopia-free-2.2.0)
e2fsprogs-1.39.tar.gz=>(e2fs)
jpegsrc.v6b.tar.gz=>(jpeg)
libpng
tslib-1.3.tar.bz2=>(tslib)
zlib-1.2.3.tar.bz2=>(zlib)
准备路径
我的arm-linux-gcc已安装到/usr/local/arm/2.95.3/bin/,并已设置$PATH变量
设置环境变量:
export MYHOME=/usr/local/s3c2410linux/qt-embedded/yizhi/qtopia-free-2.2.0
export PATH=$PATH:/usr/local/arm/2.95.3/bin
mkdir $MYHOME/arm/lib
mkdir $MYHOME/arm/include(这两个目录是存放编译后的库与头文件,为后面交叉编译用)
mkdir $MYHOME/qtopia
然后分别编译:
1.e2fs
cd $MYHOME/arm/e2fs
./configure --host=arm-linux --enable-elf-shlibs--with- cc=arm-linux-gcc --with-linker=arm-linux-ld --prefix=/usr/local/arm/2.95.3/arm-linux
make
cp lib/
make install
2.
cd $MYHOME/arm/
./configure –enable-shared
vi Makefile
CC= arm-linux-gcc
AR= arm-linux-ar rc
AR2=arm-linux-ranlib
make
cp *.h ../include/
cp libjpeg.a ../lib/
cp /usr/local/arm/3.3.2/lib/libjpeg.a ../lib/
3.zlib:
cd $MYHOME/arm/zlib
./configure -shared
vi Makefile
修改
[begin]
...
CC=arm-linux-gcc
...
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
CPP=arm-linux-g++ -E
...
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
...
prefix =/usr/local/arm/2.95.3/arm-linux
...
[end]
make
cp libz.so* ../lib/
cp *.h ../include/
make install
4.
cd $MYHOME/arm/
cp scripts/makefile.linux ./Makefile
vi Makefile
[begin]
...
CC=arm-linux-gcc
...
RANLIB=arm-linux-ranlib
...
prefix=/usr/local/arm/2.95.3/arm-linux
...
[end]
make
cp libpng12.so* ../lib/
cp libpng12.so ../lib/
cp *.h ../include/
5.tslib
cd $MYHOME/arm/tslib
./autogen.sh
echo"ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no --srcdir=/usr/local/s3c2410linux/qt-embedded/tslib-1.3
#LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
LDFLAGS :=$(LDFLAGS) -rpath $(PWD)/plugins
make
cp src/.libs/libts-0.0.so.0* ../lib/
cp src/.libs/libts.so ../lib/
cp src/*.h ../include/
make install
编译
(1)准备
建立安装目录
mkdir $MYHOME/nfs/qtopia
vi$MYHOME/nfs/qtopia-free-2.2.0/qtopia/mkspecs/qws/linux-arm-g++/qmake.conf(由于些文件为只读文件,可用chmod命令给些文件加上W的权限,否则修改不了!)
QMAKE_LIBS_QT = -lqte
QMAKE_LIBS_QT= -lqte -lpng -lts -lz -luuid -ljpeg
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0
如果想让Qtopia支持鼠标,需要修改$QPEDIR/src/
注释如下部分
/*
#ifndef QT_NO_QWS_CURSOR
#define QT_NO_QWS_CURSOR
#endif
#ifndef QT_NO_QWS_MOUSE_AUTO
#define QT_NO_QWS_MOUSE_AUTO
#endif
#ifndef QT_NO_QWS_MOUSE_PC
#define QT_NO_QWS_MOUSE_PC
#endif
*/
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0
export QWS_MOUSE_PROTO=USB:/dev/input/mice(
如果想让Qtopia支持USB标准键盘,在最后运行的时候,加上如下环境变量
export QWS_KEYBOARD=USB:/dev/input/event0
export QPEDIR=$MYHOME/nfs/qtopia-free-2.2.0/qtopia
export QTDIR=$MYHOME/nfs/qtopia-free-2.2.0/qt2
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib
export TMAKEDIR=$MYHOME/nfs/qtopia-free-2.2.0/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
cp $QPEDIR/src/
cd $QPEDIR/src/libraries/qtopia
cp custom-linux-ipaq-g++.cpp custom-linux-arm-g++.cpp
cp custom-linux-ipaq-g++.h custom-linux-arm-g++.h
cd$MYHOME/nfs/qtopia-free-2.2.0
如果想让Qtopia自己支持触摸屏,用下面的命令
echo'yes'|./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb-depths 16,24 -system-
echo 'yes'|./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb -depths 4,8,16 -system-
make
make install
会出现一个摄像头的文件的问题,找到对应文件,修改一下便可。以上的路径可能有些出路,由于匆忙,记的不是特别清楚,要是用可以根据实际情况进行修改,敬请见谅!
拷贝库与触摸屏校准/测试程序
mkdir /root/2410s/qtopia/bin/tests
mkdir /root/2410s/qtopia/lib/ts
cp /root/2410s/tslib-1.3/tests/.libs/ts_* /root/2410s/qtopia/bin/tests
cp /root/2410s/tslib-1.3/src/.libs/libts-0.0.so.0* /root/2410s/qtopia/lib
cp /root/2410s/tslib-1.3/src/.libs/libts.so /root/2410s/qtopia/lib
cp /root/2410s/tslib-1.3/plugins/.libs/*.so /root/2410s/qtopia/lib/ts
cp /root/2410s/armlib/*.so* /root/2410s/qtopia/lib //所有需要的支持的库文件
将qtopia复制到共享文件夹/nfs/rootfs/
cp -r /root/2410s/qtopia /nfs/rootfs/
注意 :::: 把文件/root/2410s/tslib-1.3/etc/ts.conf文件拷贝到你的板子的/etc/目录下
cp /root/2410s/tslib-1.3/etc/ts.conf /nfs/rootfs/
把文件/root/share/tslib/etc/ts.conf文件拷贝到你的板子的/mnt/yaffs目录下
cp /mnt/nfs/ts.conf /mnt/yaffs
(默认是/etc目录下面的,我这里需要修改也是因为根文件系统不可写的缘故)
运行[以下操作在目标板上进行]:
在你的板子上设置运行[url=javascript:;]
export QTDIR=/mnt/nfs/qtopia
export QPEDIR=/mnt/nfs/qtopia
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0(根据自己的实际来写)
export LD_LIBRARY_PATH=/mnt/nfs/qtopia/lib
export TSLIB_TSEVENTTYPE=H3600 对tslib中的设备结构体定义
export TSLIB_CONSOLEDEVICE=none tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty
export TSLIB_FBDEVICE=/dev/fb0 指定帧缓冲设备
(我的开发板上只有/dev/fb/0,所以做了一个链接 ln -s /dev/fb/0 /dev/fb0)
export TSLIB_TSDEVICE=/dev/touchscreen/0raw指定开发板对应触摸屏设备节点文件
export TSLIB_CALIBFILE=/mnt/yaffs/pointercal指定触摸屏校准文件pintercal的存放位置
(默认是在/etc下面,可写文件系统为/etc/pointercal)
export TSLIB_CONFFILE=/mnt/yaffs/ts.conf 指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=$QTDIR/lib/ts 指定触摸屏插件所在路径
***************************
如果为可写根文件系统,可以修改开发板/etc/profile文件,将这些环境变量写入,就不用每次设置了
*****************************
校准屏幕(5点校准)
cd /mnt/nfs/qtopia/bin/tests
./ts_calibrate
会陆续在LCD的4个角和中点出现光标,点击光标进行校准,生成校准文件
再运行测试
/ts_test
这时LCD上出现光标,你的手指点哪里光标就会跟到哪里才成功
运行PDA
./qpe
如果条件允许建议大家把上面的全部过程写成一个shell角本,运行会比较好(Jacky.J
以上出现PDA手机界面的就是说明成功了,当然在中途可能会遇到各种各样的问题,不过,
”事上无难事,只怕有心人“
些项止要特别感谢:Jacky.J
在其大力的帮助下,得以顺利完成!至此90%工作已经完成,剩下的可以根据自己的实际需要对一些设备(如声卡)
驱动进行适当的调整,以达到自己的所需!感觉各位朋友耐心的看完此篇文章,希望上述内容对大家有所帮助,谢谢