本文主要是介绍在andriod中加入抓屏软件fbdump.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目标:将fbdump-0.4.2放到andrioid中运行,能够抓framebuff中的桌面。
方法:
1 将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
当然是否真的是这个原因造成的还得靠你自己分析。
这篇关于在andriod中加入抓屏软件fbdump.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!