• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 交叉編譯場景分析(arm-linux)(六)

    交叉編譯場景分析(arm-linux)(六)

    ——
    作者: 時間:2007-04-18 來源: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

     

    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 长治县| 汝城县| 吐鲁番市| 奉节县| 黄大仙区| 定安县| 罗田县| 赣榆县| 驻马店市| 景德镇市| 奎屯市| 万荣县| 岳西县| 亳州市| 大田县| 抚州市| 莱阳市| 邢台县| 孟州市| 鄂伦春自治旗| 罗山县| 许昌市| 岱山县| 上蔡县| 政和县| 伊川县| 浏阳市| 阿勒泰市| 滦平县| 和政县| 牡丹江市| 融水| 唐河县| 延津县| 大洼县| 于田县| 盐边县| 阿勒泰市| 巢湖市| 郴州市| 莱阳市|