- 论坛徽章:
- 0
|
在嵌入式系统中tinyx使用的还是挺多的,前一段时间编译了一下tingyx,是从xfree86-4.6.0編的。falls建议用xorg编,但是xorg依赖的库还要自己挨个编,比较麻烦,准备先搞一个能用的,以后再用xorg编一个也可以。现在把编译过程中的一些东西记录下来。在编译的时候参考了absurd的文档,在这表示感谢,呵呵。
首先把XFree86的包解开,看里面的BUILD.txt文档。跟着里面作就可以了,创建一些连接。然后创建host.def,修改cross.def,修改lib/X11/Imakefile,在第一层的#if中增加 && !TinyXServer条件,这样编译tinyx的时候也会编译X11中的库,不加这个条件会出错。
host.def:
#define TinyXServer YES
#define XfbdevServer YES
#define BuildServersOnly 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 CrossCompiling YES
#define ProjectRoot /usr/local/dtv
#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
cross.def:
/* $XFree86: xc/config/cf/cross.def,v 1.3 2002/04/04 14:05:33 eich Exp $ */
/*
* This file contains redefinitions of some symbols to enable
* cross compilation: e.g. paths for include files and paths to
* compiler images. It will have to be edited to reflect these
* given your local configuration.
*/
#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 /opt/cross-compile-arm/gcc-3.3/bin/arm-linux-gcc -L/opt/cross-compile-arm/gcc-3.3/arm-linux/lib/ -I/opt/cross-compile-arm/gcc-3.3/arm-linux/include/
#undef CplusplusCmd
#define HasCplusplus NO
#define CplusplusCmd NO
#define DoRanlibCmd YES
#define RanlibCmd /opt/cross-compile-arm/gcc-3.3/bin/arm-linux-ranlib
#undef ExtraLoadFlags
#define ExtraLoadFlags
#define FbNoPixelAddrCode
#undef TermcapLibrary
#define TermcapLibrary -L/usr/lib/ -lncurses
#undef LdPostLib
#define LdPostLib
#undef ExtensionOSDefines
#define ExtensionOSDefines
#define ServerXdmcpDefines /**/
/*
#define HostCcCmd /opt/cross-compile-arm/gcc-3.3/bin/arm-linux-gcc -L/opt/cross-compile-arm/gcc-3.3/arm-linux/lib/ -I/opt/cross-compile-arm/gcc-3.3/arm-linux/include/
*/
#define HostCcCmd gcc
#include
最后make命令:make World CROSSCOMPILEDIR=/opt/cross-compile-arm/gcc-3.3/bin/就可以了。速度比较快,我的C2.4G,512M的机器用了20分钟左右,同样的CPU,1G内存编译用了大概10分钟。
编译好了以后,拷贝到板子上运行:Xfbdev -fp /usr/share/fonts -fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso8859-1 -fc -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso8859-1。如果一切正常,X11会起来的,呵呵。其中字体部分可以通过fontconfig配置好,然后直接运行Xfbdev就可以了。
从XFree86编译tinyx有时候确实比较麻烦。首先它的Imake这种方式不怎么习惯;然后如果要编译XFree86可能还有不少的问题,所以我编译的时候只编译了一个tinyx,把XFree86 cut掉了。不过你如果愿意出一个错误改一个错误也是可以编译通过的,因为我在板子上只需要tinyx,所以就没有一点一点改了,直接编tinyx好了。xorg使用的是configure的方式,什么时候有时间用xorg编一个试试。
另外,编译tinyx在linux kernel2.4运行时出错。NR_KEY在2.4的内核中是128,在2.6的内核中是256,因此数组越界。在tinyx中把NR_KEYS设置为128就可以了。
还有如果在tinyx中新加一个硬件显卡的framebuffer驱动也比较麻烦。主要步骤如下:修改xfree86.cf文件;修改Xserver目录下的Imakefile文件;修改tinyx目录下的Imakefile文件;增加tinyx相应的驱动(在tinyx目录下增加驱动的目录和相应的文件)。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/37325/showart_381681.html |
|