分类: LINUX
2009-03-20 11:18:37
Qtopia PDA 2.2.2 交叉编译过程
By nanfansky@163.com
2006-12-10
HOST 环境:
cpu:intel p4 2.8
内存:1g
系统:redhat 9 完全安装
交叉工具arm 2.95.3(为了与开发板保持一致我采用的是3.4.1的交叉编译器)
TARGET环境
arm 2440
240*320屏外加触摸屏
jffs2文件系统(我不清楚 )
软件:
cross-2.95.3.tar.bz2
qtopia-free-src-2.2.0.tar.gz
e2fsprogs-1.35.tar.gz
jpegsrc.v6b.tar.gz
libpng-1.2.14.tar.bz2
tslib-1.3.tar.bz2
zlib-1.2.3.tar.bz2
我的arm-linux-gcc 已安装到/usr/local/arm/2.95.3/bin/,并已设置$PATH变量
(最好设一下交叉编译器的路径 export CROSS=**/3.4.1 这样后面就比较方便
同时:export PATH=$CROSS/bin:$PATH)
编译步骤:
1.解压qtopia-free-src-2.2.0.tar.gz,将其mv qtopia-free-2.2.0 到 /home/qtopia_x86
cd /home/qtopia_x86
./configure;make (gcc4.0不行,必须用gcc3版本)
得到本机运行版本uic 工具
解压qtopia-free-src-2.2.0.tar.gz 将其mv至 /home/nfs/qtopia-free-2.2.0/
cp /home/qtopia_x86/qt2/bin/uic /home/nfs/qtopia-free-2.2.0/qt2/bin/
2.编译相关库
将上面的e2fsprogs-1.35.tar.gz,jpegsrc.v6b.tar.gz, libpng-1.2.14.tar.bz2, tslib-1.3.tar.bz2, zlib-1.2.3.tar.bz2 解压至/home/arm目录,并相应更名目录为
e2fs jpeg libpng tslib zlib
并建立mkdir /home/arm/lib ;mkdir /home/arm/include (这两个目录是存放编译后的库与头文件,为后面交叉编译用)
e2fs:
./configure --host=arm-linux --enable-elf-shlibs --with-cc=arm-linux-gcc --with-linker=arm-linux-ld --prefix=$CROSS/arm-linux
make (编译的时候报错,不过可以进入include/uuid,运行make则会生成相应的库文件,再make install就会直接将相应的.so .h拷贝到$CROSS/arm-linux下相应的文件夹中
)
cp lib/libuuid.so* /home/arm/lib(不用)
jpeg:
./configure –enable-shared --prefix=$CROSS/arm-linux
vi Makefile
修改:
CC= arm-linux-gcc
AR= arm-linux-ar rc
AR2=arm-linux-ranlib
make (会报错,不过没关系)
make install
zlib:
cd /home/arm/zlib
./configure –shared --prefix=$CROSS/arm-linux
vi Makefile
修改:
[begin]
...
CC=arm-linux-gcc
...
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
CPP=arm-linux-gcc -E
...
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
...
prefix =/usr/local/arm/2.95.3/arm-linux(x)
...
[end]
make
make install
cp libz.so* /home/arm/lib/
cp *.h /home/arm/include/
libpng:
/home/arm/libpng
cp s/makefile.linux ./Makefile
vi Makefile
修改:
[begin]
...
AR_RC=arm-linux-ar rc
CC=arm-linux-gcc
...
RANLIB=arm-linux-ranlib
...
prefix=$CROSS/arm-linux
...
[end]
make
cp libpng12.so* /home/arm/lib/
cp libpng12.so /home/arm/lib/libpng.so
cp *.h /home/arm/include/
make install
tslib:
/home/arm/tslib
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --prefix=$CROSS/arm-linux
--cache-file=arm-linux.cache –enable-inputapi=no
在make之前,为了支持触摸屏,这里有一点小小的修改,打开src/ts_read_raw.c文件,查看你的触摸屏驱动程序数据结构,看与ts_read_raw.c结构中的哪个一样,就将代码中的
char *defaulttseventtype="UCB1x00";(还没有改,不知道是什么)
修改为
char *defaulttseventtype="H3600"; //这里因为我的驱动是h3600_ts_event结构,修改为你驱动对应的结构,好了,如果你触摸屏驱动程序支持ioctrl操作,上面的 configure操作中的[—enable-inputapi=no]你可以删除。好了,现在可以make了,^_^
make
cp src/.libs/libts-0.0.so.0* /home/arm/lib/
cp src/.libs/libts.so /home/arm/lib/
cp src (X)
make install