分类: 嵌入式
2010-11-25 17:57:30
由于想移植XMAME过ARM9那里遇到界面无法显示的问题。之前移植的SDL还出问题出现。所以改用移植TINYX试试看效果如何
在移植的过程中发现了。网上很多文章都很假的。。乱来的。根本都是复制来复制去。没什么意义阿!编译过程中出现了N多的问题。只有自己慢慢编译。出现一个问题再找一个问题。这样一步一步的编译成功的!
首先要下载
zlib-1.2.3.tar.gz
ncurses-5.4.tar.gz
tslib-1.4.tar
交叉编译才能正确编译TINYX的上面的软件在CHINAUNIX都有下的
ncurses 交叉编译./configure \
--prefix=$PWD/bulid \
--host=arm-linux \
--target=arm-linux \
--with-build-cc=cc \
--with-build-cpp=cpp \
--with-shared \
--with-normal
make
make install
zlib 交叉编译
export CC=arm-linux-gcc
./configure -shared --prefix=$PWD/usr
make && make install
tslib交叉编译
./autogen.sh --host=arm-linux
./configure --host=arm-linux --target=arm-linux --prefix=$PWD/build --enable-inputapi=yes
export PLUGIN_DIR=tslib-1.3/plugins
vim config.h在里面加上 #define USE_INPUT_API 1 这一句的
make;make install
然后把相应的库文件拷贝到交叉编译环境的LIB下
然后到
XFree86-4.8-src-1 -7.taz
下载
tar -zxvf XFree86-4.8.0-src-1.tgz
tar -zxvf XFree86-4.8.0-src-2.tgz
tar -zxvf XFree86-4.8.0-src-3.tgz
tar -zxvf XFree86-4.8.0-src-4.tgz
tar -zxvf XFree86-4.8.0-src-5.tgz
tar -zxvf XFree86-4.8.0-src-6.tgz
tar -zxvf XFree86-4.8.0-src-7.tgz
cd xc/config/util/
make lndir
cp lndir /usr/local/bin/
和xc在同一个目录下建立一个文件夹
mkdir arm
cd arm
lndir ../xc/
arm/config/cf目录下修改cross.def文件并添加host.def文件
cross.def
看清楚你编译环境的路径
#undef i386Architecture
#undef Arm32Architecture
#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 -DX_LOCALE -DUSE_DYNAMIC_LC -DUSE_UTF8_LOADER \
-DUSE_DYNAMIC_LOADER
#undef CcCmd
#define StdIncDir
#define PreIncDir
#undef PostIncDir
#define PostIncDir
#define CcCmd /usr/local/arm/3.4.5/bin/arm-linux-gcc -L/usr/local/arm/3.4.5/arm-linux/lib -I/usr/local/arm/3.4.5/arm-linux/include
#undef CplusplusCmd
#define HasCplusplus NO
#define CplusplusCmd NO
#define DoRanlibCmd YES
#define RanlibCmd /usr/local/arm/3.4.5/bin/arm-linux-ranlib
#undef ExtraLoadFlags
#define ExtraLoadFlags
#define FbNoPixelAddrCode
#undef TermcapLibrary
#define TermcapLibrary -L/root/Desktop/ncurses/lib -lncurses
#undef LdPostLib
#define LdPostLib -L/usr/local/arm/3.4.5/arm-linux/lib
#undef LdCmd
#define LdCmd /usr/local/arm/3.4.5/bin/arm-linux-ld
#undef ExtensionOSDefines
#define ExtensionOSDefines
#define ServerXdmcpDefines /**/
#define GzipLibrary -L../lib -lz
/*
#define HostCcCmd /usr/local/arm/3.4.5/bin/arm-linux-gcc -L/usr/local/arm/3.4.5/arm-linux/lib/ -I/usr/local/arm/3.4.5/arm-linux/include/
*/
#include
host.def
#define TinyXServer YES
#define TouchScreen YES
#define HasTsLib YES
#define XfbdevServer YES
#define BuildServersOnly YES
#define CrossCompiling YES
#define XF86Server NO
#define XdmxServer NO
#define XnestServer NO
#define XsunServer NO
#define Xsun24Server NO
#define XsunMonoServer NO
#define XsunLynxServer NO
#define XSavageServer NO
#define XIgsServer NO
#define XTridentServer NO
#define XchipsServer NO
#define Xmach64Server NO
#define Xi810Server NO
#define XSis530Server NO
#define XTrioServer NO
#define XipaqServer NO
#define XTS300Server NO
#define XItsyServer NO
#define XvesaServer NO
#define XDarwinServer NO
#define XVirtualFramebufferServer NO
#define XprtServer NO
#define BuildXprintClients NO
#define ProjectRoot /usr/local/arm/3.4.5/KK-3.4.5
#define NothingOutsideProjectRoot YES
#define BuildLibraries YES
#define BuildDocs NO
#undef BuildRender
#define BuildRender YES
#define UseRgbTxt YES
#define OmitSnfSupport YES
#define HasMTRRSupport NO
#define UseX86Emu NO
#define BuildGlxExt NO
#define XF86INT10_BUILD X86INT10_STUB
#define XInputDrivers mouse keyboard
在programs/Xserver/hw/tinyX/linux/tslib.c中对触摸屏的查找是根据TsNames数组来进行的,其中可能没有开发板上的触摸屏名称。在开发板Linux的/dev下查找,一般是带ts的,将其加入TsNames数组。
此时编译会报错,找不到tslib.h。发现该文件在Tslib/src中,于是将tslib.h拷入tinyx/programs /Xserver/hw/tinyX/linux/即可。继续编译出现ld找不到-lts问题,将编译好的tslib/lib文件夹中文件拷入arm- linux-gcc/arm-linux/lib。
在lib/X11/Imakefile
#if (BuildServersOnly || !BuildX11Lib) && !XnestServer && !BuildGLXLibrary && !BuildClients && !XdmxServer
修改为
#if (BuildServersOnly || !BuildX11Lib) && !XnestServer && !BuildGLXLibrary && !BuildClients && !XdmxServer && !TinyXServer
然后 makr World
make install
在编译过程中可能会出现缺少LIBXIO。O库
cd programs/Xserver/os/tiny
make lbxio.o
就可以了
编译会遇到的错误:
(1)#error "Unsupported size of `int' type!"
#error "Unsupported size of `long' type!"
浮点数例外
修改方法:把arm/lib/freetype2/freetype/config/ftconfig.h的
#define FT_CHAR_BIT CHAR_BIT
修改为#define FT_CHAR_BIT 8
原因是:/* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
/* `char' type.
这个CHAR_BIT 是在/usr/include/limits.h里定义的,CHAR_BIT=8,但是
#defien StdIncDir /usr/include 也还是不好使,但是在Ubuntu 8.04里就好使,所以直接把CHAR_BIT该为8。
(2)编译ucs2any 缺少libXaw.a,libXmu.a 等文件修改arm/fonts/util/Makefile
767行:DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
为
DEPLIBS =
运行
按照我的配置编译没有字体产生,所以要到xfree86.org网站下载Xfnts.tgz字体,根据路径放置字体,然后运行./Xfbdev
这是一个带黑白小格子的界面就启动起来了,界面中间有一个X形光标,点击触摸屏,光标移到到你点击的位置,这样就成功了。
这里还用强调的一点是:一定要使用Xfnts.tgz的字体,因为直接运行./Xfbdev,它会到Xfnts.tgz里的misc文件夹寻找合适的字体,不然的话就要指定字体了。
但是有一点直接运行./Xfbdev会启动的慢一点,如果指定了字体就会省去搜索字体的时间,启动就快了。
运行的时候还会有一个提示:
(WW) Could not open RGB file "/usr/local/arm/X11R6/lib/X11/rgb.txt"; will use built-in copy.
到网上找rgb.txt文件,直接放到X11文件夹就可以了。
运行:Xfbdev.
出现错误:
_XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
_XSERVTransOpen: transport open failed for inet6/linux:0
_XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6
Could not init font path element /usr/loacal/arm/3.4.5/KK-3.4.5/lib/X11/fonts/TTF/, removing from list!
Could not init font path element /usr/local/arm/3.4.5/KK-3.4.5/lib/X11/fonts/Speedo/, removing from list!
Could not init font path element /usr/local/arm/3.4.5/KK-3.4.5/lib/X11/fonts/Type1/, removing from list!
Could not init font path element /usr/local/arm/3.4.5/KK-3.4.5/lib/X11/fonts/CID/, removing from list!
Fatal server error:
could not open default font ‘fixed’
运行Xfbdev –help,它提供了两个参数fp和fn用于指定字体的路径和字体名称,尝试指定这两个参数
./Xfbdev -fp /usr/local/arm/3.4.5/KK-3.4.5/lib/X11/fonts/75dpi/ -fn -adobe-utopia-bold-i-normal--12-120-75-75-p-70-iso10646-1 -fc -adobe-times-medium-r-normal--8-80-75-75-p-44-iso8859-1l
-adobe-utopia-bold-i-normal--12-120-75-75-p-70-iso10646-1 -fc -adobe-times-medium-r-normal--8-80-75-75-p-44-iso8859-1l 可在当前75dbi目录下fonts.dir找到
就这样可以顺利运行了。中间有个十字的东西。
文章出处:飞诺网(