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

黑衣人   2008-1-22 16:40 楼主
一、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

回复评论 (2)

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

最后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。 具体代码:待续
点赞  2008-1-22 16:41

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

二、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 可以查看有关信息
点赞  2008-1-22 16:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复