交叉編譯場景分析(arm-linux)(六)
1. 基本信息:
軟件名稱
TinyX
功能簡述
TinyX是一個針對嵌入式系統(tǒng)設計的X Window,相對PC版的X Window而言,它占用的資源要少很多,服務器程序僅700多K,客戶端的動態(tài)庫約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文件里,有對各種選項詳細的介紹。
修改這些配置文件是一種比較繁瑣的事情,特別對于新手來說,往往要經歷修改配置文件-編譯-失敗-再修改配置文件這個循環(huán)好幾次。即使是對于有經驗的人來說,一次搞定也并非那么容易。這個過程講起來比較冗長,這里就不再多說,具體的配置文件可以參考構建處方。
按照BUILD.txt里的建議,我們決定建立一個臨時目錄,在這個臨時目錄里編譯,避免破壞原始文件。實踐證明這個建議很有用,因為很少第一次編譯成功,重新編譯時不用再去解壓軟件包,可以節(jié)省不少時間。
[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 若運行時,發(fā)現觸摸屏不能使用,修改programs/Xserver/hw/tinyx/linux/tslib.c的數組TsNames,加入你使用的觸摸屏設備文件。若還是不行,檢查一下tslib需要的環(huán)境變量是否設置正確。 {{分頁}}
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操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論