明月楼高休独倚,酒入愁肠,化作相思泪。——范仲淹《苏幕遮》
最近被这个第三方源软件的安装和Makefile搞得不要不要的,不过还好,正当我头疼的时候,得到了高人指导,下面来谈谈吧。
我们板子LCD的功能实在太多了,不过光是显示一些颜色,画一些图形之类的,没有什么实际应用,只是图个好玩,于是我就学习了一下这个LCD的截图软件,用来截屏,并清晰显示在我们的windows下。下面就来说说我们的流程。
专用的framebuffer截图软件fbgrab需要两个必须库的依赖:
libpng库:http://linux.softpedia.com/get/Programming/Libraries/libpng-167.shtml
zlib库:http://www.zlib.net/
这两个库的安装流程都是和第三方的一样,有Makefile直接make,然后make install。没有的话先 .configure。
然后就是我们的抓图软件fbgrab:
fbgrab:https://fbgrab.monells.se/
下载完成后按照步骤安装并用我们的交叉编译器编译我们的fbgrab,当然,我们得在Makefile中添加我们交叉编译器的路径:gcc=xxxxxxxxx。
这些都做完了以后我们得添加framebuffer对我们fbgrab的支持:
$vim /opt/buildroot-2012.08/boot/grub/menu.lst
在kernel这一行最后添加 vga=0x0317 。然后重新编译我们的内核,烧录开发板中,再将我们的fbgrab传入开发板并给可执行权限。最后运行
./fbgrab xxx.png 即可生成一张.png格式的图片,即当前你的LCD的画面,而framebuffer自带的命令cp xxx > /dev/fb0只能截图,却不能将其转化为我们计算机能识别的图片格式,所以,我们不得不使用fbgrab这个简单实用的软件。
既然实现了截图,那我们可以结合我们的按键驱动,做一个按键截屏并发送到windows下的功能,下面给出代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/fb.h>
#include <sys/mman.h>
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define PLATDRV_MAGIC 0x60
#define OFF _IO (PLATDRV_MAGIC,0x18)
#define ON _IO (PLATDRV_MAGIC,0X19)
int main (int argc, char **argv)
{
int button_fd;
int ret_button;
int current_button;
button_fd = open("/dev/button", 0);
if (button_fd < 0)
{
printf("open button failed.\n");
exit(1);
}
while (1)
{
ret_button = read(button_fd, ¤t_button, sizeof(4));
if (ret_button != sizeof(current_button))
{
printf("Read() button failed.\n");
}
else
{
if (current_button == KEY1)
{
system("./fbgrab 123.png");
}
else if (current_button == KEY2)
{
system("tftp -pr 123.png 192.168.1.8");
}
}
close(button_fd);
return 0;
}