在桌面级操作系统中,下载一个截图软件就能实现截屏操作,但在嵌入式Linux系统中,要实现小小的截图功能却没有那么简单。本文为您介绍嵌入式Linux系统中实现截屏功能的方法和步骤。
一、原理
由于 Linux 系统的 FrameBuffer 机制,会把屏幕上的每个点映射成一段线性内存空间,程序就可以通过改变这段内存的值来改变屏幕上某一点的颜色。屏幕色彩的原始数据保存在/dev/fb0文件内,因此我们可以直接cat /dev/fb0 > fb.raw读取该文件获得数据。

图1 原始截屏数据
显然,这种原始数据无法通过简单的工具直接查看,特别是在精简的嵌入式Linux系统上。因此,我们找到了一个不错的工具——gsnap。这个工具可以将framebuffer中的数据直接保存为png或者jpeg格式的图片。当然,我们需要获得该工具的源码,并且在交叉编译后移植它。
二、 原材料
本次尝试笔者选择ZLG开源开发套件EasyARM-i.MX283A3,宿主机选用Ubuntu14.04。首先,我们需要获取gsnap源码,该源码可在网络中搜索下载。源码解压后得到的文件如图2:

图2 gsnap源码
其中gsnap.c为解析算法,感兴趣的读者可以打开研究,本文我们不做分析。我们直接打开跟编译相关的Makefile文件,内容如下图所示。从下图可知,该源码依赖libpng、libjpeg、zlib、libmath四种库。由于交叉编译器的库种包含有libmath,因此我们需要准备好另外三种库备用。
图3 gsnap的Makefile
解压后得到的文件如图4。(源码包可从库官网或论坛下载)
图4 库的源码包解压
三、交叉编译
第一步,交叉编译libjpeg。
进入到源码目录,执行./configure --host=arm-linux --prefix=/home/vmuser/gsnap/jpeg_install/,然后执行make、make install ,在安装目录/home/vmuser/gsnap/jpeg_install/得到交叉编译过的库。
图5 交叉编译libjpeg
第二步,交叉编译zlib。
由于zlib是libpng的依赖,因此必须首先编译zlib。由于zlib中的configure并未提供--host参数,因此需要为它手动指明交叉编译器:export CC=arm-fsl-linux-gnueabi-gcc,然后执行./configure --prefix=/home/vmuser/gsnap/z_install/,make、make install 。得到的文件类同第一步,不再放图。
第三步,交叉编译libpng。
与上述两步骤又不同,libpng中提供有Linux平台下的Makefile例程,我们可以直接拿来修改使用。进入到libpng的源码目录,执行拷贝cp scripts/makefile.linux Makefile,然后打开Makefile修改,如图6。修改的内容为交叉编译器名称和依赖的zlib的路径。最后make、makeinstall得到头文件可库文件。
图6 修改libpng的Makefile
第四步,交叉编译gsnap。
为方便起见,我们将上述得到的库文件和头文件分别集中拷贝到自行建立的lib和includes目录下,并且修改gsnap的Makefile。执行make后就能得到可执行文件gsnap。
图7 修改gsnap的Makefile
四、验证
将得到的gsnap可执行文件拷贝到目标板的/opt目录下,执行截屏命令:./gsnap fb.jpg /dev/fb0,将得到的截屏fb.jpg拷贝到ubuntu中可得图8:
图8 截屏得到的图片
至此,gsnap的编译与移植工作结束。各位小伙伴若在嵌入式Linux开发中遇到问题,欢迎与ZLG电子工程师交流。
原文标题:【教程】嵌入式Linux中如何进行截屏?
文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。
相关推荐
主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。例如,在下面....
发表于 05-27 15:55 •
133次
阅读
RT-Thread全球技术大会:RT-Thread Smart更好的兼容Linux生态 ....
./oschina_soft/fifoirc.zip
发表于 05-27 11:16 •
6次
阅读
5月25日,智芯公司自主研发的嵌入式操作系统——枢纽4.0(以下简称枢纽4.0)获工信部赛宝实验室功....
科技见闻网 发表于 05-27 11:11
•
232次
阅读
./oschina_soft/qqbot.zip
发表于 05-27 11:06 •
3次
阅读
./oschina_soft/hexchat.zip
发表于 05-27 10:44 •
6次
阅读
RT-Thread全球技术大会:嵌入式实时操作系统的昨天、今天和明天 主要从四个方面进行介绍,首先对....
牵手一起梦 发表于 05-27 10:42
•
121次
阅读
./oschina_soft/p2pvc.zip
发表于 05-27 10:39 •
3次
阅读
./oschina_soft/webqq-console.zip
发表于 05-27 10:37 •
6次
阅读
./oschina_soft/gitee-spark-store.zip
发表于 05-27 09:38 •
6次
阅读
Linux Lite 5.8还附带一些优秀的软件包,如Mozilla Firefox 96、Thun....
本篇使用两种I/O模型进行按键读取:阻塞式I/O和非用阻塞式I/O,通过实际的实验,对比两者方式的实....
码农爱学习 发表于 05-27 09:08
•
931次
阅读
当然也有人不在乎在这一点,Linus认为内核中有bug正常,有bug就找到它、修复它而不是用某种机制....
./oschina_soft/extraterm.zip
发表于 05-26 16:52 •
10次
阅读
自连解决方案通过对手术室内各类医疗器械无线联网升级,例如呼吸机、监测仪、手术显微镜、内窥镜、麻醉站、....
科技绿洲 发表于 05-26 16:42
•
235次
阅读
./oschina_soft/rj-aux.zip
发表于 05-26 16:40 •
6次
阅读
./oschina_soft/ansiparser.zip
发表于 05-26 16:36 •
7次
阅读
近日,统信软件与北京数字认证、广电五舟、海量数据、金蝶天燕联合推出了网络安全解决方案。
科技绿洲 发表于 05-26 16:32
•
170次
阅读
./oschina_soft/teleport.zip
发表于 05-26 16:30 •
4次
阅读
./oschina_soft/notty.zip
发表于 05-26 16:29 •
6次
阅读
./oschina_soft/babun.zip
发表于 05-26 16:18 •
6次
阅读
./oschina_soft/cronnest.zip
发表于 05-26 16:05 •
6次
阅读
./oschina_soft/tilix.zip
发表于 05-26 16:00 •
6次
阅读
./oschina_soft/cowrie.zip
发表于 05-26 15:58 •
6次
阅读
./oschina_soft/googler.zip
发表于 05-26 15:37 •
4次
阅读
./oschina_soft/gitee-webssh.zip
发表于 05-26 15:32 •
4次
阅读
Netfilter (配合 iptables)使得用户空间应用程序可以注册内核网络栈在处理数据包时应....
./oschina_soft/fish-shell.zip
发表于 05-26 15:27 •
4次
阅读
./oschina_soft/osnssh.zip
发表于 05-26 15:18 •
6次
阅读
./oschina_soft/wemux.zip
发表于 05-26 15:15 •
4次
阅读
近日,摩尔线程MTT S系列GPU与中望二三维CAD Linux版产品完成兼容性认证。
科技绿洲 发表于 05-26 15:06
•
288次
阅读
./oschina_soft/finalterm.zip
发表于 05-26 15:02 •
4次
阅读
./oschina_soft/FreeRDP.zip
发表于 05-26 15:01 •
6次
阅读
./oschina_soft/shelr.zip
发表于 05-26 14:55 •
4次
阅读
./oschina_soft/caprine.zip
发表于 05-26 14:48 •
4次
阅读
./oschina_soft/docker-wechat.zip
发表于 05-26 14:41 •
6次
阅读
./oschina_soft/BetterDiscord.zip
发表于 05-26 14:38 •
6次
阅读
./oschina_soft/gitee-roby-chatbot.zip
发表于 05-26 11:31 •
8次
阅读
./oschina_soft/gitee-CHAT-ROBOT.zip
发表于 05-26 11:28 •
6次
阅读
./oschina_soft/minicom.zip
发表于 05-26 09:09 •
15次
阅读
本篇介绍了Linux中的五种I/O模型:阻塞式I/O模型、非阻塞式I/O模型、I/O复用模型、信号驱....
码农爱学习 发表于 05-26 09:05
•
1135次
阅读
./oschina_soft/stjerm.zip
发表于 05-26 09:05 •
20次
阅读
注意事项:
本篇介绍的是通过docker安装 Home Assistant 的方式,并且只提供在 Ubuntu 或者 Debian 系统中的安装方法, H...
发表于 05-25 19:41 •
1214次
阅读
前段时间为大家介绍的自然语言分析NLA这一项由Smartbi独家研发的产品功能,在后台接受到了很多比....
环音仪说数据 发表于 05-25 18:10
•
235次
阅读
在我国加工制造领域和各种生产领域之中相关的自动化技术应用之下,要求更多专业的控制主板来提高系统运转的....
嵌入式主板一般理解为嵌入在设备里面做控制、数据处理使用的CPU板,也就是设备的"大脑"。嵌入式到设备....
市场正在提供越来越多的带有硬件加密引擎的高端通用微控制器。然而,仅仅因为微控制器具有硬件加密引擎....
驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口。
振弦采集模块VM系列,如何修改通讯速率?
发表于 05-25 10:43 •
1491次
阅读
本文分析的enomai系统中的内存池(xnheap)管理机制。
这个压缩包明显从windows打包的。有人用过吗,一个一个目录改太烦躁了!
```sh
[calvin RISC-V Embedded GCC/bin...
发表于 05-25 07:18 •
80次
阅读
前 言本文主要基于我司TL5728F-EVM评估板 + 移远RM500Q 5G模块演示5G网络的功能。
本指导文档适用开发环境:Window...
发表于 05-24 17:26 •
1136次
阅读
发表于 05-24 09:41 •
1200次
阅读
使用 rt 半年了,印象里网上的资料都说 rt 是类似于 linux 的,感觉也像,但是又感觉有点不一样,就是 linux 的设备树里换个设备...
发表于 05-23 09:37 •
2200次
阅读
PRU-ICSS(可编程实时单元子系统和工业通信子系统,简称PRU)由双32位RISC核(PRU可编程实时单元)、共享数据和...
发表于 05-20 17:10 •
5577次
阅读
imx6 开发板网络相关配置 声明:
每位 imx6开 发板 用户的网络使用环境未必相同,本次操作基于飞凌嵌入式imx6开发板, 网络环境...
发表于 05-20 15:10 •
3639次
阅读
了解基础的5g NR (新无线电) ,包括其频带,应用,什么技术使之成为可能
5G 是无线智能手机通...
发表于 05-20 10:33 •
782次
阅读
TI AM437x高性能处理器基于ARM Cortex-A9内核。
这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。
这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。
这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。
处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。
可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
发表于 09-25 11:51 •
632次
阅读
评论