交叉编译场景分析(arm-linux)(六)--编译TinyX

来源:互联网 发布:淘宝质量好的货架 编辑:程序博客网 时间:2024/05/21 06:47
交叉编译场景分析(arm-linux)(六)--编译TinyX
 
转载时请注明出处:http://blog.csdn.net/absurd
 
1.         基本信息:

软件名称
TinyX
功能简述
TinyX是一个针对嵌入式系统设计的X Window,相对PC版的X Window而言,它占用的资源要少很多,服务器程序仅700多K,客户端的动态库约2M(看你需要而定)多。
下载地址
http://www.xfree86.org
软件版本
XFree86-4.5.0-src-1.tgz
XFree86-4.5.0-src-2.tgz
XFree86-4.5.0-src-3.tgz
XFree86-4.5.0-src-4.tgz
XFree86-4.5.0-src-5.tgz
XFree86-4.5.0-src-6.tgz
XFree86-4.5.0-src-7.tgz
依赖关系
默认
readline
zlib
ncurses
前置条件
源文件位置:$(WORK_DIR)/xc

 
2.         过程分析
TinyX并不是一个独立的软件包,而是X Window的一种编译配置。X Window采用的imake配置方式,与autoconf不一样,你先要手工编译配置文件。在xc/config/cf/README文件里,有对各种选项详细的介绍。
 
修改这些配置文件是一种比较繁琐的事情,特别对于新手来说,往往要经历修改配置文件-编译-失败-再修改配置文件这个循环好几次。即使是对于有经验的人来说,一次搞定也并非那么容易。这个过程讲起来比较冗长,这里就不再多说,具体的配置文件可以参考构建处方。
 
按照BUILD.txt里的建议,我们决定建立一个临时目录,在这个临时目录里编译,避免破坏原始文件。实践证明这个建议很有用,因为很少第一次编译成功,重新编译时不用再去解压软件包,可以节省不少时间。
[root@linux cross]# cd xc/config/util/
[root@linux util]# make lndir
[root@linux util]# cp lndir /usr/local/bin/
[root@linux util]# cd -
[root@linux cross]# mkdir armtinyx
[root@linux cross]# cd armtinyx
[root@linux armtinyx]# lndir ../xc/
 
现在我们把配置文件和patch文件拷贝进来:
[root@linux armtinyx]# cp ../armtinyx.patch/* . -rf
 
编译:
[root@linux armtinyx] make World DESTDIR=$ROOTFS_DIR
 
出现下列错误:
/usr/local/arm-linux/lib/gcc/arm-linux/3.4.2/../../../../arm-linux/sys-include/sys/io.h:38: error: conflicting types for 'inb'
../../../../../programs/Xserver/hw/xfree86/common/compiler.h:1452: error: previous definition of 'inb' was here
/usr/local/arm-linux/lib/gcc/arm-linux/3.4.2/../../../../arm-linux/sys-include/sys/io.h:39: error: conflicting types for 'inw'
 
编辑armtinyx/programs/Xserver/hw/xfree86/common/compiler.h,删除outb之类的空函数。
重新编译:
[root@linux armtinyx] make
 
出现下列错误:
arm-linux-gcc: os/tiny/lbxio.o: No such file or directory
 
[root@linux armtinyx] cd programs/Xserver/os/tiny
[root@linux armtinyx] make lbxio.o
[root@linux armtinyx] cd -
[root@linux armtinyx] make
[root@linux armtinyx] make install DESTDIR=$ROOTFS_DIR
 
编译成功!
 
其它说明:
l         若是2.6的内核,你可能要修改NR_KEYS的值为128,否则programs/Xserver/hw/tinyx/linux/keyboard.c里有内存越界问题,造成无法运行。
l         若运行时,发现触摸屏不能使用,修改programs/Xserver/hw/tinyx/linux/tslib.c的数组TsNames,加入你使用的触摸屏设备文件。若还是不行,检查一下tslib需要的环境变量是否设置正确。
 
 
3.         构建处方
l         armtinyx.mk
ARMTINYX_PATCH_DIR=armtinyx.patch
XC_DIR=xc
 
all: clean config build
 
config:
    cd xc/config/util && make lndir && cp -f lndir /usr/bin
    rm -rf $(ARMTINYX_DIR)
    mkdir $(ARMTINYX_DIR)
    cd $(ARMTINYX_DIR) && lndir ../xc
    cp -rvf $(ARMTINYX_PATCH_DIR)/* $(ARMTINYX_DIR)
    echo "config done"
   
build:
    @cd $(ARMTINYX_DIR) && /
    make World DESTDIR=$$ROOTFS_DIR && make install && /
    cd programs/Xserver/os/tiny && make lbxio.o && cd - && /
    make && /
    make install && /
    echo "build done"
 
clean:
    rm -rf $(ARMTINYX_DIR)
    echo "clean done"
l         armtinyx.patch/config/cf/cross.def
#undef Arm32Architecture
#undef i386Architecture
#undef Arm32Architecture
#undef Arm32Architecture
 
#define Arm32Architecture
 
#undef OptimizedCDebugFlags
 
#define OptimizedCDebugFlags    -Os
#define ServerCDebugFlags   -Os
#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
 
#define PreIncDir
#undef PostIncDir
#undef CcCmd
#define CcCmd arm-linux-gcc -I$(ROOTFS_DIR)/usr/include/ncurses -I$(ROOTFS_DIR)/usr/include
#undef HasCplusplus
#define HasCplusplus NO
#undef CplusplusCmd
#define CplusplusCmd NO
#define DoRanlibCmd YES
#define RanlibCmd arm-linux-ranlib
#undef ExtraLoadFlags
#define ExtraLoadFlags
#define FbNoPixelAddrCode
#undef TermcapLibrary
#define TermcapLibrary -L$(ROOTFS_DIR)/usr/lib -lncurses
#define NCursesLibName -L$(ROOTFS_DIR)/usr/lib -lncurses
#undef LdPostLib
#undef LdCmd
#define LdCmd arm-linux-ld
 
#undef ExtensionOSDefines
#define ExtensionOSDefines
 
#define ServerXdmcpDefines
 
#define GzipLibrary -L$(ROOTFS_DIR)/usr/local/lib -lz
 
#include <cross.rules>
 
l         armtinyx.patch/config/cf/host.def
#define KDriveXServer       YES
#define TinyXServer     YES    
#define XfbdevServer        YES
#define CrossCompiling      YES
#define ProjectRoot             /usr/X11R6
#define NothingOutsideProjectRoot   YES
 
#define HasFreetype2        NO 
#define HasFontconfig       NO
#define HasLibpng       NO     
#define HasZlib         NO     
 
#define HasExpat        NO     
#define BuildXprintClients NO
#define TouchScreen     YES
#define HasTsLib        YES   
#define BuildDocs       NO    
#define BuildXF86DRI        NO
#define BuildGlxExt     NO    
#define BuildOSMesaLib      NO
#define BuildLowMem     NO    
#define BuildIPv6       NO    
 
#define HasMTRRSupport          NO
#define UseX86Emu               NO
#define XF86INT10_BUILD         X86INT10_STUB
#define BuildAppgroup           NO
#define BuildDBE                NO
#define BuildLBX                NO
#define HasMTRRSupport          NO
#define UseX86Emu               NO
#define XF86INT10_BUILD         X86INT10_STUB
#define BuildAppgroup           NO
#define BuildDBE                NO
#define BuildLBX                NO
 
#define BuildFonts              YES
#undef BuildXF86RushExt
#define BuildXF86RushExt        NO
#undef BuildRender
#define BuildRender             YES
#define UseRgbTxt               YES
#define BuildFontServer         NO
#define BuildClients            NO
#define BuildFonts              YES
#undef BuildXF86RushExt
#define BuildXF86RushExt        NO
#undef BuildRender
#define BuildRender             YES
#define UseRgbTxt               YES
#define BuildFontServer         NO
#define OmitSnfSupport          YES
#define XdecMultiDepthServer 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 XF86CardDrivers         fbdev
#define XInputDrivers       mouse keyboard
 
 
原创粉丝点击