Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43441
  • 博文数量: 26
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-14 19:16
文章分类
文章存档

2011年(1)

2010年(25)

我的朋友

分类: LINUX

2010-09-04 13:53:46

由于想移植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

把config/cf/Imake.tmpl
394 #ifndef CrossCompiling
395 #define CrossCompiling      YES
该为YES
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 也还是不好使,但是在 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!

可在当前75dbi目录下fonts.dir找到

就这样可以顺利运行了。中间有个十字的东西。
运行结果如下

阅读(1394) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-31 18:10:01

楼主你好~我用以上介绍的方法交叉编译XFree86。zlib、ncurses、tslib、XFree的版本都和文章中一样,交叉编译器版本为4.4.3。前三个函数库都已顺利交叉编译,只是在交叉编译tslib时会提示--enable-inputapi为未知选项。之后把交叉编译后的tslib的库文件放到交叉编译环境的lib文件夹下,cross.def里也修改了相关编译环境路径,其他步骤照文章做,在make World时,报错: tslib.c: 在函数‘TsRead’中: tslib.c:85: 错误:‘KdTsCurScreen’未声明(在此函数内第一次使用) tslib.c:85: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其 tslib.c:85: 错误:所在的函数内也只报告一次。) tslib.c:85: 警告: 未使用变量‘buttons’ tslib.c:85: 警告: 未使用变量‘pressure’ tslib.c:85: 警告: 未使用变量‘fd’ 请问是什么原因呢?

chinaunix网友2010-09-06 14:41:43

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com