DirectFB (Direct FrameBuffer) 是專為嵌入式設計的薄型圖形庫:直接操作 Linux Framebuffer (/dev/fb0),提供硬體 Blitting 加速、視窗系統、多層顯示、Alpha 混合,資源佔用極低,適合機頂盒、車載資訊系統、工控面板等裝置。
| 術語 | 說明 |
|---|---|
| Surface | 像素緩衝區,可位於系統/視訊記憶體,支援雙緩衝 (Flip) |
| Blitting | Surface 間像素高速複製/格式轉換/Alpha 混合,通常由 GPU 硬體加速 |
| Layer | 顯示圖層,硬體支援多圖層疊加 (Alpha blending 由顯示控制器自動合成) |
| Window/WindowStack | 整合視窗系統管理的 Surface,含標題欄、邊框、事件處理 |
| SubSurface | 父 Surface 矩形區域檢視,不獨立分配記憶體 |
linux-fusion (核心模組,提供進程間共享記憶體/同步)
tar zxf linux-fusion-8.10.2.tar.gz
cd linux-fusion-8.10.2
make && make install
modprobe fusion # 載入核心模組
# 建立裝置節點 (若非 udev)
mkdir /dev/fusion
mknod /dev/fusion/0 c 250 0
tar zxf DirectFB-1.6.1.tar.gz
cd DirectFB-1.6.1
./configure --enable-x11 --enable-multi --enable-debug --enable-trace
make && make install
tar zxf DirectFB-examples-1.6.0.tar.gz
cd DirectFB-examples-1.6.0
./configure --enable-debug
make && make install
# 方式 1: ld.so.conf
echo "/usr/local/lib" > /etc/ld.so.conf.d/directfb.conf
ldconfig
# 方式 2: 複製 .pc 檔
find . -name "*.pc" -exec cp {} /usr/lib/pkgconfig/ \;
df_window 執行失敗案例分析(!) Direct/Util: Opening '/dev/fb0' failed!
(!) DirectFB/FBDev: Error opening framebuffer device!
(!) DirectFB/Core: Could not initialize 'system_core' core!
df_window.c <136>: DirectFBError [DirectFBCreate]: A general initialization error occured
/dev/fb0 不存在# 編輯 GRUB 設定
vi /etc/grub.conf
# 修改 kernel 行,加入 vga 參數
kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet vga=788
# vga=788 對應 800x600x16bit,常用對照:
# vga=771 (800x600x256) 773 (1024x768x256) 791 (1024x768x16bit) 794 (1280x1024x16bit)
重開機後 /dev/fb0 出現,df_window 成功顯示視窗。
無 Framebuffer 硬體時,可使用 X11 後端:
# 確保 configure 含 --enable-x11
export DFB_DISPLAY=x11
./df_window # 在 X11 視窗中運行
./configure --host=arm-linux-gnueabihf --with-gfxdrivers=gles2 ...--with-gfxdrivers= 指定 GPU 驅動 (mali, vivante, etnaviv 等)--with-inputdrivers=linuxinput,tslib 支援觸控/鍵盤--disable-debug --disable-trace 發布版大幅減小體積DirectFB 雖非主流桌面選擇,但在資源受限、需硬體加速的嵌入式場景仍具獨特價值。掌握 Framebuffer 驅動、fusion 核心模組、多後端切換,是嵌入式圖形開發的關鍵技能。