专栏中心

EEPW首页 > 专栏 > 具体项目的MiniGUI编译移植详解

具体项目的MiniGUI编译移植详解

发布人:patton 时间:2008-06-30 来源:工程师 发布文章

一、MiniGui的交叉编译

1.编译命令

编译前需要准备内核,把内核的源代码放到/opt/uClinux/uClinux-dist目录下。

进入libminigui目录

[…]#CC=arm-elf-gcc AR=arm-elf-ar RANLIB=arm-elf-ranlib LDFLAGS="-Wl,-elf2flt" ./configure \

  --prefix="/opt/usr/local" \

  --host=arm-elf-linux \

  --build=i386-linux \

  --disable-shared \

  --enable-lite=yes \

  --enable-video-fbcon=yes \

  --enable-nativegal=yes \

  --enable-nativeial=yes \

  --enable-newgal=no \

  --enable-timerunitms=no \

  --enable-nativegalqvfb=no \

  --enable-fblin8=no \

  --enable-fblin16=no \

  --enable-fblin24=no \

  --enable-fblin32=yes \

  --enable-dummyial=yes \

  --enable-qvfbial=no \

  --enable-nativeps2=no \

  --enable-nativeimps2=no \

  --enable-nativems=no \

  --enable-nativems3=no \

  --enable-nativegpm=no \

  --enable-textmode=no \

  --enable-rbfsupport=yes \

  --enable-rbfgb12=no \

  --enable-vbfsupport=no \

  --enable-fontsserif=no \

  --enable-fontcourier=no \

  --enable-fontsymbol=no \

  --enable-fontvgas=no \

  --enable-qpfsupport=no \

  --enable-ttfsupport=no \

  --enable-type1support=no \

  --disable-ttfsupport \

  --enable-latin2support=no \

  --enable-latin3support=no \

  --enable-latin4support=no \

  --enable-latin9support=yes \

  --enable-gbsupport=yes \

  --enable-gbksupport=no \

  --enable-big5support=no \

  --enable-unicodesupport=no \

  --enable-savebitmap=yes \

  --enable-gifsupport=yes \

  --enable-jpgsupport=no \

  --enable-pngsupport=no \

  --enable-imegb2312=no \

  --enable-imegb2312py=no \

  --enable-aboutdlg=yes \

  --enable-savescreen=no \

  --enable-tinyscreen=no \

  --enable-extfullgif=no \

  --enable-video-dummy=no \

  --enable-extskin=no

[…]#make

[…]#make install

最后libminigui被安装在/opt/usr/local/目录下

上面配置的yes或no根据实际需要进行最优设置。

2.资源安装

进入minigui-res目录

编辑config.linux文件大概在11行,把 TOPDIR=改为TOPDIR=/opt

[…]#make install

最后资源也被安装在/opt/usr/local/目录中

3.输入引擎

引擎的入口代码:

src/ial.c 中有数组static INPUT inputs [],初始存放了所以输入引擎名称及其初始化函数和退出函数的入口,两个函数分别是InitNativeInput和TermNativeInput。

其他函数介绍:(主要介绍键盘相关的函数)

wait_event Minigui系统采用定时查询来获得输入设备的输入情况,wait_event就是一个定时运行的函数,返回事件类型,主要是检查输入句柄是否有新的数据输入。

keyboard_update 事件判断完毕后,若是有键盘输入,则调用该函数,主要功能就是判断那个按键有输入。数组atic unsigned char state [NR_KEYS] 存储了128个字符的状态,输入哪个字符,这个字符的状态就被置1。

keyboard_getstate 直接返回状态数组

keyboard_suspend

keyboard_resume

移植内容,主要是按键码查表转化

具体移植代码:在Minigui中采用一个比较通用的输入引擎,在内核的键盘驱动中去实现按键的输出来适应Minigui的通用驱动。

4.输出引擎(New)

具体看framebuffer驱动是如何实现的,FrameBuffer中的数据格式如何。

真彩32bit

Minigui的象素输出格式0x00rrggbb

基于视频芯片的输入要求格式:0xaarrggbb

问题:对于Minigui中的格式高一字节永远是0x00,对该字节不进行处理的。

            但视频芯片的高一字节是定义透明度的,若为0x00则全透明,因此没有进行修改的Minigui程序是没有任何屏幕显示的。

解决:需要在Minigui的最终输出部分把高位修改为0xff。

具体代码:待续

二、MiniGui的文件部署

1.开发环境文件的部署

有上面的安装命令可以看出系统所有的文件都在/opt/usr/local中

/opt/usr/local/

            ->etc

                     ->(MiniGUI.cfg)

            ->include

                     ->minigui

                               ->(*.h)

            ->lib

                     ->(*.a)

                     ->minigui

                              ->res

                                        ->bmp

                                                 ->(系统位图文件)

                                        ->cursor

                                                 ->(系统光标文件)

                                        ->font

                                                 ->(系统字体文件)

                                        ->icon

                                                 ->(系统图标文件)

                                        ->imetab

                                                 ->(输入法文件)

  

2.   Romfs中文件的部署

/opt/usr/local/

            ->bin

                     ->(应用程序)

            ->lib

                     ->minigui

                               ->res

                                        ->bmp

                                                 ->(系统位图文件)

                                        ->cursor

                                                 ->(系统光标文件)

                                        ->font

                                                 ->(系统字体文件)

                                        ->icon

                                                 ->(系统图标文件)

                                        ->imetab

                                                 ->(输入法文件)

 

三、 MiniGui的配置文件(/usr/local/etc/MiniGUI.cfg)

1.输入输出引擎

IAL= console

若uClinux的输入驱动若是基于tty的就可以这么配置

该引擎的源代码主要在目录\src\ial\native中的native.c 和 native.h文件中。

GAL = fbcon

基于Framebuffer的输出引擎可以这样配置

2.字库配置

Mingui共支持五种字体分别是:等宽字体( rawbitmap)、变宽字体(varbitmap)、qpf、ttf、type1。因此在配置文件中有五个配置段分别来配置五种字体。

四、Minigui的裁剪

1.在编译的时候适当的关闭一些不需要的功能

2.资源的裁剪

主要是系统无用字库、无用图标、图片、光标的删除。

五、应用程序的编译(New)

1. mde例子程序的编译交叉编译

make CC=arm-elf-gcc LDFLAGS="-elf2flt -L/opt/usr/local/lib" \

CFLAGS="-I/opt/usr/local/include "

2. 应用程序运行前处理

设置内容:主要就是堆栈大小的设置。

设置原因:若堆栈太小,程序的函数调用又非常复杂,则容易出现堆栈溢出,从而导致运行错误。

设置方法:使用arm-elf-flthdr –s 16384 pro_name

                     16384就是堆栈的大小即16×1024 = 16K

                     使用arm-elf-flthdr –p pro_name 可以查看有关信息

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

突破传统局限,泰克助力芯朋微理想二极管更安全、更高效

高速球型摄像头解决方案

视频 2012-07-03

应用的RF4CE协议的射频遥控器系统

视频 2012-07-03

示波器的基础知识

USB 分析仪与软件采集程序比较(pdf)

芯原显示处理器IP DC8200-FS获得ISO 26262 ASIL B认证

国网电能表解决方案

视频 2012-07-03

带耦合电感的多相降压转换器中关于输出电流和电压纹波的考量因素

瑞萨电子MCU直流无刷电动工具解决方案

视频 2012-07-03

无线遥控LED灯参考设计

视频 2012-07-03

传感器技术的未来发展:新兴趋势与创新成果

​用DELL的白金服务器电源,做个转接板变通用电源

Li电池的保护电路

Diodes推出符合车规且适合显示器和照明的36通道线性LED驱动器

KG Mobility签署谅解备忘录开发高级辅助驾驶系统技术

益莱储2025新年回顾展望:租赁赋能客户创新蝶变

IGBT模块在颇具挑战性的逆变器应用中提供更高能效

歌尔亮相CES2025,声光电多领域技术焕新

MAX5631 MAX5632 MAX5633 32路16位数模转换DAC

更多 培训课堂
更多 焦点
更多 视频

技术专区