Minigui及lgui使用全解释
前幾天搞了minigui和lgui,看了源代碼,對窗口機(jī)制算是有了比較好的了解了,當(dāng)然過程當(dāng)中發(fā)現(xiàn)了一些大家現(xiàn)在討論的很少的東西,這些我將在本文中談到,包括GUI窗體機(jī)制,framebuffer機(jī)制及應(yīng)用。
前面一段時(shí)間搞了驅(qū)動(dòng)方面的,突然感覺得搞下圖形界面的,以前一直對window窗口平臺及linux x系統(tǒng)窗體機(jī)制很感興趣,于是上網(wǎng)搜了下,發(fā)現(xiàn)當(dāng)前流行minigui,這個(gè)好像是嵌入式系統(tǒng)比較流行的,在網(wǎng)上看了些資料,下了源碼,及例子程序,例子在qvsb上跑起來了,但在framebuffer下運(yùn)行失敗,所以覺得是該將窗口機(jī)制深入研究了,于是看了源代碼,后來發(fā)現(xiàn)看minigui有點(diǎn)累,因?yàn)檫@款GUI盡管源碼量不大,由于其為了保持高度兼容及抽象,代碼已經(jīng)變得復(fù)雜了,再加上網(wǎng)上對此源碼級機(jī)制分析的基本沒有,只有如何使用的,所以我看了半天,只懂了一些,這時(shí)正好在網(wǎng)上搜到一條有關(guān)窗體機(jī)制分析的文章,是《精通嵌入式Linux編程——構(gòu)建自己的 GUI 環(huán)境》李玉東著,并且其就是針對LGUI這一版本的,且有源代碼,這正好合我口味,于是我就開始看LGUI的源碼了,越看越有勁,于是看了將近一天,差不了,于是開始實(shí)踐了。
后來才發(fā)覺這只是半步,在redhat9上實(shí)踐時(shí)就發(fā)現(xiàn)了很多問題。下面我就針對我實(shí)踐過程中出現(xiàn)的問題及解決方案及設(shè)計(jì)到的知識談一下。
1.gui及minigui在redhat9用framebuffer模式運(yùn)行時(shí):運(yùn)行前對于minigui在framebuffer模式下要改他的配置文件minigui.cfg
更改方式如下:
# GAL engine
gal_engine=fbcon
# IAL engine
ial_engine=fbcon?
mdev=/dev/mouse
mtype=IMPS2
-------------------------------------------------
gal_engine和ial_engine的值應(yīng)該設(shè)置為fbcon,
當(dāng)我編譯完lgui,minigui源碼及例子后,發(fā)現(xiàn)minigui提示沒有找到圖形引擎,使用dummy引擎。而lgui更是運(yùn)行不了,段錯(cuò)誤,后來我于是調(diào)試lgui,發(fā)現(xiàn)initframebuffer時(shí)出錯(cuò)了,于是我猜測是/dev/fb0文件有問題,后來一看果然沒有這個(gè)文件。網(wǎng)上搜了一下資料,發(fā)現(xiàn)內(nèi)核盡管編譯了framebuffer,但默認(rèn)是關(guān)閉的,要通過如下方式解決。
在/boot/grub/grub.conf加入一個(gè)段落:
----------------------------------------------------------
title MiniGUI 1.6.2
root(hd0,0)
kernel /vmlinuz-2.4.20X? root=/……(你的內(nèi)核名稱) vga=0x0317 fb:on
即在root后面添加vga=0x0314 fb:on
這樣下來后發(fā)現(xiàn),還是沒有解決問題,后來感覺是不是framebuffer這方面我了解的不夠啊,于是上網(wǎng)查資料,發(fā)現(xiàn)資料好少,感覺是不是這個(gè)技術(shù)現(xiàn)在不行了啊,不過為了實(shí)踐,管他好不好了,只得去看,看了一下發(fā)現(xiàn)沒有講這方面的,但看多了,突然有了一個(gè)想法,是不是framebuffer模式不能在x console下運(yùn)行,于是乎改為文本模式。
2.在文本模式下運(yùn)行:
???? 結(jié)果:minigui正確顯示,但是鼠標(biāo)還是不行,沒反應(yīng),不過已經(jīng)讓我高興了,因?yàn)橹辽儆羞M(jìn)步啊,于是乎想到是不是鼠標(biāo)設(shè)備文件有問題,上網(wǎng)查了,改為/dev/input/mice還是不行,這下郁悶了,不過既然能夠顯示出來,我就可以試驗(yàn)lgui了,因?yàn)?span style="font-family:Times New Roman">lgui我已經(jīng)看懂了,可以修改源碼了,我最終的目的是運(yùn)行lgui,但是在google搜了一下Lgui發(fā)現(xiàn)幾乎沒有這個(gè)gui的文章,更別說在linux編譯運(yùn)行及配置了,看來只有自己測試了,由于對源碼有了了解,這個(gè)過程在沒有資料的情況下也不算太糟糕,編譯沒有錯(cuò)誤,此時(shí)運(yùn)行還是段錯(cuò)誤.segment fault,于是用gdb調(diào)試,發(fā)現(xiàn)是鼠標(biāo)設(shè)備文件問題,于是改了設(shè)備文件還是有問題,還是已經(jīng)是正常退出錯(cuò)誤,我高興了,因?yàn)橛凶兓鸵馕墩咿D(zhuǎn)機(jī),于是進(jìn)一步調(diào)試發(fā)現(xiàn)是源代碼的錯(cuò)誤,讀環(huán)境變量錯(cuò)誤,自己加上去,終于正常運(yùn)行了,顯示圖形出來了。圖形如下:
?
?
這個(gè)時(shí)候真的功夫不負(fù)有心人啊。當(dāng)然和Minigui一個(gè)樣還有一個(gè)問題,就是鼠標(biāo)沒有,并且鼠標(biāo)移動(dòng)時(shí)會(huì)擦除圖形,但是已經(jīng)有了很大提高了啊,這個(gè)時(shí)候就是做到這一步又用了一天,有時(shí)發(fā)現(xiàn),當(dāng)一個(gè)問題解決沒解決,你一天都給耗了。
????? 經(jīng)過上面發(fā)現(xiàn)比較還是鼠標(biāo)問題,于是搜索,但一無所獲,就在我快要放棄的時(shí)候,我采取試試看的心態(tài),將此程序放到federal 10運(yùn)行,結(jié)果完全正確,鼠標(biāo)有動(dòng)作了,我高興級了,但是鼠標(biāo)所到之處都給擦除了,我分析這個(gè)是命令行下的鼠標(biāo)顯示時(shí)刷新屏幕所為,所以我覺得只要我隱藏鼠標(biāo),這個(gè)問題就能解決,上網(wǎng)搜索還是很少資料,不過偶然中發(fā)現(xiàn)有個(gè)console下gpm鼠標(biāo)驅(qū)動(dòng)的,于是試圖去關(guān)閉它,奇跡出現(xiàn)了,鼠標(biāo)終于不見了。現(xiàn)在終于運(yùn)行正常了。試驗(yàn)剛剛成功了。
?? 總結(jié):
?????? 文本模式下鼠標(biāo)動(dòng)作是由叫gpm捕捉鼠標(biāo)事件并改變鼠標(biāo)位置,于是每次鼠標(biāo)改變它都要刷新鼠標(biāo)所在位置屏幕,于是就有了所到之處擦除的景象,解決后并更換背景圖片后運(yùn)行圖形如下:
但是相比minugui,lgui沒有移動(dòng)窗體功能,于是我更改了代碼,也實(shí)現(xiàn)了,現(xiàn)在想來有時(shí)真的遇到棘手的問題不要放棄并尋找不同方式可能就有意外的收獲,不要輕易放棄任何可能。
上面出現(xiàn)的問題:????????????????????????? 解決方案
1.?????? linux版本問題???????????????? ???redhat9換到federal10
2.?????? 運(yùn)行模式問題??????????????????? x console換到文本模式
3.?????? 配置問題??????????????????????? 配置為framebuffer開機(jī)開啟
4.?????? 源代碼BUG ?????????????????????用gdb調(diào)試,發(fā)現(xiàn)問題解決
GUI窗口機(jī)制推薦看精通《嵌入式Linux編程——構(gòu)建自己的 GUI 環(huán)境》李玉東著。
Minigui簡單介紹:
總結(jié)
以上是生活随笔為你收集整理的Minigui及lgui使用全解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MiniGUI编程之Helloworld
- 下一篇: miniGUI安装笔记(转)