[轉(zhuǎn)載]Minigui及l(fā)gui使用全解釋

本文轉(zhuǎn)載至:http://blog.chinaunix.net/uid-12873540-id-2912723.html

前幾天搞了minigui和lgui姆坚,看了源代碼十兢,對(duì)窗口機(jī)制算是有了比較好的了解了瞬女,當(dāng)然過(guò)程當(dāng)中發(fā)現(xiàn)了一些大家現(xiàn)在討論的很少的東西肺缕,這些我將在本文中談到狈涮,包括GUI窗體機(jī)制咐蝇,framebuffer機(jī)制及應(yīng)用涯鲁。

前面一段時(shí)間搞了驅(qū)動(dòng)方面的,突然感覺(jué)得搞下圖形界面的有序,以前一直對(duì)window窗口平臺(tái)及l(fā)inux x系統(tǒng)窗體機(jī)制很感興趣抹腿,于是上網(wǎng)搜了下,發(fā)現(xiàn)當(dāng)前流行minigui旭寿,這個(gè)好像是嵌入式系統(tǒng)比較流行的警绩,在網(wǎng)上看了些資料,下了源碼盅称,及例子程序肩祥,例子在qvsb上跑起來(lái)了,但在framebuffer下運(yùn)行失敗缩膝,所以覺(jué)得是該將窗口機(jī)制深入研究了混狠,于是看了源代碼,后來(lái)發(fā)現(xiàn)看minigui有點(diǎn)累疾层,因?yàn)檫@款GUI盡管源碼量不大将饺,由于其為了保持高度兼容及抽象,代碼已經(jīng)變得復(fù)雜了痛黎,再加上網(wǎng)上對(duì)此源碼級(jí)機(jī)制分析的基本沒(méi)有予弧,只有如何使用的,所以我看了半天湖饱,只懂了一些桌肴,這時(shí)正好在網(wǎng)上搜到一條有關(guān)窗體機(jī)制分析的文章,是《精通嵌入式Linux編程——構(gòu)建自己的GUI環(huán)境》李玉東著,并且其就是針對(duì)LGUI這一版本的琉历,且有源代碼坠七,這正好合我口味水醋,于是我就開(kāi)始看LGUI的源碼了,越看越有勁彪置,于是看了將近一天拄踪,差不了,于是開(kāi)始實(shí)踐了拳魁。

后來(lái)才發(fā)覺(jué)這只是半步惶桐,在redhat9上實(shí)踐時(shí)就發(fā)現(xiàn)了很多問(wèn)題。下面我就針對(duì)我實(shí)踐過(guò)程中出現(xiàn)的問(wèn)題及解決方案及設(shè)計(jì)到的知識(shí)談一下潘懊。

1. gui及minigui在redhat9用framebuffer模式運(yùn)行時(shí):運(yùn)行前對(duì)于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提示沒(méi)有找到圖形引擎授舟,使用dummy引擎救恨。而lgui更是運(yùn)行不了,段錯(cuò)誤释树,后來(lái)我于是調(diào)試lgui,發(fā)現(xiàn)initframebuffer時(shí)出錯(cuò)了肠槽,于是我猜測(cè)是/dev/fb0文件有問(wèn)題,后來(lái)一看果然沒(méi)有這個(gè)文件奢啥。網(wǎng)上搜了一下資料秸仙,發(fā)現(xiàn)內(nèi)核盡管編譯了framebuffer,但默認(rèn)是關(guān)閉的,要通過(guò)如下方式解決桩盲。在/boot/grub/grub.conf加入一個(gè)段落:

title MiniGUI1.6.2

root(hd0,0)

kernel /vmlinuz-2.4.20Xroot=/……(你的內(nèi)核名稱) vga=0x0317 fb:on

即在root后面添加vga=0x0314 fb:on寂纪。這樣下來(lái)后發(fā)現(xiàn),還是沒(méi)有解決問(wèn)題赌结,后來(lái)感覺(jué)是不是framebuffer這方面我了解的不夠啊捞蛋,于是上網(wǎng)查資料,發(fā)現(xiàn)資料好少姑曙,感覺(jué)是不是這個(gè)技術(shù)現(xiàn)在不行了啊襟交,不過(guò)為了實(shí)踐迈倍,管他好不好了伤靠,只得去看,看了一下發(fā)現(xiàn)沒(méi)有講這方面的啼染,但看多了宴合,突然有了一個(gè)想法,是不是framebuffer模式不能在x console下運(yùn)行迹鹅,于是乎改為文本模式卦洽。

2.? 在文本模式下運(yùn)行

結(jié)果:minigui正確顯示,但是鼠標(biāo)還是不行斜棚,沒(méi)反應(yīng)阀蒂,不過(guò)已經(jīng)讓我高興了该窗,因?yàn)橹辽儆羞M(jìn)步啊,于是乎想到是不是鼠標(biāo)設(shè)備文件有問(wèn)題蚤霞,上網(wǎng)查了酗失,改為/dev/input/mice還是不行,這下郁悶了昧绣,不過(guò)既然能夠顯示出來(lái)规肴,我就可以試驗(yàn)lgui了,因?yàn)閘gui我已經(jīng)看懂了夜畴,可以修改源碼了拖刃,我最終的目的是運(yùn)行l(wèi)gui,但是在google搜了一下Lgui發(fā)現(xiàn)幾乎沒(méi)有這個(gè)gui的文章贪绘,更別說(shuō)在linux編譯運(yùn)行及配置了兑牡,看來(lái)只有自己測(cè)試了,由于對(duì)源碼有了了解兔簇,這個(gè)過(guò)程在沒(méi)有資料的情況下也不算太糟糕发绢,編譯沒(méi)有錯(cuò)誤,此時(shí)運(yùn)行還是段錯(cuò)誤.segment fault垄琐,于是用gdb調(diào)試边酒,發(fā)現(xiàn)是鼠標(biāo)設(shè)備文件問(wèn)題,于是改了設(shè)備文件還是有問(wèn)題狸窘,還是已經(jīng)是正常退出錯(cuò)誤墩朦,我高興了,因?yàn)橛凶兓鸵馕墩咿D(zhuǎn)機(jī)翻擒,于是進(jìn)一步調(diào)試發(fā)現(xiàn)是源代碼的錯(cuò)誤氓涣,讀環(huán)境變量錯(cuò)誤,自己加上去陋气,終于正常運(yùn)行了劳吠,顯示圖形出來(lái)了。

/* 圖形加載失敗 */

這個(gè)時(shí)候真的功夫不負(fù)有心人啊巩趁。當(dāng)然和Minigui一個(gè)樣還有一個(gè)問(wèn)題痒玩,就是鼠標(biāo)沒(méi)有,并且鼠標(biāo)移動(dòng)時(shí)會(huì)擦除圖形议慰,但是已經(jīng)有了很大提高了啊蠢古,這個(gè)時(shí)候就是做到這一步又用了一天,有時(shí)發(fā)現(xiàn)别凹,當(dāng)一個(gè)問(wèn)題解決沒(méi)解決草讶,你一天都給耗了。

經(jīng)過(guò)上面發(fā)現(xiàn)比較還是鼠標(biāo)問(wèn)題炉菲,于是搜索堕战,但一無(wú)所獲坤溃,就在我快要放棄的時(shí)候,我采取試試看的心態(tài)嘱丢,將此程序放到federal 10運(yùn)行浇雹,結(jié)果完全正確,鼠標(biāo)有動(dòng)作了屿讽,我高興級(jí)了昭灵,但是鼠標(biāo)所到之處都給擦除了,我分析這個(gè)是命令行下的鼠標(biāo)顯示時(shí)刷新屏幕所為伐谈,所以我覺(jué)得只要我隱藏鼠標(biāo)烂完,這個(gè)問(wèn)題就能解決,上網(wǎng)搜索還是很少資料诵棵,不過(guò)偶然中發(fā)現(xiàn)有個(gè)console下gpm鼠標(biāo)驅(qū)動(dòng)的抠蚣,于是試圖去關(guān)閉它,奇跡出現(xiàn)了履澳,鼠標(biāo)終于不見(jiàn)了∷徽現(xiàn)在終于運(yùn)行正常了。試驗(yàn)剛剛成功了距贷。

3. 總結(jié)

文本模式下鼠標(biāo)動(dòng)作是由叫g(shù)pm捕捉鼠標(biāo)事件并改變鼠標(biāo)位置柄冲,于是每次鼠標(biāo)改變它都要刷新鼠標(biāo)所在位置屏幕,于是就有了所到之處擦除的景象忠蝗,解決后并更換背景圖片后運(yùn)行圖形如下:

/* 圖形加載失敗 */

但是相比minugui现横,lgui沒(méi)有移動(dòng)窗體功能,于是我更改了代碼阁最,也實(shí)現(xiàn)了戒祠,現(xiàn)在想來(lái)有時(shí)真的遇到棘手的問(wèn)題不要放棄并尋找不同方式可能就有意外的收獲,不要輕易放棄任何可能速种。

上面出現(xiàn)的問(wèn)題 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?解決方案

1.linux版本問(wèn)題 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? redhat9換到federal10

2.運(yùn)行模式問(wèn)題 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x console換到文本模式

3.配置問(wèn)題 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?配置為framebuffer開(kāi)機(jī)開(kāi)啟

4.源代碼BUG ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?用gdb調(diào)試姜盈,發(fā)現(xiàn)問(wèn)題解決

GUI窗口機(jī)制推薦看精通《嵌入式Linux編程——構(gòu)建自己的GUI環(huán)境》李玉東著。

附百度云網(wǎng)盤(pán)鏈接:http://pan.baidu.com/s/1c2I3wlE?

密碼:74pn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末配阵,一起剝皮案震驚了整個(gè)濱河市馏颂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闸餐,老刑警劉巖饱亮,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矾芙,死亡現(xiàn)場(chǎng)離奇詭異舍沙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)剔宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)拂铡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)壹无,“玉大人,你說(shuō)我怎么就攤上這事感帅《范В” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵失球,是天一觀的道長(zhǎng)岖是。 經(jīng)常有香客問(wèn)我,道長(zhǎng)实苞,這世上最難降的妖魔是什么豺撑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮黔牵,結(jié)果婚禮上聪轿,老公的妹妹穿的比我還像新娘。我一直安慰自己猾浦,他們只是感情好陆错,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著金赦,像睡著了一般音瓷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夹抗,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天外莲,我揣著相機(jī)與錄音,去河邊找鬼兔朦。 笑死偷线,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沽甥。 我是一名探鬼主播声邦,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摆舟!你這毒婦竟也來(lái)了亥曹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恨诱,失蹤者是張志新(化名)和其女友劉穎媳瞪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體照宝,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛇受,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厕鹃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兢仰。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乍丈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出把将,到底是詐尸還是另有隱情轻专,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布察蹲,位于F島的核電站请垛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洽议。R本人自食惡果不足惜叼屠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绞铃。 院中可真熱鬧镜雨,春花似錦、人聲如沸儿捧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菲盾。三九已至颓影,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間懒鉴,已是汗流浹背诡挂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留临谱,地道東北人璃俗。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悉默,于是被迫代替她去往敵國(guó)和親城豁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,104評(píng)論 25 707
  • 1抄课、窗體 1唱星、常用屬性 (1)Name屬性:用來(lái)獲取或設(shè)置窗體的名稱,在應(yīng)用程序中可通過(guò)Name屬性來(lái)引用窗體跟磨。 ...
    Moment__格調(diào)閱讀 4,548評(píng)論 0 11
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音叹话。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 99,260評(píng)論 9 467
  • 城市的喧囂在一只貓里轉(zhuǎn)身 像是被遺棄了,又像被殺死了一樣 一雙幼稚的貓眼 那么柔弱地打量這個(gè)世界 真正的冬季來(lái)臨之...
    倚夢(mèng)閑話閱讀 187評(píng)論 0 3
  • (十) 走在路上墩瞳,我的心情特別的好驼壶,雖然我也不知道為什么。 看我經(jīng)常偷瞟他喉酌,他也不好意思了热凹,咧開(kāi)嘴笑了笑,然后說(shuō):...
    沈白_閱讀 416評(píng)論 0 2