Minigui在ARM开发板上的移植过程
- 格式:pdf
- 大小:21.35 KB
- 文档页数:4
Helper2416开发板移植minigui3.0.12之一:让PC运行minigui笔者最近有时间学习嵌入式linux,于是熟悉了一下基本操作之后,选定了移植minigui作为一个练习。
看了看官网说明,移植过程挺简单的,但整整三天之后,开发板首次显示出minigui版的helloworld。
第一阶段:PC运行minigui这个工作是一定要做的,因为minigui同其他GUI程序开发类似,都是先在PC上编程、调试、模拟,成型之后再交叉编译灌入嵌入式设备。
Helper2416开发板随机所带的虚拟机fedora12已经安装好了交叉编译链、zlib库,png库,jpeg库等,使移植工作大为简化。
此文也不涉及到这几个库的移植,相关方法在手册4.6节有详述,网上文章也未提及移植这几个库出什么问题。
一. 搞定qvfbqvfb是QT的一个附属程序,可以单独运行,跟minigui本身没什么联系,只是minigui可以拿它当作在PC上运行时的模拟屏幕。
qvfb大致有以下几个获取方式。
1. minigui官网有一个qvfb2-2.0.tar.gz程序包,编译这个包需要Qt3的库。
Qt3的库可以从QT官网下载编译。
2.Helper2416开发板随机提供了qtopia和Qt4的源码。
按手册 4.6节编译完qtopia之后,.../qtopia-2.2.0/qt2/bin/qvfb便是qvfb的可执行文件。
将此文件拷入PATH路径,然后用$lddqvfb命令查看一下所依赖的库,在.../qtopia-2.2.0/qt2/lib目录中找到相应的库,拷入/lib目录。
此时命令行直接输入$qvfb即可看到窗口界面。
3.对于Qt4,按手册4.7节编译完之后并不会自动生成qvfb可执行文件,需要单独进行编译。
网上的参考步骤是:(1).复制…/qt-everywhere-opensource-src-4.7.2/tools/shared/deviceskin.h,deviceskin.cpp两个文件到…/qt-everywhere-opensource-src-4.7.2/tools/qvfb目录下(2). 在qvfb文件夹下手动生成qvfb工程,即$qmake-project,生成qvfb.pro(3). $qmake,生成Makefile(4). 手动修改Makefile 中LIBS 选项:末尾添加-lXtst(5). $make即可得到可执行文件qvfb按照这个步骤可以编译得到qvfb,但笔者实测发现Qt4编译出来的qvfb运行minigui程序时鼠标不正常,而qtopia的qvfb鼠标正常。
MiniGUI3.0.12及组件下载地址/downloads/index.html libmgplus-1.2.4下载地址/download/yong_f/40628071. 需要下载的组件libminigui-gpl-3_0_12.tar.gzmg-samples-3_0_12.tar.gzfreetype-1_3_1.tar.gzjpegsrc_v7.tar.gzlibpng-1_2_37.tar.gzminigui-res-be-3_0_12.tar.gzzlib-1_2_2.tar.gzqvfb2-2.0libmgplus-1.2.4(可以在csdn上下载到)(qvfb所需要的包)libqt3-mtlibqt3-mt-devalienqt-devel-3.3.8-4.fc7.i386.rpm2.安装各组件<1>libminigui-gpl-3_0_12.tar.gz(库)./configure --prefix=/usr/local --enable-qvfbial --disable-splash --disable-screensaver sudo makesudo make install<2>minigui-res-be-3_0_12.tar.gz(资源包)./configure --prefix=/usr/localsudo makesudo make install<3>freetype-1_3_1.tar.gz./configure --prefix=/usr/localsudo makesudo make install(在安装时会有ftdump.c的预处理标识符错误,修改./test/ftdump.c里的Print_Mem( memory_footprint.##field, string )改为: Print_Mem( memory_footprint.field, string )#define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )修改为:#define FOOTPRINT( field ) Save_Memory( &memory_footprint.field )<4>安装PNG库./configure --prefix=/usr/localsudo makesudo make install<5>安装JPEG库./configure --prefix=/usr/local --enable-sharedsudo makesudo make install<6>安装zlib库./configure --prefix=/usr/localsudo makesudo make install<7>libmgplus-1.2.4./configure --prefix=/usr/localsudo makesudo make install将/usr/local/lib加入到.bashrc中<8>安装qvfb2(因为需要qt-3.3作支持,所以需要先安libqt3-mt,libqt3-mt-dev,下载qt-devel-3.3.8-4.fc7.i386.rpm,然后用alien转为deb,再用dpkg -i --force-overwrite 来安装此包) sudo apt-get install libqt3-mtsudo apt-get install libqt3-mt-devsudo apt-get install aliensudo alien qt-devel-3.3.8-4.fc7.i386.rpmdpkg -i --force-overwrite qt-devel-3.3.8-4.fc7.i386.deb(开始安qvfb)cd qvfb2-2.0./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3sudo makesudo make install(qvfb2与1不同,没有文件输入是不会显示出框图的)<9>修改MiniGUI.cfg[system]# GAL engine and default optionsgal_engine=pc_xvfb(修改此处)defaultmode=640x480-16bpp(修改此处)# IAL engineial_engine=qvfbmdev=/dev/input/micemtype=IMPS2[fbcon]defaultmode=1024x768-16bpp[qvfb]defaultmode=640x480-16bppwindow_caption=QVFB-for-MiniGUI-3.0exec_file=/usr/local/bin/qvfbdisplay=0#{{ifdef _MGGAL_PCXVFB[pc_xvfb]defaultmode=640x480-16bppwindow_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)exec_file=/usr/local/bin/qvfb2(修改此处)display=0#}}<10>mg-samples-3.0.12 并运行./configure --prefix=/usr/localsudo makesudo make install./same/same问题1:执行示例出现Wrong JPEG library version: library is 70, caller expects 62原因:在编译libminigui的时候用的库是62,而在编示例时用的是70,导致版本不对解决办法:将/usr/lib/libjpeg.so /usr/local/libjpeg.so.62 全指向libjpeg.so.7.0.0 然后修改/usr/include/jpeglib.h 中的版本号为70,然后重新编译libminigui(若是坚持用libjpeg7的话用此办法)(关于miniGUI在2440上的移植会在下篇更新)以下是关于minigui的移植,认为是最详细的一篇,经本人实验也已经成功,转自/forum/showtopic-3899.aspx采用交叉编译方式【软件环境】PC:ubuntu 10.04开发板:Linux 2.6.32.2@2440Target: arm-none-linux-gnueabigcc version 4.4.3编译minigui3.0并移植需要的文件有(基本上都是比较新的版本,有些库文件在我尝试后还是选择了比较旧的版本):FreeType库:minigui字体引擎freetype-1_3_1.tar.gzJPEG库:minigui显示jpeg图片jpegsrc.v8c.tar.gzpng库:minigui显示png图片libpng-1.0.59.tar.gzzlib库:minigui数据压缩函数库zlib-1.2.6.tar.gzminigui所用到的资源minigui-res-be-3_0_12.tar.gzminigui核心库libminigui-gpl-3_0_12.tar.gzminigui样例mg-samples-3_0_12.tar.gzStep1:建立工作目录,如/home/profiles/minigui,将上述*.tar.gz放入该目录,并解压tar xzf freetype-1_3_1.tar.gztar xzf jpegsrc.v8c.tar.gztar xzf libpng-1.0.59.tar.gztar xzf zlib-1.2.6.tar.gztar xzf minigui-res-be-3_0_12.tar.gztar xzf libminigui-gpl-3_0_12.tar.gztar xzf mg-samples-3_0_12.tar.gzStep2:[编译Freetype库]cd freetype-1.3.1/(A)./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui修改Makefile第12行all: ttlib ttest ttpo为all: ttlib ttpo第34行注释(或删)掉,即#cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install 否则make就会出现下面的错误ftdump.c:172:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:182:1: error: pasting "." and "first_instance" does not give a valid preprocessing tokenftdump.c:191:1: error: pasting "." and "second_instance" does not give a valid preprocessing tokenftdump.c:201:1: error: pasting "." and "face_object" does not give a valid preprocessing tokenftdump.c:202:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:203:1: error: pasting "." and "second_instance" does not give a valid preprocessing token(B)make(C)make install[编译JPEG库]cd jpeg-8c/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar如(后面的库的编译修改configure亦如此):## M4sh Initialization. #### -------------------- ### Be more Bourne compatibleCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arDUALCASE=1; export DUALCASE # for MKS shif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux --enable-shared(C)make(D)make install[编译PNG库]cd libpng-1.0.59/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make(D)make install[编译zlib库]cd zlib-1.2.6/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --shared(C)make(D)make install[编译资源库]cd minigui-res-be-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui(C)make(D)make install[编译核心库]cd libminigui-gpl-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(此处要特别注意,我用的编译器所在目录为/opt/FriendlyARM/toolschain/4.4.3,注意跟自己环境的差异,下面的示例库编译亦然)(B)./configure --prefix=/usr/local/minigui --host=arm-linux \--target=arm-linux --build=i386-linux --with-osname=linux \--with-style=classic --with-targetname=fbcon --enable-autoial \--enable-rbf16 --disable-vbfsupport --enable-tslibial(上面的--enable-tslibial选项是minigui支持触摸屏必选的选项,后面会讲到)(C)make(D)make install[编译示例库]cd mg-samples-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make这里应该会出错,是因为Makefile里的参数不对,程序找不到链接库,这么多Makefile,需要修改哪一些呢?查看根目录下的Makefile(vi Makefile),(line 204)会发现:COMMON_SUBDIRS = same graphics housekeeper minesweeper ctrl_dlg \lf_skin font_text look_feel dbuff notebook same graphics ... notebook这几个目录会按顺序依次被make,查看刚才出错的信息,肯定是same首先没被编译通过。
移植minicom到ARM开发板(转)最近调试自己做的S5PV210的底板上面的串口。
因为为了测试一个串口而写程序很麻烦。
所以,直接移植了一个minicom到开发板上面。
这样就可以直接进行串口收发了。
特别是在我需要同时测试多个串口的时候,比写程序来得快。
不多废话了,下面看操作流程。
第一步:需要交叉编译ncurses,否则minicom不能编译。
直接去官网下载。
地址不发。
新建一个文件叫run,然后增加可执行属性,最后在其中加入如下配置./configure CC=arm-linux-gcc --prefix=/opt/4.3.2/arm-none-linux-gnueabi --host=arm-linux CPPFLAGS=-I/opt/4.3.2/arm-none-linux-gnueabi/includeLDFLAGS=-L/opt/4.3.2/arm-none-linux-gnueabi/libmake讲解下:--prefix=/opt/4.3.2/arm-none-linux-gnueabi 红字为编译完成之后安装的地址,建议直接选择你的交叉编译器对应的位置,免得出错很麻烦,我这个就是交叉编译器的路径CPPFLAGS=-I/opt/4.3.2/arm-none-linux-gnueabi/include 红字为编译过程中需要的引用的路径,其实就是交叉编译器路径下面的includeLDFLAGS=-L/opt/4.3.2/arm-none-linux-gnueabi/lib 红字为引用的库路径,意义同上输入保存之后./run即可完成配置编译的操作,最后make install,建议先sudo su切换成root之后再操作,否则有可能会有麻烦,一些环境改变导致的麻烦。
第二步:交叉编译完成ncurses之后,就是交叉编译minicom,自己去官网下载最新版代码,解压缩后,把上面的run拷贝到新目录。
移植相关的几个主要文件如下。
● include/configs/smdk2440.h:该文件为与本板子相关的头文件。
● board/smdk2440/smdk2440.c:该文件为目标板的初始化文件。
其中主要定义如下函数:int board_init (void),板级初始化函数;int dram_init (void),SDRAM初始化函数。
● board/smdk2440/Flash.c:该文件为板子上Flash驱动程序。
● cpu/ARM920t/serial.c:该文件为串口驱动程序。
● drivers/dm9000.c:以太网卡(DM9000)驱动程序。
● drivers/sm501.c:显示芯片(SM501)驱动程序。
因为U-Boot本身不带SM501的驱动,必须自己编写,其编写方式和Linux下类似。
下面是U-Boot的编译过程。
#make smdk2440_config#make编译成功后,在u-boot-2016.05目录下生成u-boot.bin文件,这个文件就是u-boot映像文件,将该文件复制到本地电脑的/tftpboot目录下,通过网口就能将其烧写到板载Flash中(第一次烧写需要使用烧写板或者仿真器)。
15.2.2 嵌入式Linux移植移植内核的时候有两个地方需要注意:一是文件系统,二是控制台。
内核配置菜单选项中File system→对应的就是文件系统。
文件系统所涉及的内容较多,一般在默认配置的基础上进行修改。
因为在调试阶段需要使用网络文件系统(NFS),所以这里必须加上对NFS的支持。
内核配置菜单选项中Console drivers→对应的就是控制台驱动。
控制台驱动主要和显示有关,因为显示超声动态图像需要用得到FrameBuffer,所以这里选择对FrameBuffer的支持。
在完成对Linux内核配置以后,内核仍然以源代码形式存在,不能直接下载到嵌入式系统运行,因此,需要对内核进行编译,生成最终可以在嵌入式系统上运行的可执行代码。
Minigui在ARM开发板上的移植过程一、题外话:为了感谢国人在开源世界颇具影响力的为数不多Minigui的开发者们的辛勤劳动(希望为数不多这个这个词若干年后我们不再提^_^),也为答谢飞漫公司和魏永明先生对开源项目在中国的运作模式的有意义的探索, 也为自己在感慨、敬佩之余尽一点微波之力,就将借工作之便并参考众多网友的体会,将一点移植心得整理出来,希望公司不介意。
考虑到每个人接触linux的起点不同,所以下文档按步就班说得比较详细(说得不好听点是罗嗦,^_^,如果您熟悉相关部分,请略过,希望不要当面说俺写的罗嗦,呵).二、特别声明:本文的移植过程主要以minigui1.2.3为基础。
本文中提到的注意可能是您容易忽视,而又要引起您注意的地方或者由于理解上的差异而容易造成交叉编译失败的地方。
本文中需要修改的地方以红色字体标注,而添加或者修改的地方以蓝色标注,需要您执行命令的地方以粉红标注(html格式颜色不显,我又懒蛋得写HTML标签,建议您下载附件中的PDF文档)。
另外,本文中提到的脚本编写和修改都请在linux环境下手工编写,不要在windows下或者直接从下面拷贝,免得出现错误。
三、硬件平台:CSB226-PXA250,Cogent ep7312,此文档以CSB226-PXA250参考开发板的移植过程为主来说明.LCD屏幕特性:640x480,支持8bpp.支持标准PC键盘、鼠标四、软件环境:主机:Redhat7.2目标板:采用umon作为boot loader, 开发环境和运行的内核是Montavista Profession Edition 2.1.目标板(以下称为target)采用NFS的方式将根文件系统挂接到开发主机(以下称为host)上,其路径为:/opt/hardhat/devkit/arm/xscale_le/target,目标板上以控制台下的framebuffer 方式运行。
host和target都以root身份登陆。
将minigui库文件原代码libminigui1.2.3.tar.gz,资源文件minigui-fonts.1.2.0.tar.gz, minigui-imetabs-1.1.0.tar.gz, minigui-res-1.2.0.tar.gz放在主机任意目录下,而考虑到演示程序编译后没有相应的安装脚本,将源代码包mde-1.2.3..tar.gz放在了/opt/hardhat/devkit/arm/xscale_le/target/root下面。
首先用类似tar zxf liminigui1.2.3.tar.gz命令将所有的压缩包解开。
五、libminigui1.2.3及资源文件的移植:1、libminigui1.2.3文件的移植:它移植主要定义交叉编译器已经编译后的目标库和头文件的存放路径,参考给出的交叉编译例子编写了交叉编译脚本build-pxa250#!/bin/shrm -f config.cache config.statusCC=xscale_le-gcc ./configure --prefix=/opt/hardhat/devkit/arm/xscale_le/target/usr/local \ --host=i386-linux \--target=arm-linux \--enable-tinyscreen注意:由于minigui现在的版本编译后的库缺省放在了/usr/local/lib下面,故在上面的目前路径中添加了usr/local.根据硬件特性修改libminigui1.2.3/etc/Minigui-3d.cfg和Minigui-flat.cfg文件中的[fbcon]defaultmode=1024x768-16bpp为相应的defaultmode=640x480-8bpp如果没有键盘鼠标,没细看系统能否运行,但资源文件一定会要做相应的修改。
执行以下shell命令:# chmod 777 ./build_pxa250#make distclean#./build_pxa250#make#make install如果编译通过,此时在目标路径/opt/hardhat/devkit/arm/xscale_le/target/usr/local/lib下就会有交叉编译出来的动态库和静态库文件.2、资源文件的移植:上文提及的三个资源文件都只是做一下相同的安装目标路径的改动,修改configure.linux,将TOPDIR= 一行改为:TOPDIR=/opt/hardhat/devkit/arm/xscale_le/target在各自的目录下执行命令,将相应的资源文件安装到目标系统中:# make install六、演示程序mde-1.2.3..tar.gz的移植注意,演示程序也是在host上交叉编译。
转到mde-1.2.3目录下,首先也是编写交叉编译的shell脚本:#!/bin/shCC=xscale_le-gcc ./configure --prefix=/opt/hardhat/devkit/arm/xscale_le/target/usr/local \--host=i386-linux \--target=arm-linux执行以下shell命令:# chmod 777 ./build_pxa250修改configure.in中以下地方:AC_CHECK_HEADERS(minigui/minigui.h, have_libminigui=yes, foo=bar)dnl================================================================= dnl Write Outputif test "$ac_cv_prog_gcc" = "yes"; thenCFLAGS="$CFLAGS -Wall -Wstrict-prototypes -pipe"改为:AC_CHECK_HEADERS($prefix/include/minigui/minigui.h, have_libminigui=yes, foo=bar)dnl====================================================================== ==dnl Write Outputif test x"$ac_cv_prog_gcc" = x"yes"; thenCFLAGS="$CFLAGS -Wall -Wstrict-prototypes -pipe"LDFLAGS="$LDFLAGS -Wl,--rpath -WL,$prefix/lib"fiif test "x$have_libminigui" = "xyes"; thenCFLAGS="$CFLAGS -I$prefix/include"fi如果您移植的是1.2.6以下版本(1.2.6我还没做相应测试,不过在ChangeLog中提及fix了这个BUG),由于PNG图片格式在非X86体系中跑得异常(论坛中孔明有相应得回帖),还需要修改mginit目录下的nr=10一行,改为:nr=8执行以下shell命令:#make distclean# ./build_pxa250# make至此,交叉编译完成,您可以启动target,执行以下命令(第一条命令为第一次在target 运行minigui时需要, 第二条命令为多次执行演示程序用,相关原理请看init.c或者论坛的相关讨论):# su –c ldconfig# rm –f /var/tmp/mginit# /root/mde-1.2.3/mginit/mginit但系统不一定能在目标板上跑起来,另外,下面是我遇到的一下问题以及一些改动意见,仅供参考。
如果在1.2.3中,中文输入法存在读资源文件sysphrase.tab失败的问题,跟踪发现出现在libminigui1.2.3/src/ime/pinyin.c的第576行附近的这部分代码:for(i = 1; i < MAX_PY_NUM; i++) {inmd->sysph[i] = sysph = (SysPhrase*)p;#if MGUI_BYTEORDER == MGUI_BIG_ENDIANsysph->count = ArchSwap16 (sysph->count);#endifp = (char*)sysph->phrase;for(j = 0; j < sysph->count; j++) {kph = (Phrase*)p;p += SizeOfPhrase (kph->len,kph->count); // skip the string}}本想好好看一下,不过在minigui的后期版本中对中文输入法做了比较大的改动,kongming最近又提供了最新版本minigui1.2.6-2的免费下载(如我这样的有福了,又要感谢”党的富民政策好”了,呵呵),我想在移植了minigui1.2.6-2后如果还有问题,再找原因,呵,懒劲使然.另外,vcongui也容易出现异常,我以1.2.3来说, 对vcongui有以下一点看法.1、vcongui使用了/dev下面的两个设备文件(具体我不记得了:(,不过你可以在它出现提示信息时参考PC机上的相应设备文件用mknod名字在目标系统中创建),想把它加到脚本中来创建。
2、在vcongui中以及libmingui中,定义了USE_ASM宏,并有相关的X86汇编代码,我还没细看交叉编译时候是否会编译进出而导致系统异常。
3、vcongui在defaultmap.c中定义了一些功能键来激活菜单,但对我这样的钟情于MC编辑器的man就不是很方便,比喻F10,是否在新版本中去掉它?并修改vcongui的大小,使得缺省的时候占满全屏,便于在minigui编辑,毕竟控制台下就有中文嘛,便于输入汉字^_^。
再说点题外话,这种方法我在EP7312上也进行了测试,改动非常之少,其他平台限于条件和时间所限,没进行测试。
如果您打算不用NFS,要将minigui最终定制在目标系统的FLASH中,您可以将target的静态库、甚至将/usr/local的头文件去掉,将资源文件缩减,论坛里有这方面的讨论,欢迎参考。