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

来源:互联网 发布:java测试书籍推荐 知乎 编辑:程序博客网 时间:2024/05/21 21: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
  
  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
  
  
  
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=646984

本文转自
http://blog.csdn.net/absurd/archive/2006/04/01/646984.aspx
原创粉丝点击