microwin程序设计
时间:2009-07-23 来源:hwa_super
microwindows是嵌入式应用很广泛的一个平台
本篇首先要簡單說明一下 Microwindows 的基本概念與架構,然後再說明讓 Microwindows 支援 X11 的編譯方式,最後則是一個 Hello World 的程式。一開始我們會先在 X 上發展 Microwindows 的程式,在之後的專欄裡我們會適時將發展環境移到 Embedded Linux 系統。
Microwindows 的網路資源
官方網站: http://www.microwindow.org
SDK 手冊: http://embedded.centurysoftware.com/docs/nx/
入門文件 (Getting Started): http://home.twcny.rr.com/embedded/microwin/install/index.html
下載 (原始碼): windows.org/pub/microwindows/microwindows-0.89.tar.gz">ftp://microwindows.org/pub/microwindows/microwindows-0.89.tar.gz
下載 (字型, 含中文字型): windows.org/pub/microwindows/microwindows-fonts-0.89.tar.gz">ftp://microwindows.org/pub/microwindows/microwindows-fonts-0.89.tar.gz
Microwindows 簡介
分層式架構 (Layered Design)
Microwindows 是採用 3 層式架構設計,共分為 3 層:
lowest level - 螢幕, mouse/touchpad, keyboard 與其它硬體的 driver.
mid level - 可移植 (portable) 與 device-independent 的繪圖引擎 (graphics engine).
upper level - 提供給 programmer 的 API, 我們的程式只能呼叫 Microwindows 的 API 來繪圖.
我們所要學的就是最上層的 API, 本專欄的主要目的就是在介紹 Microwindows API 的使用方法。 Microwindows 的 Linux Driver 支援 在螢幕方面,Microwindows 支援 Linux 2.2.x 的 framebuffer,在 16-bit Embedded Linux kernel (ELKS) 也可運作。 在滑鼠方面,Microwindows 支援 GPM 與 serial port 滑鼠;另外也有 touch panel 的軀動程式。 在鍵盤方面,Microwindows 支援 tty 鍵盤讀取,在 Linux 與 ELKS 都可運作。 Hardware Device
Driver
Linux 2.2.x framebuffer
scr_fb.c fb.c fblin.c
GPM Mouse
mou_gpm.c
Serial Mouse
mou_ser.c
Touch Panel
mou_tp.c
tty keyboard
kbd_tty.c Microwindows 的 API Microwindows 有 2 種不同的 API: Microwindows API
Nano-X API
Microwindows API 與 Microsoft Win32 和 WinCE GDI 相容,因此使用 Microwindows API 的視窗系統為 message-based 的架構 (也就是 message-passing system 的視窗系統)。 Nano-X API 可以概略的比喻為小型的 X server 系統,Nano-X API 是依據 Xlib API 來設計。因此可以很直覺的了解到,利用 Nano-X API 所設計的視窗系統為 client/server 架構。 Microwindows 的優點 1. 在 PC 上支援 X,易於測試發展。 2. 針對 Embedded System 支援 framebuffer。 3. 系統小。 4. API 簡單易學。 5. 支援 TrueType fonts 字型處理。 6. 支援 ARM/MIPS/ELKS。 * ELKS 是 16-bit 的 Linux kernel 安裝 Microwindows Microwindows 不但可以在 framebuffer 上跑,也可以在 X 上跑。一開始學 Microwindows 時,我們會先在 X 上測試,所以沒有特別說明的話之後的 Microwindows 程式都是在 X Window System 上跑 。 要讓 Microwindows 在 X 上執行,編譯前要先做一些設定: 1. 先下載 microwindows 並解開。 2. 執行 X Window System,進入圖形環境;到 microwin-0.89/src/ 執行 xconfigure。(圖 1)
圖 1:Microwindows 設定介面 3. 然後選取下面幾個項目: Compiling options -> Optimize Platform -> Linux (native) Platform -> Linux (native) -> Options -> Screen driver -> X11 (再點 options 可設定解析度) Platform -> Linux (native) -> Options -> Mouse driver -> GPM mouse (視您的滑鼠而訂) Platform -> Linux (native) -> Options -> Keyboard driver -> TTY I/O -> Have File I/O I/O -> Have bmp support I/O -> Have jpeg support I/O -> Have freetype support (truetype fonts) (再點 options 設定路徑, 請使用 Free Type 1, Red Hat Linux 7.x 以後的使用者應設定 include dir 為 /usr/include/freetype1, 因為筆者會講到中文字型, 所以請勾選 freetype 支援) Libraries to compile -> NanoX (本文只講 NanoX, 所以 Microwindows 不用選) Libraries to compile -> Libraries to Shared libs (可選可不 選, 因為現階段還不會 porting 到 Embedded System, 沒什麼關係!) Libraries to compile -> NanoX -> Options -> Enable shared mem support Libraries to compile -> NanoX -> Options -> Compile demos (不想編譯範例的話可以不選) 4. 設定好後在 microwin-0.89/src/ 下執行 make 開始編譯。 5. 編譯好後打 make install 安裝。因為我們有勾選 shared libraries,所以可以把下面這幾個檔案殺掉 (不殺也行!): /usr/lib/libmwdrivers.a
/usr/lib/libmwengine.a
/usr/lib/libmwfonts.a
/usr/lib/libmwobjects.a
/usr/lib/libnano-X.a
/usr/lib/libvncauth.a 6. 然後到 microwin-0.89/src/bin/ 下執行範例: $ ./nano-X & sleep 1 (執行 Microwindows 的 nano X server) $ ./nanowm & sleep 1 (執行 anao X server 的 Window Manager) $ ./demo & (執行展示程式) 7. 如果可以看到這個畫面,表示 Microwindows 安裝成功。接下來就可以開始寫第一個程式了! Nano-X API 入門 - Hello World * 本專欄以 Nano-X API 為主,對 Microwindows API 有興趣的網友可參考官方網站的文件。 #include <stdio.h>#include <microwin/nano-X.h>GR_WINDOW_ID wid;GR_GC_ID gc;void event_handler (GR_EVENT *event);int main (void){ if (GrOpen() < 0) { fprintf (stderr, "GrOpen failed"); exit (1); } gc = GrNewGC(); GrSetGCForeground (gc, 0xFF0000); wid = GrNewWindowEx(GR_WM_PROPS_APPFRAME | GR_WM_PROPS_CAPTION | GR_WM_PROPS_CLOSEBOX, "jollen.org", GR_ROOT_WINDOW_ID, 0, 0, 200, 200, 0xFFFFFF); GrSelectEvents(wid, GR_EVENT_MASK_CLOSE_REQ | GR_EVENT_MASK_EXPOSURE); GrMapWindow(wid); GrMainLoop(event_handler);}void event_handler (GR_EVENT *event){ switch (event->type) { case GR_EVENT_TYPE_EXPOSURE: GrText(wid, gc, 50, 50, "Hello World", -1, GR_TFASCII); break; case GR_EVENT_TYPE_CLOSE_REQ: GrClose(); exit (0); default: break; }}
這是一個 Microwindows 的 Hello World 程式,編譯時要連結 nano-X 程式庫: gcc -o hello hello.c -lnano-X 利用這個程式我們就可以測試是否能順利編譯並執行 Microwindows 系統,在執行程式前,別忘了跑 nano-X 跟nanowm 喔!
圖 2:Hello World 下一期我們將開始解說這個程式的內容,與更多的 Microwindows 程式設計。 文章出处:http://www.diybl.com/course/6_system/linux/linuxjq/2007211/16830.html
mid level - 可移植 (portable) 與 device-independent 的繪圖引擎 (graphics engine).
upper level - 提供給 programmer 的 API, 我們的程式只能呼叫 Microwindows 的 API 來繪圖.
我們所要學的就是最上層的 API, 本專欄的主要目的就是在介紹 Microwindows API 的使用方法。 Microwindows 的 Linux Driver 支援 在螢幕方面,Microwindows 支援 Linux 2.2.x 的 framebuffer,在 16-bit Embedded Linux kernel (ELKS) 也可運作。 在滑鼠方面,Microwindows 支援 GPM 與 serial port 滑鼠;另外也有 touch panel 的軀動程式。 在鍵盤方面,Microwindows 支援 tty 鍵盤讀取,在 Linux 與 ELKS 都可運作。 Hardware Device
Driver
Linux 2.2.x framebuffer
scr_fb.c fb.c fblin.c
GPM Mouse
mou_gpm.c
Serial Mouse
mou_ser.c
Touch Panel
mou_tp.c
tty keyboard
kbd_tty.c Microwindows 的 API Microwindows 有 2 種不同的 API: Microwindows API
Nano-X API
Microwindows API 與 Microsoft Win32 和 WinCE GDI 相容,因此使用 Microwindows API 的視窗系統為 message-based 的架構 (也就是 message-passing system 的視窗系統)。 Nano-X API 可以概略的比喻為小型的 X server 系統,Nano-X API 是依據 Xlib API 來設計。因此可以很直覺的了解到,利用 Nano-X API 所設計的視窗系統為 client/server 架構。 Microwindows 的優點 1. 在 PC 上支援 X,易於測試發展。 2. 針對 Embedded System 支援 framebuffer。 3. 系統小。 4. API 簡單易學。 5. 支援 TrueType fonts 字型處理。 6. 支援 ARM/MIPS/ELKS。 * ELKS 是 16-bit 的 Linux kernel 安裝 Microwindows Microwindows 不但可以在 framebuffer 上跑,也可以在 X 上跑。一開始學 Microwindows 時,我們會先在 X 上測試,所以沒有特別說明的話之後的 Microwindows 程式都是在 X Window System 上跑 。 要讓 Microwindows 在 X 上執行,編譯前要先做一些設定: 1. 先下載 microwindows 並解開。 2. 執行 X Window System,進入圖形環境;到 microwin-0.89/src/ 執行 xconfigure。(圖 1)
圖 1:Microwindows 設定介面 3. 然後選取下面幾個項目: Compiling options -> Optimize Platform -> Linux (native) Platform -> Linux (native) -> Options -> Screen driver -> X11 (再點 options 可設定解析度) Platform -> Linux (native) -> Options -> Mouse driver -> GPM mouse (視您的滑鼠而訂) Platform -> Linux (native) -> Options -> Keyboard driver -> TTY I/O -> Have File I/O I/O -> Have bmp support I/O -> Have jpeg support I/O -> Have freetype support (truetype fonts) (再點 options 設定路徑, 請使用 Free Type 1, Red Hat Linux 7.x 以後的使用者應設定 include dir 為 /usr/include/freetype1, 因為筆者會講到中文字型, 所以請勾選 freetype 支援) Libraries to compile -> NanoX (本文只講 NanoX, 所以 Microwindows 不用選) Libraries to compile -> Libraries to Shared libs (可選可不 選, 因為現階段還不會 porting 到 Embedded System, 沒什麼關係!) Libraries to compile -> NanoX -> Options -> Enable shared mem support Libraries to compile -> NanoX -> Options -> Compile demos (不想編譯範例的話可以不選) 4. 設定好後在 microwin-0.89/src/ 下執行 make 開始編譯。 5. 編譯好後打 make install 安裝。因為我們有勾選 shared libraries,所以可以把下面這幾個檔案殺掉 (不殺也行!): /usr/lib/libmwdrivers.a
/usr/lib/libmwengine.a
/usr/lib/libmwfonts.a
/usr/lib/libmwobjects.a
/usr/lib/libnano-X.a
/usr/lib/libvncauth.a 6. 然後到 microwin-0.89/src/bin/ 下執行範例: $ ./nano-X & sleep 1 (執行 Microwindows 的 nano X server) $ ./nanowm & sleep 1 (執行 anao X server 的 Window Manager) $ ./demo & (執行展示程式) 7. 如果可以看到這個畫面,表示 Microwindows 安裝成功。接下來就可以開始寫第一個程式了! Nano-X API 入門 - Hello World * 本專欄以 Nano-X API 為主,對 Microwindows API 有興趣的網友可參考官方網站的文件。 #include <stdio.h>#include <microwin/nano-X.h>GR_WINDOW_ID wid;GR_GC_ID gc;void event_handler (GR_EVENT *event);int main (void){ if (GrOpen() < 0) { fprintf (stderr, "GrOpen failed"); exit (1); } gc = GrNewGC(); GrSetGCForeground (gc, 0xFF0000); wid = GrNewWindowEx(GR_WM_PROPS_APPFRAME | GR_WM_PROPS_CAPTION | GR_WM_PROPS_CLOSEBOX, "jollen.org", GR_ROOT_WINDOW_ID, 0, 0, 200, 200, 0xFFFFFF); GrSelectEvents(wid, GR_EVENT_MASK_CLOSE_REQ | GR_EVENT_MASK_EXPOSURE); GrMapWindow(wid); GrMainLoop(event_handler);}void event_handler (GR_EVENT *event){ switch (event->type) { case GR_EVENT_TYPE_EXPOSURE: GrText(wid, gc, 50, 50, "Hello World", -1, GR_TFASCII); break; case GR_EVENT_TYPE_CLOSE_REQ: GrClose(); exit (0); default: break; }}
這是一個 Microwindows 的 Hello World 程式,編譯時要連結 nano-X 程式庫: gcc -o hello hello.c -lnano-X 利用這個程式我們就可以測試是否能順利編譯並執行 Microwindows 系統,在執行程式前,別忘了跑 nano-X 跟nanowm 喔!
圖 2:Hello World 下一期我們將開始解說這個程式的內容,與更多的 Microwindows 程式設計。 文章出处:http://www.diybl.com/course/6_system/linux/linuxjq/2007211/16830.html
相关阅读 更多 +