日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wxX11移植到arm板上

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wxX11移植到arm板上 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[原]移植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板上的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。