您的位置:首页 > 其它

移植wxX11到开发板上

2012-05-18 12:25 148 查看
最近几天由于工作安排,要将wxX11程序移植到arm开发板上。一连工作了好几天,终于可以在板子上显示出一个“X”号,并且可以运行wxWidgets里面的程序,算是成功了。现就一些步骤总结如下。基本上跟网上说的差不多。

由于我们的开发所用的板子现在用不到tslib这样的触摸屏支持,所以这里没有编译。

㈠编译zlib-1.2.5

⒈export CC=arm-linux-gcc

⒉./configure --prefix=/path/to/install

--eprefix=/path/to/install

⒊make

⒋make install -k -i

⒌unset CC

㈡编译ncurses

⒈export CC=arm-linux-uclibc-gcc

⒉./configure --prefix=/path/to/install --host=arm-linux --target=arm-linux --with-build-cc=gcc --with-build-cpp=g++ --without-ada --enable-widec --with-normal

⒊make HOSTCC=gcc CXX=arm-linux-uclibc-g++ && make install

㈢编译tinyx

⒈下载七个压缩文件(当然也可以根据自己的需要下载)

⒉-解压缩

一定要使用命令解压,而且要分别解压。

tar -zxvf XFree86-4.8.0-src-1.tgz

tar -zxvf XFree86-4.8.0-src-2.tgz

tar -zxvf XFree86-4.8.0-src-3.tgz

tar -zxvf XFree86-4.8.0-src-4.tgz

tar -zxvf XFree86-4.8.0-src-5.tgz

tar -zxvf XFree86-4.8.0-src-6.tgz

tar -zxvf XFree86-4.8.0-src-7.tgz

⒊建立一个临时目录

cd xc/config/util/

make lndir

cp lndir /usr/local/bin/

和xc在同一个目录下建立一个文件夹

mkdir armtinyx

cd armtinyx

lndir ../xc/

⒋在 armtinyx/config/cf目录下修改cross.def文件并添加host.def文件(详细文件在下边,在cross.def中设置好你的编译器的路径,在host.def中设置好你的安装路径)

⒌在/armtinyx/lib/X11/Imakefile

    #if (BuildServersOnly || !BuildX11Lib) && !XnestServer && !BuildGLXLibrary && !BuildClients && !XdmxServer

    修改为

    #if (BuildServersOnly || !BuildX11Lib) && !XnestServer && !BuildGLXLibrary && !BuildClients && !XdmxServer && !TinyXServer

⒍make World

⒎make install

⒏将/path/to/install/目录下的文件拷到目标板上,然后设置一下环境变量export PATH=$PATH:/path/to/install/bin,然后运行

Xfbdev,会出现如下错误

Could not open RGB file "/usr/local/arm/X11R6/lib/X11/rgb.txt"; will use built-in copy.

这时,在自己电脑的linux系统上找一个rgb.txt拷到板子上相应的路径下就可以。

再次运行,会出现

Could not init font path element /home/wxX11/wxX11-arm/lib/X11/fonts/misc/, removing from list!

Could not init font path element /home/wxX11/wxX11-arm/lib/X11/fonts/TTF/, removing from list!

Could not init font path element /home/wxX11/wxX11-arm/lib/X11/fonts/Speedo/, removing from list!

Could not init font path element /home/wxX11/wxX11-arm/lib/X11/fonts/Type1/, removing from list!

Could not init font path element /home/wxX11/wxX11-arm/lib/X11/fonts/CID/, removing from list!

Could not init font path element /home/wxX11/wxX11-arm/lib/X11/fonts/75dpi/, removing from list!

Could not init font path element /home/wxX11/wxX11-arm/lib/X11/fonts/100dpi/, removing from list!

Fatal server error:

could not open default font 'fixed'

Can't deallocate console 2 errno 16

这时在电脑找到misc文件夹,拷到相应的目录

再次运行,板子上出现一个“X”,则运行成功

注:我是这方面的一个初学者,当我修改了tinyx里的源文件之后,可以进行make World,但是不能make install,不晓得是为什么。

㈣编译和运行wxX11

⒈下载wxWidgets源码包,目前的版本为2.8.12。

⒉解压缩并进入源代码目录
tar zxvf wxWidgets-2.8.12.tar.gz
cd wxWidgets-2.8.12

⒊几个export命令要设置一下(这是我当时的配置)

export PATH=$PATH:/buildroot/build_arm/staging_dir/bin

export CC=arm-linux-uclibc-gcc

export CXX=arm-linux-uclibc-g++

export CFLAGS="-I/home/wxX11/wxX11-arm/include"

export CXXFLAGS="-I/home/wxX11/wxX11-arm/include" 

export LDFLAGS="-L/home/wxX11/wxX11-arm/lib" 

export CPPFLAGS="-I/home/wxX11/wxX11-arm/include" 

⒋运行configure,这里用到的configure命令为:
./configure --prefix=/home/wxX11/wxX11-arm-static --host=arm-linux --target=arm-linux --build=i686-pc-linux --with-x11 --without-gtk --enable-no_rtti --enable-no_exceptions --disable-threads --disable-sockets --disable-joystick
--disable-mdi --disable-printarch --disable-postscript --disable-resources --disable-prologio --with-zlib=builtin --with-libpng=builtin --with-libjpeg=builtin --with-libtiff=builtin --disable-shared --enable-static X11_CFLAGS=" -I/home/wxX11/wxX11-arm/include/X11"
X11_LIBS="-L/home/wxX11/wxX11-arm/lib"

make

make install

⒌运行wxWidgets demo,这里的程序放在了sample目录下,这里有一些程序,只要进入相应的文件夹下,直接运行make就可以了,然后再生成的二进制可执行程序拷到板子上去运行,这里我们选checklst
cd samples/checklst
make 

将可执行程序checklst拷到目标板上

这里要注意,首先要在目标板上运行Xfbdev这一个程序,出现一个小十字架,然后再运行checklst程序。

这里要作如下设置:

首先设置目标板板上的两个环境变量:
export PATH=$PATH:/home/wxX11/wxX11-arm/bin,这里设的是Xfbdev这个程序的地址

然后
export DISPLAY=127.0.0.1:0

然后就可以运行我们的checklst程序,首先转到该程序所在的目录(我这里是/home)
cd /home
Xfbdev &
./checklst

这样,checklst程序就运行起来了。可以在目标板上插入鼠标对其进行操作。

附:

cross.def:

/* $XFree86: xc/config/cf/cross.def,v 1.3 2002/04/04 14:05:33 eich Exp $ */

/*

 * This file contains redefinitions of some symbols to enable

 * cross compilation: e.g. paths for include files and paths to

 * compiler images.  It will have to be edited to reflect these

 * given your local configuration.

 */

#if 1

#undef i386Architecture

#define Arm32Architecture

#undef OptimizedCDebugFlags

#define OptimizedCDebugFlags -O2

#define ServerCDebugFlags -O2

#undef StandardDefines

#define StandardDefines -Dlinux -D__arm__ -D_POSIX_SOURCE \
-D_BSD_SOURCE -D_GNU_SOURCE -DX_LOCALE

#undef CcCmd

#define StdIncDir /usr/include

#define PreIncDir /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include

/*

*#define StdIncDir /buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibc/3.4.2/include

*#define PreIncDir

*/

#undef PostIncDir

#define PostIncDir /buildroot/build_arm/staging_dir/lib/gcc/arm-linux-uclibc/3.4.2/include

#define CcCmd /buildroot/build_arm/staging_dir/bin/arm-linux-uclibc-gcc -L/buildroot/build_arm/staging_dir/lib -I/buildroot/build_arm/staging_dir/include

#undef CplusplusCmd

#define HasCplusplus YES

#define CplusplusCmd /buildroot/build_arm/staging_dir/bin/arm-linux-uclibc-g++

#define DoRanlibCmd YES

#define RanlibCmd /buildroot/build_arm/staging_dir/bin/arm-linux-ranlib

#undef ExtraLoadFlags

#define ExtraLoadFlags

#define FbNoPixelAddrCode

#undef TermcapLibrary

#define TermcapLibrary -L/home/wxX11/wxX11-arm/lib -lncurses

#define NCursesLibName -L/home/wxX11/wxX11-arm/lib -lncurses

#undef LdCmd

#define LdCmd /buildroot/build_arm/staging_dir/bin/arm-linux-ld

#undef LdPostLib

#define LdPostLib -L/buildroot/build_arm/staging_dir/lib

#undef ExtensionOSDefines

#define ExtensionOSDefines

#define ServerXdmcpDefines /**/

#define HostCcCmd  cc

#define GzipLibrary -L/home/wxX11/wxX11-arm/lib -lz

/*

#define HostCcCmd /usr/local/arm/3.4.5/bin/arm-linux-gcc -L/usr/local/arm/3.4.5/arm-linux/lib/ -I/usr/local/arm/3.4.5/arm-linux/include/

*/

#endif

#include <cross.rules>

host.def:

#define TinyXServer YES

#define TouchScreen NO

#define HasTsLib NO

#undef XfbdevServer

#define XfbdevServer YES

#define BuildServersOnly YES

#undef CrossCompiling

#define CrossCompiling YES

#define XF86Server NO

//=======================================

#ifndef HasNCurses

#define HasNCurses YES

#endif

#ifndef HasZlib

#define HasZlib YES

#endif

//=========================================================

#define XdmxServer NO

#define XnestServer 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 XVirtualFramebufferServer NO

#define XprtServer NO

#define BuildXprintClients NO

#define ProjectRoot /path/to/install

#define NothingOutsideProjectRoot YES

#define BuildLibraries YES

#define BuildDocs NO

#undef BuildRender

#define BuildRender YES

#define UseRgbTxt YES

#define OmitSnfSupport YES

#define HasMTRRSupport NO

#define UseX86Emu NO

#define BuildGlxExt NO

#define XF86INT10_BUILD X86INT10_STUB

#define XInputDrivers mouse keyboard
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息