分类: LINUX
2008-07-16 11:39:45
主机环境:
系统:redhat 9 完全安装
交叉编译工具arm 2.95.3
设置好minicom和nfs
开发板环境
arm 2410s
640*480屏外加触摸屏
cramfs只读文件系统
Qtopia版本
建立arm-linux-gcc交叉编译环境
在RedHat Linux系统下以root用户登录,
从光盘上将cross-2.95.3.tar.bz2文件复制到/usr/local目录下,或从网上下载一个cross-2.95.3.tar.bz2:
安装:
# tar -jxvf cross-2.95.3.tar.bz2
这个命令会在你的/usr/local/arm/2.95.3目录下安装 arm-linux-gcc 交叉编译程序,
然后在PATH变量中添加一项:
export PATH=/usr/local/arm/2.95.3/bin:$PATH
测试:
# arm-linux-gcc -v
建立所需目录
mkdir /root/2410s 下载的软件包全部存放到这里
mkdir /root/2410s/armlib 编译软件得到qtopia所需要的库文件全部放在这里
mkdir /root/2410s/arminclude 编译软件得到qtopia所需要的头文件全部放在这里
需要的软件支持:
e2fsprogs 可以提供uuid支持
版本 e2fsprogs-1.39
libjpeg一个jpeg图形编码解码程序库
版本 jpeg-6b
下载地址
zlib 一个压缩解压程序库
版本 zlib-
下载地址
The current release is publicly available here:
下列下载
tslib是一个触摸屏的库,它提供诸如滤波、去抖、校准之类的功能,为不同的触摸屏提供了一个统一的接口。
版本 tslib-1.3.tar.bz2
下载地址
注:我后来改称
libpng一个png图形编码解码程序库
软件版本 libpng-
下载地址
编译软件得到qtopia所需要的库文件以及头文件
编译e2fsprogs-1.39
要得到qtopia 所需的二個文件,uuid.h 及 libuuid.so。
cd /root/2410s/e2fsprogs-1.39
export PATH=/usr/local/arm/2.95.3/bin:$PATH
export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
./configure --enable-elf-shlibs --host=arm-linux
--with-cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc
--with-linker=/usr/local/arm/2.95.3/bin/arm-linux-ld
--prefix=/usr/local/arm/2.95.3/arm-linux
make
**********
将e2fsprogs-1.39/lib/目录下uuid的文件夹复制到2410s/arminclude下
cp -r /lib/uuid /root/2410s/arminclude
cp lib/libuuid.so* /root/2410s/armlib /
*************
注:这步是交叉编译libuuid库,配置详情见./configure --help
jpeg:
cd /root/2410s/jpeg-6b
export PATH=/usr/local/arm/2.95.3/bin:$PATH
export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
./configure –enable-shared
vi Makefile
修改生成的Makefile文件
prefix= /root/2410s/qt-
CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
AR= /usr/local/arm/2.95.3/bin/arm-linux-ar rc
AR2= /usr/local/arm/2.95.3/bin/arm-linux-ranlib
cp jconfig.doc jconfig.h
mkdir -p /root/2410s/qt-
make
make install -lib
*******
报错,但是在/root/2410s/qt-
********
cp jpeglib.h /root/2410s/arminclude
cp lib/libjpeg.so* /root/2410s/armlib
就可以给qt-embedded添加好for arm的libjpeg库.
放到交叉编译的Lib一份
cp lib/libuuid.so* /usr/local/arm/2.95.3/arm-linux/lib
zlib:
cd /root/2410s/zlib-
export PATH=/usr/local/arm/2.95.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/arm/2.95.3/arm-linux/lib:$LD_LIBRARY_PATH
export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc
./configure –shared
vi Makefile
修改:
[begin]
...
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
...
LDSHARED=/usr/local/arm/2.95.3/bin/arm-linux-gcc -shared
-Wl,-soname,libz.so.1
CPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc -E
...
AR=/usr/local/arm/2.95.3/bin/arm-linux-ar rc
RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
...
prefix =/usr/local/arm/2.95.3/arm-linux
...
[end]
make
cp libz.so* /root/2410s/armlib
cp *.h /root/2410s/arminclude (我只拷贝了zlib.h)
把生成的库文件libjpeg.so*向下面的目录中也拷贝一份:
/usr/local/arm/2.95.3/arm-linux/lib
****************
切记设置
export LD_LIBRARY_PATH=/usr/local/arm/2.95.3/arm-linux/lib:$LD_LIBRARY_PATH
否则会出现错误,库会调用libc.so.6不是arm 而是x86的
chmod: error while loading shared libraries: libc.so.6: ELF file OS ABI invalid
*******************
libpng:
cd /root/2410s/libpng-
cp scripts/makefile.linux ./Makefile
vi Makefile
修改:
[begin]
...
AR_RC=/usr/local/arm/2.95.3/bin/arm-linux-ar rc
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
...
RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
...
prefix=/usr/local/arm/2.95.3/arm-linux
...
[end]
Make
cp libpng12.so* /root/2410s/armlib
cp *.h /root/2410s/arminclude
把生成的库文件libjpeg.so*向下面的目录中也拷贝一份:
/usr/local/arm/2.95.3/arm-linux/lib
确定生成ARM平台的二进制文件
******************
利用file命令确认生成的执行文件是否适合目标平台即生成ARM平台的二进制文件。
例如:
[root@team armlib]# file libpng12.so*
libpng12.so: symbolic link to libpng12.so.0
libpng12.so.0: symbolic link to libpng12.so.
libpng12.so.
(ARM), not stripped
************************
编译触摸屏共享库tslib
Qt/Embedded只支持鼠标和键盘的操作,但在大部分嵌入式系统中利用触摸屏,所以用户必须对触摸屏的相关操作编译成共享库或静态库。
参见:我的另一文档 http://blog.chinaunix.net/u1/33412/showart_282396.html