轉自http://www.linuxidc.com/Linux/2011-02/32328.htm
目標:將fbdump-0.4.2放到andrioid中運行,能夠抓framebuff中的案頭。
方法:
1 下載http://linux.softpedia.com/progDownload/fbdump-Download-24576.html
將fbdump解壓縮到externel目錄,建立編譯檔案:external/fbdump-0.4.2/Android
.mk
內容如下:
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
charge_local_path := $(LOCAL_PATH)
LOCAL_SRC_FILES := src/main.c /
src/cmap.c /
src/surface.c /
src/convert.c /
src/fb.c /
src/vga.c /
src/vt.c /
src/options.c
LOCAL_MODULE := fbdump
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_CFLAGS += -DPACKAGE='"fbdump"' /
-DVERSION='"0.4.2"' /
-DDEBUG
LOCAL_MODULE_TAGS := eng
LOCAL_STATIC_LIBRARIES := libminzip libunz libminui libpixelflinger_static libpng libcutils libstdc++ libc
include $(BUILD_EXECUTABLE)
修改檔案fbdump-0.4.2/src/config.h
加入#undef SUPPORT_VGA16FB
fbdump-0.4.2/src/vt.c加入
#include <fcntl.h>
上面的Android
.mk是我從其他工程複製過來的,粗略調整一下,有些冗餘。
2 編譯並打包到系統中。
3 運行測試:fbdump -fb /dev/graphics/fb0 >test.ppm
3 附註說明:有些嵌入式linux廠家的提供的linux 中的framebuff驅動不完成,導致fbdump運行直接出錯。根據我目前經驗(至少兩種cpu)一般都是沒有填充pseudo_palette,方法為:
修改probe函數,在register_framebuffer前加入這樣幾句:
//shuaiwen added begin
#define MAX_PALETTES 16
fbinfo->pseudo_palette = kmalloc(sizeof (u32) * MAX_PALETTES, GFP_KERNEL);
if (fb_alloc_cmap(&fbinfo->cmap, 256, 0) < 0) {
printk(KERN_ERR " Can't allocate color map/n");
goto free_video_memory;
}
//shuaiwen added end
當然是否真的是這個原因造成的還得靠你自己分析。