linux下minigui移植与软键盘
MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计

MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计思想:1、利用MiniGUI的coolbar控件来创建一个屏幕键盘的外观;其代码以后会贴上;#include "common.h"#define ITEM_NUM1 14 /* coolbar */#define ITEM_NUM2 14 /* coolbar */#define ITEM_NUM3 12 /* coolbar */#define ITEM_NUM4 12 /* coolbar */#define ITEM_NUM5 8 /* coolbar */#define IDC_NovaSKB1 1001 /* ime */#define IDC_NovaSKB2 1002 /* ime */#define IDC_NovaSKB3 1003 /* ime */#define IDC_NovaSKB4 1004 /* ime */#define IDC_NovaSKB5 1005 /* ime */#define HEIGHT_SKB 115 /* 软键盘 */#define WIDTH_SKB 240 /* 软键盘 */static const char* caption1[] ={" ` ", " 1 ", " 2 ", " 3 ", " 4 ", " 5 "," 6 ", " 7 ", " 8 ", " 9 ", " 0 ", " - ", " = ", " <- "};static const int SCANCODE1[] ={SCANCODE_GRAVE, SCANCODE_1, SCANCODE_2, SCANCODE_3, SCANCODE_4,SCANCODE_5, SCANCODE_6, SCANCODE_7, SCANCODE_8, SCANCODE_9,SCANCODE_0, SCANCODE_MINUS, SCANCODE_EQUAL,SCANCODE_BACKSPACE};static const char* caption2[] ={"Tab", " q ", " w ", " e ", " r ", " t "," y ", " u ", " i ", " o ", " p ", " [ ", " ] ", " \\ "};static const int SCANCODE2[] ={SCANCODE_TAB, SCANCODE_Q, SCANCODE_W, SCANCODE_E, SCANCODE_R,SCANCODE_T, SCANCODE_Y, SCANCODE_U, SCANCODE_I, SCANCODE_O,SCANCODE_P, SCANCODE_BRACKET_LEFT, SCANCODE_BRACKET_RIGHT, SCANCODE_BACKSLASH };static const char* caption3[] ={"Shift ", " a ", " s ", " d ", " f ", " g "," h ", " j ", " k ", " l ", " ; ", " ' "};static const int SCANCODE3[] ={SCANCODE_LEFTSHIFT, SCANCODE_A, SCANCODE_S, SCANCODE_D, SCANCODE_F,SCANCODE_G, SCANCODE_H, SCANCODE_J, SCANCODE_K, SCANCODE_L,SCANCODE_SEMICOLON, SCANCODE_APOSTROPHE};static const char* caption4[] ={"Ctrl ", " z ", " x ", " c ", " v ", " b "," n ", " m ", " , ", " . ", " / ", " Enter "};static const int SCANCODE4[] ={SCANCODE_LEFTCONTROL, SCANCODE_Z, SCANCODE_X, SCANCODE_C, SCANCODE_V,SCANCODE_B, SCANCODE_N, SCANCODE_M, SCANCODE_COMMA, SCANCODE_PERIOD,SCANCODE_SLASH, SCANCODE_ENTER};static const char* caption5[] ={"Del ", " 英 ", " 中 ", " Space "," | ", " | ", " -> ", " <- "};static const int SCANCODE5[] ={SCANCODE_REMOVE, -1, -1, SCANCODE_SPACE, SCANCODE_CURSORBLOCKDOWN,SCANCODE_CURSORBLOCKUP,SCANCODE_CURSORBLOCKLEFT,SCANCODE_CURSORBLOCKRIGHT};static void create_novaskb1 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;static BITMAP del_bmp;if (LoadBitmap (HDC_SCREEN, &del_bmp, "./little/del.bmp") != ERR_BMP_OK)exit(1);cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB1,0, 0, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM1-1; i++) {item.insPos = i;item.id = i;item.Caption = caption1[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);}/* del 按键 */item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &del_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); }static void create_novaskb2 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB2,0, 22, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM2; i++) {item.insPos = i;item.id = i;item.Caption = caption2[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); }}static void create_novaskb3 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB3,0, 44, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM3; i++) {item.insPos = i;item.id = i;item.Caption = caption3[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); }}static void create_novaskb4 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB4,0, 66, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM4; i++) {item.insPos = i;item.id = i;item.Caption = caption4[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);}}static void create_novaskb5 (HWND hWnd){HWND cb;COOLBARITEMINFO item;int i;static BITMAP down_bmp;static BITMAP up_bmp;static BITMAP left_bmp;static BITMAP right_bmp;if (LoadBitmap (HDC_SCREEN, &down_bmp, "./little/down.bmp") != ERR_BMP_OK)exit(1);if (LoadBitmap (HDC_SCREEN, &up_bmp, "./little/up.bmp") != ERR_BMP_OK)exit(1);if (LoadBitmap (HDC_SCREEN, &left_bmp, "./little/left.bmp") != ERR_BMP_OK)exit(1);if (LoadBitmap (HDC_SCREEN, &right_bmp,"./little/right.bmp") != ERR_BMP_OK)exit(1);cb = CreateWindow (CTRL_COOLBAR,"",WS_CHILD | WS_VISIBLE | WS_BORDER,IDC_NovaSKB5,0, 88, 240, 20,hWnd,0);item.ItemType = TYPE_TEXTITEM;item.Bmp = NULL;item.dwAddData = 0;for (i = 0; i < ITEM_NUM5 - 4; i++) {item.insPos = i;item.id = i;item.Caption = caption5[i];item.ItemHint = NULL;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);}#if 1/* down 按键 */item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &down_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);/* up 按键 */i++;item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &up_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); /* left 按键 */i++;item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &left_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item); /* right 按键 */i++;item.insPos = i;item.id = i;item.ItemType = TYPE_BMPITEM;item.Bmp = &right_bmp;item.ItemHint = NULL;item.Caption = NULL;item.dwAddData= 0;SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);#endif}static int NovaSKBProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){switch (message){case MSG_CREATE:create_novaskb1(hWnd);create_novaskb2(hWnd);create_novaskb3(hWnd);create_novaskb4(hWnd);create_novaskb5(hWnd);break;case MSG_COMMAND:{int id = LOWORD (wParam);int code = HIWORD (wParam);switch (id){case IDC_NovaSKB1:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE1[code], 0);break;case IDC_NovaSKB2:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE2[code], 0);break;case IDC_NovaSKB3:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE3[code], 0);break;case IDC_NovaSKB4:SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE4[code], 0);break;case IDC_NovaSKB5:if (code == 1){/* 英文 */SetIMEStatus(IS_ENABLE, 0);/* 刷新输入窗口 */ShowWindow(hIMEWnd, SW_HIDE);ShowWindow(hIMEWnd, SW_SHOWNORMAL);}else if (code == 2){/* 中文 */SetIMEStatus(IS_ENABLE, 1);/* 刷新输入窗口 */ShowWindow(hIMEWnd, SW_HIDE);ShowWindow(hIMEWnd, SW_SHOWNORMAL);}else{SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE5[code], 0);// Send2ActiveClient (MSG_KEYDOWN, SCANCODE_CURSORDOWN, 0);// Send2ActiveClient (MSG_KEYUP, SCANCODE_CURSORDOWN, 0);}break;}}break;case MSG_KEYDOWN:Send2ActiveClient (MSG_KEYDOWN, wParam, lParam);break;case MSG_DESTROY:DestroyAllControls (hWnd);return 0;case MSG_CLOSE:DestroyMainWindow (hWnd);PostQuitMessage (hWnd);return 0;}return DefaultMainWinProc(hWnd, message, wParam, lParam);}static void InitNovaSKBCreateInfo (PMAINWINCREATE pCreateInfo, int x, int y){pCreateInfo->dwStyle = WS_ABSSCRPOS | WS_BORDER | WS_VISIBLE;pCreateInfo->dwExStyle = WS_EX_TOOLWINDOW;pCreateInfo->spCaption = "NovaSKB" ;pCreateInfo->hMenu = 0;pCreateInfo->hCursor = GetSystemCursor(IDC_ARROW);pCreateInfo->hIcon = 0;pCreateInfo->MainWindowProc = NovaSKBProc;pCreateInfo->lx = x;pCreateInfo->ty = y;pCreateInfo->rx = x + WIDTH_SKB;pCreateInfo->by = y + HEIGHT_SKB;pCreateInfo->iBkColor = PIXEL_lightwhite ;pCreateInfo->dwAddData = 0;pCreateInfo->hHosting = HWND_DESKTOP;}HWND NovaSKBWindow(HWND hosting, int x, int y){HWND hwnd_novaskb;MAINWINCREATE CreateInfo;InitNovaSKBCreateInfo(&CreateInfo, x, y);CreateInfo.hHosting = hosting;hwnd_novaskb = CreateMainWindow (&CreateInfo);if (hwnd_novaskb == HWND_INVALID)return -1;ShowWindow(hwnd_novaskb, SW_HIDE);return hwnd_novaskb;}//不要认为这段代码可以直接编译通过,但没有思想上的和语法上的错误;次程序只是位了说明一下思想,//要是真想学,琢磨下,我以后在贴上测试过的代码;2、在MSG_CREATE消息中利用GBIMEWindow来创建一个IME 窗口;3、在coolbar的proc中用SendMessage(hIMEWnd,MSG_KEYDOWN,SCANCODE,0)来向IME窗口发送模拟键盘的消息;4、IME接收到MSG_KEYDOWN后会把此消息当做键盘消息来做;进而屏幕键盘实现。
MiniGUI3.0.12安装与移植

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首先没被编译通过。
MiniGUI的软键盘快速设计方法

V 14 o. 3
・
计
算
机
工
程
20 08年 1 2月
De e e 0 8 c mb r2 0
No. 24
Co mp t rEn i e rn u e gn e i g
开发研究与设计技术 ・
文 编 o — 4 ( 02_ 2 2 文 标 码 A 章 号t o -2 2 84_ 7 1 0 3 8o ) 0 4 献 识 :
CTRL
—
具栏 上依 次创建能显示对应字符 的多个按钮 。本文软键盘面
板如图 1 所示 。
C O B O L AR 来创建 一个 酷工具 栏控件 ,就 可 以使 用 AD I E 消息 向 已创 建 的酷 工具 栏 内添 加按 钮 项 DT M
ZHANG n LUO i Bi , Gu - e
( l g f noma o cec n n ier g Cet l o t ies yC agh 10 3 Col e fr t nSin eadE gn ei , nr uhUnvri , h n s a 0 8 ) e oI i n aS t 4
到的按键并进行符合 习惯的布局。本文 先在 Mii U 的一个 nG I 窗 V( 以是主窗 口或对话框) I 可 上设计了包括 5行按键值的软 键盘面板 ,其 中每一行是一个酷工具栏 ,然后在 这 5个酷工
软键盘有助于众多用到 Mii I nGU 的嵌入式项 目的开发。
1 Mi G I C o a 控件及输入法窗 口 n U 的 ol r i b
酷工具栏( o la) C obr 是栏 。因为它包含在 Mii U 的 mgx 扩展库 中,所以 nG I et 必须初始化 mg x 库才能使用该控件 。 o la et C obr的使用方法很 简便 ,通过调 用 CetWid w ) rae n o (函数 ,并指 定控件 类名 称
1_MiniGUI移植实验

广州致远电子有限公司
MagicARM2410教学实验开发平台
4.实验预习要求
必须先做<< 实验指导>> 必须先做 <<… 实验指导>> 第 5 、6 章的实验 ,在 RedHat <<… >>第 章的实验, 操作系统上建立交叉编译环境, Linux 9.0操作系统上建立交叉编译环境,掌握交叉编译 和下载Linux应用程序到MagicARM2410上并运行 Linux应用程序到MagicARM2410上并运行; 和下载Linux应用程序到MagicARM2410上并运行; <<… 仔 细 阅 读 <<… 实 验 指 导 >> 第 1 章 的 内 容 , 了 解 MagicARM2410 实验箱的硬件结构, 2410实验箱的硬件结构 MagicARM2410 实验箱的硬件结构 , 注意彩色液晶屏驱动 电路; 电路; 阅读MiniGUI的文档<<MiniGUI用户手册>> MiniGUI的文档<<MiniGUI用户手册>>、 阅读MiniGUI的文档<<MiniGUI用户手册>>、<<MiniGUI 编程指南>> 了解MiniGUI的基本特点和应用配置选项, >>, MiniGUI的基本特点和应用配置选项 编程指南>>,了解MiniGUI的基本特点和应用配置选项, 以及应用程序的编写。 以及应用程序的编写。
广州致远电子有限公司
MagicARM2410教学实验开发平台
2.实验设备
硬件: 硬件: PC机 PC机 1台 MagicARM2410教学实验开发平台 MagicARM2410教学实验开发平台 1台 USB鼠标 USB鼠标 1个 USB键盘 USB键盘 1个 软件: 软件: 9.0操作系统 安装有Autoconf 操作系统( Autoconf和 RedHat Linux 9.0操作系统(安装有Autoconf和 Automake工具 工具) Automake工具) 嵌入式Linux Linux开发环境 嵌入式Linux开发环境 MiniGUILinux)软件 MiniGUI-STR(for Linux)软件
Linux下面Minigui、mSQL的安装与配置以及Makefile的使用

defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp
display=0
---------------------------------------------------
/bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o varbitmap.lo `test -f 'varbitmap.c' || echo './'`varbitmap.c
[system]
# GAL engine
gal_engine=qvfb
# IAL engine
ial_engine=qvfb
mdev=/dev/mouse
mtype=IMPS2
1>安装minigui-res-str-1.3.3.tar.gz (这个是minigui所使用的一些资源,比如字体等等)
安装命令:
[root@localhost]#tar -zxf minigui-res-1.3.3.tar.gz (解压)
initrd /initrd-2.6.21-1.31Array4.fc7.img
这里的root(hd0,0)以及kernel,initrd段需要结合自己的系统和分区情况填写,kernel项后面的vga=0x0317 fb:on是设置显示器分辨率,打开帧缓冲。
MiniGui安装和移植

MiniGui安装和移植一MiniGui的安装首先从MiniGui官网上下载安装文件。
一共需要下载三个压缩文件:libminigui-1.6.10.tar.gz、minigui-res-1.6.10.tar.gz、mg-samples-1.6.10.tar.gz。
安装步骤如下:一:解压缩安装包。
# tar xzvf libminigui-1.6.10.tar.gz二:运行配置程序。
# cd libminigui-str-1.6.10#./configure –disable-jpgsupport –disable-pngsupport三:编译MiniGui源代码# make四:安装MiniGui函数库# su –c “make install”五:查看安装好的库文件MiniGui的动态库文件和静态库文件都被安装到了/usr/local/lib目录下:#ls –l /usr/local/lib而MiniGui相关的头文件则被安装到了/usr/local/include/minigui/目录下Ls –l /usr/local/include/minigui运行时需要配置文件在/usr/local/etc/目录下Ls –l /usr/local/etc这样便完成了MiniGui函数库libminigui-1.6.10.tar.gz的安装接下安装资源包资源包minigui-res-1.6.10.tar.gz并不需要编译,直接安装即可。
解压缩文件#tar xzvf minigui-res-1.6.10.tar.ga打开minigui-res-1.6.10文件#cd minigui-res-1.6.10安装函数库# su –c ”make install”默认情况下,这些资源文件被安装在/usr/local/lib/minigui/res目录下# la /usr/local/lib/minigui/res解压示例代码包# tar mg-samples-1.6.10.tar.gz 打开mg-samples-1.6.10文件# cd mg-samples-1.6.10#./configure编译#make成功编译完成后,就可以在mg-samples-1.6.10/src目录下看到一些被编译好的可执行程序。
嵌入式Linux环境下MiniGUI的研究与移植

嵌入式Linux环境下MiniGUI的研究与移植前言近年来随着嵌入式设备与市场需求的广泛结合,手机、PDA、DVD 播放机等产品的应用对可视化操作界面的简洁和方便提出了更高的要求,这都需要一个稳定可靠的高性能GUI 系统来提供支持。
图形用户界面(Graphic User Interface,简称GUI)的广泛流行是当今计算机技术的重要成就之一,它极大地方便了非专业用户的使用,人们可以通过窗口、菜单方便地进行操作。
由于嵌入式系统实时性要求高,同时嵌入式系统硬件配置又有限,所以对轻型GUI 的需求更加突出。
另外,嵌入式系统往往是一种订制设备,它们对GUI 的需求也各不相同,因此GUI 也必须是可订制的。
综上所述,嵌入式系统对GUI 的基本要求应包括轻型、占用资源少、高性能、高可靠性以及可配置。
MiniGUI 是目前比较常用的几种GUI 系统之一,与其他的GUI 相比,MiniGUI 最显著的特点就是轻型、占用资源少,而且在这几年的发展里,MiniGUI 已经非常成熟和稳定了,在许多产品和项目中都已得到了实际应用。
1 MiniGUI 的特点和体系结构1. 1 MiniGUI 的特点MiniGUI 是由原清华大学教师魏永明主持开发的轻量级图形系统,是一种面向嵌入式或实时系统的图形用户界面支持系统。
它遵循GPL 公约,是基于SVGALib 及LinuxThread 库的多窗口GUI 支持系统。
能跨多种操作系统,主要运行于linux 及一切具有POSIX 线程支持的POSIX 兼容系统,包括普通嵌入式Linux、eCos、uC/OS-II、VxWorks 等系统,是国内最早的自由软件之一。
MiniGUI 的主要特点有:(1) 遵循GPL 条款的纯自由软件;(2) 提供了完备的多窗口机制;。
嵌入式Linux的MiniGUI研究和移植

嵌入式Linux的MiniGUI研究和移植摘要:分析嵌入式操作系统下典型的图形用户界面MiniGUI的结构和特点,并提出将其移植到SUNPLUS的DVD720上的方案。
关键词:图形用户界面(GUI) 嵌入式系统Frame Buffer引言1 嵌入式Linux下的GUI概况1.1 GUI在嵌入式系统中的地位随着嵌入式系统的广泛应用,PDA、机顶盒、DVD/VCD播放机及WAP手机已经迅速普及。
图形用户界面(GUI)的广泛流行,是当今计算机技术的重大成就之一。
它极大地方便了非专业用户的使用,因此实时嵌入式系统对GUI的需求越来越明显,而这一切均要求有一个高性能、高可靠的GUI 的支持。
由于嵌入式系统实时性要求非常高,对GUI的要求也更高。
这些系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和GUI之上,比如Windows或X Window,太过庞大和臃肿。
这样,这些系统对轻型GUI的需求更加突出。
另外嵌入式系统往往是一种定制设备,它们对GUI的需求也各不相同。
有些系统只要求一些图形功能,而有些系统要求完备的GUI支持,因此,GUI也必须是可定制的。
嵌入式系统对GUI的基本要求包括轻型、占用资源少、高性能、高可靠性及可配置[1]。
1.2 目前嵌入式系统中GUI的实现尽管实时嵌入式系统对GUI的需求越来越明显,但目前GUI的实现方法各有不同[1]:①某些大型厂商有能力自己开发满足自身需要的GUI系统。
②某些厂商没有将GUI作为一个软件层从应用程序中剥离,GUI的支持逻辑由应用程序自己来负责。
③采用某些比较成熟的GUI系统,比如Mini GUI、MicroWindows 或者其它GUI系统。
比较常用的有如下几种GUI系统:紧缩的X Window 系统、MiniGUI、MicroWindows、OpenGUI及QT/Embedded 等。
下面简单介绍这些系统。
(1)MiniGUIMiniGUI[2]由原清华大学教师魏永明先生开发,是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计成果说明书题目:Linux下基于minigui的软键盘程序调试学生姓名:苏腾云/王润志/蒋强/游寺豪/沈龙/陈阳狮学号:0800403220/0800403222/081311128081311101/081311136/0800403109学院:机电工程学院班级:AC08电信指导教师:赵秋亮老师浙江海洋学院教务处2011年07月01日浙江海洋学院课程设计成绩评定表2009 —2010学年第2 学期学院机电工程班级 AC08电信专业电子信息工程学生姓名(学号) 苏腾云/王润志游世豪/蒋强沈龙/陈阳狮课程设计名称嵌入式系统课程设计题目MiniGUI移植指导教师评语指导教师签名:年月日答辩评语及成绩答辩小组教师签名:年月日附2:浙江海洋学院课程设计任务书2010 —2011学年第2 学期学院机电工程班级 AC08电信专业电子信息工程学生姓名(学号) 苏腾云/王润志游世豪/蒋强沈龙/陈阳狮课程名称嵌入式系统课程设计设计题目Linux下基于minigui的软键盘程序调试完成期限自 2011 年 6 月 20 日至 2011 年 7 月 1 日共 2 周设计依据本次设计所需知识1.S3C2410的基本知识2.Linux系统常用命令3.linux编辑器VI的使用方法4.MiniGUI的基本知识5.MiniGUI的移植方法设计要求及主要内容1.熟悉linux系统的常用操作命令2.熟悉VI(或GVIM)的操作方法3.完成虚拟机VM的安装4.完成虚拟机VM下的Linux(RedHat9.0)的安装5.完成交叉编译环境的建立6.完成PC机环境下minigui的安装与配置,QVFB的安装7.完成minniGUI在S3C2410A上的移植8.利用示例程序包中程序验证移植结果,结果能在LCD与QVFB上正常显示9.调试基于minigui的软键盘程序,并能在QVFB和LCD上显示。
10.录制设计结果演示和解说视频11.完成课程设计说明书的撰写。
撰写格式要求按照《机电工程学院毕业设计文本规范》。
参考资料[1]. ARM9嵌入式系统设计――基于S3C2410与Linux.徐英德等.北京航空航天大学出版社.2007年.[2]. 嵌入式系统实验指导书.自编.[3]. 实验指导书-EL-ARM-830型教学实验系统(ARM9).北京精仪达盛科技有限公司.[4]. Minigui实验指导书(for S3C2410).北京精仪达盛科技有限公司.[5]. Minigui编程指南.飞漫公司.[6]. FTP资源:172.16.51.6 用户名:dx 密码:1234. 在/ARM目录下。
指导教师签字日期Linux下基于minigui的软键盘程序调试苏腾云王润志游世豪蒋强沈龙陈阳狮(浙江海洋学院机电工程学院,浙江舟山 316000)摘要MiniGUI是由北京飞漫软件技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。
“小”是MiniGUI的特色,它目前已经广泛应用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。
目前,MiniGUI 的最新版本为MiniGUI 3.0,所以MiniGUI对中文的支持最好。
它支持GB2312与BIG5字元集,其他字元集也可以轻松加入。
关键字:MiniGUI;Red Hat linux9;qvfb;交叉编译目录前言 (1)1.方案设计 (2)2.虚拟机VM下的Redhat9.0的安装 (3)3.交叉编译环境的建立 (5)4.MiniGui在linux运行环境中的建立: (6)4.1 QVFB的安装: (6)4.2 MiniGui相关文件在linux中QVFB下的安装运行: (7)4.2.1 安装MiniGui的资源文件: (7)4.2.2 配置与安装MiniGUI库文件: (7)4.2.3 在QVFB上显示例样程序: (9)5 Linux下FrameBuffer的驱动运行 (12)5.1 framebuffer驱动的添加 (12)5.2 Framebuffer设备文件的添加 (14)5.3 Framebuffer程序测试 (14)5.3.1 配置NFS网络文件系统 .................. 错误!未定义书签。
5.3.2 用交叉网线把主机和实验系统连接: (14)5.3.3 利用网络烧写软件imagewrite烧写大系统内核和bigroot文件系统 (17)6、MiniGui在S3C2410上的移植 (18)6.1安装MiniGUI的资源文件 (18)6.2配置与安装MiniGUI的库文件 (19)6.3 交叉编译mg-samples-1.6.10中的示例文件 (21)6.4 root文件的生成及NFS的配置与启动 (21)6.4.1 root文件的生成: (21)6.4.2 Linux下NFS的配置及启动: (21)6.4.3 用交叉网线把主机和实验系统连接: (22)6.5 烧写root文件系统并运行MiniGUI程序 (23)7.设计过程中的问题及解决办法 (25)7.1库文件libminigui-1.3.so.3.0.0找不到问题 (25)7.2 配置NFS网络文件系统时出现的问题 (25)8、设计心得 (26)[参考文献] (26)前言MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于1998 年底开始开发。
2002 年,魏永明先生创建北京飞漫软件技术有限公司,为MiniGUI 提供商业技术支持,同时也继续提供开源版本,飞漫软件是中国地区为开源社区贡献代码最多的软件企业。
最后一个采用GPL 授权的MiniGUI 版本是 1.6.10,从MiniGUI 2.0.4 开始MiniGUI 被重写并使用商业授权。
历经十余年时间,MiniGUI 已经成为性能优良、功能丰富的跨操作系统嵌入式图形用户界面支持系统,支持Linux/uClinux、eCos、uC/OS-II、VxWorks、ThreadX、Nucleus 、pSOS、OSE 等操作系统和数十种SoC 芯片,已验证的硬件平台包括ARM-based SoCs 、MIPS based SoCs 、IA-based SoCs 、PowerPC、M68K(DragonBall /ColdFire)、Intel x86 等等,广泛应用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。
使用MiniGUI 成功开发产品的企业有华为、中兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2 等。
这些用户广泛分部在中国大陆、台湾、新加坡、韩国、美国、德国、意大利、印度、以色列等国家和地区。
值得一提的是,在中国自主开发的3G 通讯标准TD-SCDMA 中,约有60% 获得入网许可证的TD-SCDMA 手机使用MiniGUI 作为其嵌入式图形平台,以支撑浏览器、可视电话等3G 应用软件的运行,其中有联想TD30t、海信T68、中兴通讯U85 等大家熟悉的TD 手机型号。
在MiniGUI 的基础上,飞漫软件研发了mDolphin (基于开源的浏览器核心WebKit 的嵌入式浏览器,满分通过Acid3 的基准测试)、mPeer (为使用Java 技术的嵌入式设备提供高效的J2SE AWT/Swing 实现支持),并且开发了基于Eclipse CDT 的可视化集成开发环境,为开发人员提供所见即所得(WYSIWYG)的界面设计环境。
2010年,飞漫软件把最新版的MiniGUI、mDolphin、mPeer、mStudio 等系统整合在一起,推出了合璧操作系统(HybridOS)解决方案,是一整套专为嵌入式设备打造的快速开发平台,集成了飞漫软件10年的嵌入式行业研发经验和众多成熟的产品,使众多的希望在嵌入式设备上做开发的中小型企业,摆脱了“不稳定的内核以及驱动程序”、“交叉编译工具链、基础函数库存在大量缺陷”、“不恰当的开源软件”、“高水平嵌入式开发工程师缺乏”等这些问题的困扰,从而能够在一个运行稳定、功能强大的小巧系统内核基础上,专注开发产品。
合璧操作系统(HybridOS)采用新的商业授权模式,性价比颇高。
截止2010年9月,MiniGUI 的最新版本是3.0.10,MiniGUI 将作为合璧操作系统(HybridOS)的一个组成部分而不断演进,推荐新老用户使用合璧操作系统(Hybridos)作为嵌入式开发平台,必将节省大量的开发成本和时间。
1.方案设计根据设计要求基本设计计划按照图2.1所示流程:完成虚拟机VMware Workstation 的安装完成虚拟机VM下的Red Hat Linux9.0的安装完成交叉编译环境的建立PC机环境下MiniGUI的安装与配置,及QVFB的安装在QVFB上显示例程MinniGUI在S3C2410上的移植在LCD上显示例程bmpbkgnd完成课程设计说明书的撰写图1.1 系统设计总框图2.虚拟机VM下的Redhat9.0的安装启动虚拟机VM,新建一个虚拟机(注意在选择客户机操作系统的时候,应该选择LINUX 系统版本应该是RED HAT LINUX)其他的都可以默认进行下一步就可以,如图2.1所示图2.1 选择安装的系统安装界面1图 1.0 vm安装界面进入安装LINUX安装页面,如图2.2所示:点击右面的CD-ROM,进入,并选择使用ISO镜像。
选择第一个镜像文件进行安装。
图2.2 LINUX的安装页面1图2.2 LINUX的安装页面在安装语言选择中,我们可以选择【简体中文】,选择键盘和鼠标的时候,我们选择系统默认的就好了其他的也一直默认安装下去即可。
根口令设置时可简单设置一个,例如12345,自己不会遗忘即可。
再继续安装会出现选择安装软件包(注意在选择安装包的时候应该选择自己所需的安装包进行安装,不太清楚者建议全部安装,以免在后面的实验中会出现错误)点击“下一步“安装。
在安装软件包的时候,注意会让你手动选择第二个和第三个软件包安装(方法:在RED HAT LINUX那里右击,选择设置,在HARDWARE中选择CD-ROM.使用第二个ISO镜像,第三个也是如此)在安装完第三个镜像文件后。
进行用户账号设置。
用户名:root 密码:12345,到这Ret Hat Linux9 就安装完成。
建立交叉编译环境在根目录在创建linuette目录。
将/实验软件/tools/目录中的RPMS文件夹拷贝到linuette目录中。
打开终端,进入RPMS中(指令:# /opt/linuette/RPMS)进行交叉编译库的安装。