簡體   English   中英

如何在Mono中訪問Linux Framebuffer(Mono.Cairo / GTK#)?

[英]How to access a Linux Framebuffer in Mono (Mono.Cairo / GTK#)?

我開始在Mono框架下為Linux編寫一個小應用程序,該應用程序本質上是一個小型的kiosk前端,用戶交互非常少。 這是為了替換基於100%文本/控制台的同一應用程序的先前版本。

由於這將在Raspberry Pi上運行,我想避免運行X並讓我的應用程序直接與Framebuffer通信。 我開始使用Mono框架和C#作為我的開發語言,因為我非常了解C#。 在這種情況下,可移植性不是問題。

我在查找適當的庫和綁定時遇到了一些麻煩,讓我從Mono訪問Framebuffer。 GTK#庫都明確綁定到X11接口,無論如何,在Debian Wheezy中似乎沒有為ARM Soft-Float(armel)架構預構建的GtkFB庫。

Mono.Cairo庫公開了一個DirectFBSurface類型,但是該表面的構造函數需要兩個IntPtr參數並且沒有記錄,因此我不知道應該將哪些內容傳遞給構造函數以正確初始化Framebuffer作為Cairo Surface。

有沒有人使用Mono和C#與Linux Framebuffer交談,如果有的話,你能提供基本的例子來初始化並開始繪制到FB,還是指向在線文檔來提供幫助?

更新1

我以為我會嘗試使用null為兩個構造函數參數實例化DirectFBSurface,使用以下代碼:

public static void Main(string[] args)
{
    // ...
    DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
    // ...
}

我希望這會產生一個異常,表明不允許使用null參數值,但是它看起來好像DirectFBSurface沒有在Mono.Cairo實現,或者沒有編譯到Debian Wheezy(armel)附帶的庫中:

Unhandled Exception: System.EntryPointNotFoundException: cairo_directfb_surface_create
  at (wrapper managed-to-native) Cairo.NativeMethods:cairo_directfb_surface_create (intptr,intptr)
  at Cairo.DirectFBSurface..ctor (IntPtr dfb, IntPtr dfb_surface) [0x00000] in <filename unknown>:0
  at Info.Insch.SandBox.TestCairo.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

因此看起來Mono.Cairo方法可能無法滿足我的需求,如上所述, GTK# Framebuffer庫似乎不是Mono.Cairo的Debian Wheezy的一部分。 是否有另一組庫可用於從Mono訪問Linux Framebuffer?

你得到的EntryPointNotFoundException意味着在debian的libcairo.so.2庫中cairo_directfb_surface_create帶有(IntPtr,IntPtr)作為參數的符號cairo_directfb_surface_create 如果在cairo的編譯時沒有啟用directfb,情況可能就是這種情況。 您可以通過以下方式檢查cairo中的directfb支持:

readelf -Ws /usr/lib/libcairo.so.2 | grep directfb

如果結果(輸出)為空,則缺少directfb支持。 在這種情況下,您必須使用傳遞給configure腳本的--enable-directfb參數重新編譯cairo。

我已經在openSUSE 12.1和Fedora 17上測試了盒子,默認情況下兩者似乎都沒有發布directfb啟用的cairo。 我不知道debian,你將不得不測試自己。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM