交叉編譯場(chǎng)景分析(arm-linux)(六)
1. 基本信息:
軟件名稱
TinyX
功能簡(jiǎn)述
TinyX是一個(gè)針對(duì)嵌入式系統(tǒng)設(shè)計(jì)的X Window,相對(duì)PC版的X Window而言,它占用的資源要少很多,服務(wù)器程序僅700多K,客戶端的動(dòng)態(tài)庫(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
依賴關(guān)系
默認(rèn)
readline
zlib
ncurses
前置條件
源文件位置:$(WORK_DIR)/xc
2. 過(guò)程分析
TinyX并不是一個(gè)獨(dú)立的軟件包,而是X Window的一種編譯配置。X Window采用的imake配置方式,與autoconf不一樣,你先要手工編譯配置文件。在xc/config/cf/README文件里,有對(duì)各種選項(xiàng)詳細(xì)的介紹。
修改這些配置文件是一種比較繁瑣的事情,特別對(duì)于新手來(lái)說(shuō),往往要經(jīng)歷修改配置文件-編譯-失敗-再修改配置文件這個(gè)循環(huán)好幾次。即使是對(duì)于有經(jīng)驗(yàn)的人來(lái)說(shuō),一次搞定也并非那么容易。這個(gè)過(guò)程講起來(lái)比較冗長(zhǎng),這里就不再多說(shuō),具體的配置文件可以參考構(gòu)建處方。
按照BUILD.txt里的建議,我們決定建立一個(gè)臨時(shí)目錄,在這個(gè)臨時(shí)目錄里編譯,避免破壞原始文件。實(shí)踐證明這個(gè)建議很有用,因?yàn)楹苌俚谝淮尉幾g成功,重新編譯時(shí)不用再去解壓軟件包,可以節(jié)省不少時(shí)間。
[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/
現(xiàn)在我們把配置文件和patch文件拷貝進(jìn)來(lái):
[root@linux armtinyx]# cp ../armtinyx.patch/* . -rf
編譯:
[root@linux armtinyx] make World DESTDIR=$ROOTFS_DIR
出現(xiàn)下列錯(cuò)誤:
/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之類的空函數(shù)。
重新編譯:
[root@linux armtinyx] make
出現(xiàn)下列錯(cuò)誤:
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
編譯成功!
其它說(shuō)明:
l 若是2.6的內(nèi)核,你可能要修改NR_KEYS的值為128,否則programs/Xserver/hw/tinyx/linux/keyboard.c里有內(nèi)存越界問(wèn)題,造成無(wú)法運(yùn)行。
l 若運(yùn)行時(shí),發(fā)現(xiàn)觸摸屏不能使用,修改programs/Xserver/hw/tinyx/linux/tslib.c的數(shù)組TsNames,加入你使用的觸摸屏設(shè)備文件。若還是不行,檢查一下tslib需要的環(huán)境變量是否設(shè)置正確。 {{分頁(yè)}}
3. 構(gòu)建處方
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 {{分頁(yè)}}
#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不再難懂)
評(píng)論