2015-06-20 89 views
1

我需要編寫linux內核模塊,它將在屏幕上的所有其他窗口中顯示消息框。我需要在內核中繪製圖像,不需要從用戶空間應用程序訪問此圖片。我不明白如何做到這一點。我應該使用什麼框架 - framebuffers或v4l?我認爲顯示控制器的直接編程不是一個好主意,因爲內核中有其他的驅動程序已經這樣做了。所以,問題是:如何在內核驅動程序之間進行交互,以及如何指定我的圖片應該位於最前面?屏幕顯示驅動程序

我將不勝感激任何幫助。

回答

0

你不能這樣做,因爲內核不處理GUI,它特別不處理窗口系統。它提供了以各種形式訪問視頻輸出設備的功能,但是屏幕的所有實際繪圖和合成都是在用戶空間中完成的。

現在,內核模塊將有能力重寫幀緩衝區,但是,正如您注意到的那樣,有多個接口用於不同的目的。另外,甚至2D桌面使用3D渲染也很常見。爲您的目的劫持3D命令流將會非常困難。

即使您管理了所有這些,也不能保證用戶空間窗口系統不會立即覆蓋您的消息框。甚至可能在它到達顯示器之前。

所以不行,它不能直接從內核以任何實際的方式完成。你最好的選擇是用戶空間守護進程,像任何其他GUI程序一樣通過標準通道代表你的內核代碼顯示消息。

+0

但是,爲什麼我不能在內核模塊中實現用於用戶空間應用程序的假write()處理程序,並在內核框架調用適當的回調函數時繪製真實圖像?我只想在屏幕上顯示所有其他東西的準備.bmp圖像(如徽標)。 – alien

+0

首先,攔截一個寫另一個驅動程序不應該發生,所以沒有乾淨的方式。其次,當framebuffer是'mmap()'時可能沒有寫入。第三,最普遍的UI渲染可能不是基於像簡單幀緩衝那樣微不足道的東西。做這樣的事情是一個大規模的黑客行爲,需要很長時間才能實現,並可能會破壞下一個內核版本。這是不實際的。 –

+0

我需要做的就是在內核中分配我自己的緩衝區,用圖像填充它,然後讓顯示驅動程序繪製它。與普通幀緩衝驅動程序所做的一樣,不包括與用戶空間應用程序的交互。我不需要任何用戶空間的GUI子系統,因爲我的照片應該放在屏幕的頂部。我真的不能使用內核framebuffer API來做到這一點? – alien

相關問題