[原]移植wxX11到开发板上

2012-5-18阅读467 评论0

最近几天由于工作安排,要将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

在将wxX11里在程序在arm板子上运行之后,我们发现那上面的程序运行的时候没有边框和标题栏。于是我们就找这方面的解决方法。首先在tinyx里找到了一个窗口管理器twm,当把twm交叉编译完以后,拷到板子上运行,发现在那上面是可以运行的。运行时首先要开启Xfbdev服务器,然后设置好变量DISPLAY,之后twm就可以在那上面运行了。然后我们又做了一些配置工作,比方说板子上的字体的配置等。就是我们要在上面修改twm的源代码,给这个窗口管理器增加关闭按钮的时候,发现基于X的窗口管理器还有很多。于是我们尝试了几个,经历了几番编译失败之后,选择了使用blackbox(这是唯一一个可以编译成功的)。
 
  //编译twm窗口管理器时所用的命令
 arm-linux-uclibc-gcc -o twm twm.c add_window.c cursor.c events.c gc.c iconmgr.c icons.c list.c menus.c parse.c resize.c session.c util.c version.c  -I/home/wxX11/wxX11-arm/include -L/home/wxX11/wxX11-arm/lib -lX11 -lz -lXext -ldl -lm -fno-exceptions -Wall -Wundef /home/wxX11/wxX11-arm/lib/libX11.so /home/wxX11/wxX11-arm/lib/libXau.a /home/wxX11/wxX11-arm/lib/libXdmcp.a /home/wxX11/wxX11-arm/lib/libXext.so /home/wxX11/wxX11-arm/lib/libXpm.so /home/wxX11/wxX11-arm/lib/libXmu.so /home/wxX11/wxX11-arm/lib/libXmuu.so /home/wxX11/wxX11-arm/lib/libICE.so /home/wxX11/wxX11-arm/lib/libXt.so.6 /home/wxX11/wxX11-arm/lib/libSM.so.6
 
 编译时使用的命令为(这里不使用the X font library,否则编译会出错)
 ./configure --prefix=/home/wxX11/wxX11-arm --host=arm-linux --target=arm-linux --build=i686-pc-linux --disable-shared --enable-static --with-x --enable-xft=no --enable-nls=no CC=arm-linux-uclibc-gcc CXX=arm-linux-uclibc-g++ CFLAGS=-I/home/wxX11/wxX11-arm/include CXXFLAGS=-I/home/wxX11/wxX11-arm/include LDFLAGS=-L/home/wxX11/wxX11-arm/lib CPPFLAGS=-I/home/wxX11/wxX11-arm/include --x-libraries=/home/wxX11/wxX11-arm/lib --x-includes=/home/wxX11/wxX11-arm/include
 
 make
 
 make install
 
 然后在板子上运行,发现这个窗口管理器是要比twm好多了,我觉得这上面的功能足够我们使用的了。
 
 这里还是要对它进行配置。
 
 因为在编译的时候没有使用the X font library,所以就使用了系统默认的X LOGICAL FONT DESCRIPTION (XLFD)
 
 http://blog.tianya.cn/blogger/post_read.asp?BlogID=1037681&PostID=14142861
 
 上面的这个网页对这种字体的介绍如下
 
 X LOGICAL FONT DESCRIPTION (XLFD)
   *XLFD*
  XLFD 是 X 中使用的包括字体大小,字符集等信息的字体名。格式如下:
  
  FOUNDRY-FAMILY-WEIGHT-SLANT-WIDTH-STYLE-PIXEL-POINT-X-Y-SPACE-AVE-CR-CE
  
  每个字段的意思是:
  - FOUNDRY: FOUNDRY 字段,编写字体的公司名称。
  - FAMILY: FAMILY_NAME 字段,基本的字体族名称 (helvetica、gothic、times 等等)
  - WEIGHT: WEIGHT_NAME 字段,字母的粗细。(浅 light、中等 medium、粗 bold 等)
  - SLANT: SLANT 字段。
   r: 罗马体 Roman (没有倾斜度)
   i: 斜体 Italic
   o: 倾斜体 Oblique
   ri: 反向斜体 Reverse Italic
   ro: 反向倾斜体 Reverse Oblique
   ot: 其他
   number: 可缩放字体
  - WIDTH: SETWIDTH_NAME 字段,字符宽度 (正常 normal、压缩 condensed、窄
   narrow、双宽度 double wide 等)
  - STYLE: ADD_STYLE_NAME 字段,字体的额外信息 (Serif、Sans-Serif、
   Informal、Decorated 等等)。
  - PIXEL: PIXEL_SIZE 字段,字体以像素计的高度。
  - POINT: POINT_SIZE 字段,10 倍字体以 point 数计的高度。
  - X: RESOLUTION_X 字段,X 的位数 (每英寸多少点)
  - Y: RESOLUTION_Y 字段,Y 的位数 (每英寸多少点)
  - SPACE: SPACING 字段
   p:比例 (Proportional)
   m:等宽 (Monospaced)
   c:等宽等高 (CharCell)
  - AVE: AVERAGE_WIDTH 字段,10 倍字体的以像素计的宽度。
  - CR: CHARSET_REGISTRY 字段。字符集的组名。
  - CE: CHARSET_ENCODING 字段。字符集名的其余部分。对有些字符集,比如 JIS
   X 0208,来说,如果该字段为 0,编码点 (code point) 取 GL 的值, 若
   为 1,则取 GR 的值。
  
  举个例子,设置大小为 14,对应 JIS X 0208 编码,可以写成以下格式
   -misc-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1990-0
  
  
  X FONTSET
   *fontset* *xfontset*
  单字节字符通常只用一个字体,而对多字节来讲,经常用到字体的组合,这意味着一组字
  符使用了一种字体,而另一组字符使用别的字体 (也许是双宽度),字体的集合就叫做字
  体集 (fontset)。
  
  字体集里的字体依赖于你系统的 locale,X windows 维护着这个 locale 所需要的字符
  组信息的表,你需要在 'guifontset' 里指定 locale 所需要的全部字体。
  
  备注: 字体集总是使用当前的 locale,即使 'encoding' 已设置成另一种编码。在那种
  情况下,你要设置 'guifont' 和 'guifontwide' 而不是 'guifontset'。
  
  例如:
   |charset| 语言 "字符组"
   GB2312 中文 (简体) ISO-8859-1 及 GB 2312
   Big5 中文 (繁体) ISO-8859-1 及 Big5
   CNS-11643 中文 (繁体) ISO-8859-1、CNS 11643-1 及 CNS 11643-2
   EUC-JP 日语 JIS X 0201 及 JIS X 0208
   EUC-KR 韩语 ISO-8859-1 及 KS C 5601 (KS X 1001)
  
  
  你可以用 xlsfonts 命令来查找字体,例如,你需要找 KS C 5601 的一种字体:
   xlsfonts | grep ksc5601
  
  这个比较复杂,也令人迷惑,也许你需要阅读 X-Windows 的文档,它可以帮助你理解你
  不懂的地方。
  
   *base_font_name_list*
  当你找到你所需要的字体以后,你就可以通过设置 'guifontset' 来设置字体。要使用一
  系列的字体,你可以用逗号把它们隔开。
  
  例如,如果你要使用 ja_JP.eucJP locale,你需要 JIS X 0201 和 JIS X 0208。你可以
  提供显式指定字符集的字体列表,就像这样:
  
   :set guifontset=-misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0,
   \-misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0
  
  另外,你也可以设置一个省略编码名的基本字体名列表,让 X-Windows 选择 locale 所
  需要的字体字符。例如:
  
   :set guifontset=-misc-fixed-medium-r-normal--14-130-75-75-c-140,
   \-misc-fixed-medium-r-normal--14-130-75-75-c-70
  
  另外,你也可以提供单个基本字体名,让 X-Windows 选择系统可用的所有字体,例
  如:
  
   :set guifontset=-misc-fixed-medium-r-normal--14-*
  
  另外,你也可以指定字体别名,请参考 fonts 目录下的 fonts.alias 文件 (例如,
  /usr/X11R6/lib/X11/fonts)。例如:
  
   :set guifontset=k14,r14
  
   *E253*
  在东亚字体中,正规的字符单元是正方形,当你混合 Latin 字体和东亚字体的时候,东
  亚字体的宽度应该是 Latin 字体的两倍。
  
  如果 'guifontset' 不为空,|:highlight| 命令的 "font" 参数也被解释为字体集。例
  如,你可以设置高亮显示:
   :hi Comment font=英文_字体,你的_字体
  如果你使用了一个错误的 "font" 参数,你会收到错误信息。
  也要确定你在设置高亮组的字体之前设置 'guifontset'。

在板子上可以使用的两种字体为:
-adobe-helvetica-bold-r-normal--30-120-75-75-m-60-hp-roman8
-adobe-courier-bold-o-normal--30-100-75-75-m-60-hp-roman8

wxX11移植到arm板上相关推荐

  1. wxX11移植到arm板上(序)

    在将wxX11里在程序在arm板子上运行之后,我们发现那上面的程序运行的时候没有边框和标题栏.于是我们就找这方面的解决方法.首先在tinyx里找到了一个窗口管理器twm,当把twm交叉编译完以后,拷到 ...

  2. 最新版ser2net移植到ARM板上,交叉编译

    这个是ser2net源码http://sourceforge.net/projects/ser2net/files/latest/download ser2net是我在玩openwrt时接触的,当时用 ...

  3. 移植c语言算法到arm上,μCOS-II移植到ARM处理器上的几个要点

    原标题:μCOS-II移植到ARM处理器上的几个要点 本文主要介绍μCOS-II移植到ARM处理器上的几个要点,如下所示: uCOS II在ARM处理器上移植过程中的中断处理 uCOS II是一个源码 ...

  4. Qt——用在ARM板上的Mplayer(1.3.0,1.0rc4)安装编译步骤!还有,Mplayer背景抖动闪烁问题解答,终于来了!

    注意:若转载,请贴上链接"https://blog.csdn.net/qq_41042595/article/details/112308184",如若发现抄袭或未标明来源现象,都 ...

  5. Qt程序在arm板上运行

    1.Qt中的库需要拷贝到arm板上: 2.配置环境变量,参考该文. 总结: 1.可执行程序在终端中运行前,需要配置好环境变量,我们用export的形式配置的,这种形式只在当前终端中生效(因为,如果我们 ...

  6. Opencv3.2移植到arm板

    注:博客中有些图片部分为了省事,借用了别人博客的图片,相关部分注意事项相同.若有侵权,请联系删除! 一,Opencv3.2移植到arm Opencv3.2 ubuntu16.04 目标板:飞凌嵌入式i ...

  7. 【教程】制作能在ARM板上直接运行的gcc本地编译器

    编译好的程序的下载链接:百度网盘 请输入提取码(提取码:ocmm) 概述 通常情况下,我们是在电脑里面开一个Linux虚拟机, 在虚拟机里面用交叉编译工具链编译好可执行文件后,将可执行文件拷贝到板子里 ...

  8. 手把手教你在ARM板上写一个驱动程序!

    摘要:搞嵌入式有两个方向,一个是嵌入式软件开发(MCU方向),另一个是嵌入式软件开发(Linux方向).其中MCU方向基本是裸机开发和RTOS开发.而Linux开发方向又分为驱动开发和应用开发.其中应 ...

  9. 基于I-MX287A的mqtt远程控制ARM板上LED灯小项目总结

    最近在学linux嵌入式技术,自己做了一个在周立功的I-MX287A开发板上实现的,基于MQTT远程控制的小项目,其中用到了一些比较好玩和有趣的技术,在这里自己记录分享一下. 额,让我想想该从和处开始 ...

最新文章

  1. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
  2. 交叉熵损失函数数学推导
  3. java链表实现_数据结构——基于java的链表实现(真正理解链表这种数据结构)...
  4. 解析“60k”大佬的19道C#面试题(下)
  5. tkinter 菜单添加事件_Tasker的最新测试劫持了Android 11的电源菜单
  6. 将DataFrame格式的数据存入到mysql数据库中
  7. 1011.log4cplus移植记录
  8. HTML5的input color系统颜色选择器
  9. android开发那些事儿(三)--manifest文件中uses-sdk和project中target详解
  10. Centos7.4源码搭建zabbix3.4.11企业级监控
  11. R语言读取Excel的神器——openxlsx
  12. python实现模糊综合评价法(FCE)
  13. html 取色器插件,jQuery拾色器插件bigcolorpicker
  14. 两个理想的90°电桥构成的非线性平衡电路
  15. 昇腾AI室外移动机器人原理与应用(二 初识室外移动机器人)
  16. 计算机开机检测dhcp,电脑开机显示dhcp是什么意思
  17. 新版RTSP协议网络摄像头网页无插件直播平台EasyNVR如何自定义通道的背景音乐?
  18. LCD1602的使用详解
  19. 求解关系模式R的候选码
  20. 教育网校搭建哪个好?

热门文章

  1. 锂离子电池健康状态估计简介(一):基于Python的数据处理计算SOH,RUL,CCCT,CVCT
  2. java任务系统设计_任务调度系统-任务依赖的设计
  3. 傻瓜式使用SpringSecurity完成前后端分离+JWT+登录认证+权限控制
  4. 梦幻仙缘剧情java_梦幻仙缘新春赚红包版
  5. Kubernetes学习之Helm包管理器
  6. 搜狗输入法繁简体切换
  7. 《模型思维》—— 斯科特.佩奇
  8. 1124——Vue+SpringBoot+Mybatis的简单员工管理项目
  9. 关于OC取名循环渐进的申明
  10. 图像处理之水彩画特效生成算法