在Android中加入抓屏软件fbdump

    技术2022-05-20  51

    转自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

    当然是否真的是这个原因造成的还得靠你自己分析。


    最新回复(0)