技术文章:嵌入式Linux中如何进行截屏?

发布者:小悟空111最新更新时间:2018-11-01 关键字:Linux 手机看文章 扫描二维码
随时随地手机看文章

在桌面级操作系统中,下载一个截图软件就能实现截屏操作,但在嵌入式Linux系统中,要实现小小的截图功能却没有那么简单。本文为您介绍嵌入式Linux系统中实现截屏功能的方法和步骤。

 

1 . 原理

 

由于 Linux 系统的 FrameBuffer 机制,会把屏幕上的每个点映射成一段线性内存空间,程序就可以通过改变这段内存的值来改变屏幕上某一点的颜色。屏幕色彩的原始数据保存在/dev/fb0文件内,因此我们可以直接cat /dev/fb0 > fb.raw读取该文件获得数据。

 

image.png

 图1  原始截屏数据

 

显然,这种原始数据无法通过简单的工具直接查看,特别是在精简的嵌入式Linux系统上。因此,我们找到了一个不错的工具——gsnap。这个工具可以将framebuffer中的数据直接保存为png或者jpeg格式的图片。当然,我们需要获得该工具的源码,并且在交叉编译后移植它。

 

2 . 原材料

 

本次尝试笔者选择周立功/致远电子开源开发套件EasyARM-i.MX283A3,宿主机选用Ubuntu14.04。首先,我们需要获取gsnap源码,该源码可在网络中搜索下载。源码解压后得到的文件如图2:

 

image.png

 2  gsnap源码

 

其中gsnap.c为解析算法,感兴趣的读者可以打开研究,本文我们不做分析。我们直接打开跟编译相关的Makefile文件,内容如下。从下图可知,该源码依赖libpng、libjpeg、zlib、libmath四种库。由于交叉编译器的库种包含有libmath,因此我们需要准备好另外三种库备用。

 

image.png

 图3  gsnap的Makefile

 

解压后得到的文件如图4。(源码包可从库官网或论坛下载)

 

image.png 

4  库的源码包解压

 

3 . 交叉编译

 

第一步,交叉编译libjpeg。进入到源码目录,执行./configure --host=arm-linux --prefix=/home/vmuser/gsnap/jpeg_install/,然后执行make、make install ,在安装目录/home/vmuser/gsnap/jpeg_install/得到交叉编译过的库。

 

image.png

 图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得到头文件可库文件。

 

image.png

 6  修改libpng的Makefile

 

第四步,交叉编译gsnap。为方便起见,我们将上述得到的库文件和头文件分别集中拷贝到自行建立的lib和includes目录下,并且修改gsnap的Makefile。执行make后就能得到可执行文件gsnap。

 

image.png

 图7  修改gsnap的Makefile

 

4 . 验证

 

   将得到的gsnap可执行文件拷贝到目标板的/opt目录下,执行截屏命令:./gsnap  fb.jpg  /dev/fb0,将得到的截屏fb.jpg拷贝到ubuntu中可得图8。

 

image.png

 8  截屏得到的图片

 

 

 

 

 

 


关键字:Linux 引用地址:技术文章:嵌入式Linux中如何进行截屏?

上一篇:高性能、高能效,ARM全新CryptoCell安全IP缩短上市时间
下一篇:技术突破:基于三维芯片的光量子计算系统问市

推荐阅读最新更新时间:2024-05-03 03:20

linux设备树-按键中断驱动
---------------------------------------------------------------------------------------------------------------------------- 内核版本:linux 5.2.8 根文件系统:busybox 1.25.0 u-boot:2016.05 ---------------------------------------------------------------------------------------------------------------------------- 回到顶部 一、修改设备树
[单片机]
Linux系统下超线程感知的调度算法研究
  随着计算机应用的日益普及,用户对计算机的处理能力的需求成指数级增长。为了满足用户的需求,处理器生产厂商采用了诸如超流水、分支预测、超标量、乱序执行及缓存等技术以提高处理器的性能。但是这些技术的采用增加了微处理器的复杂性,带来了诸如材料、功耗、光刻、电磁兼容性等一系列问题。因此处理器设计人员开始寻找新的途径来提高处理器的性能。Intel公司于2002年底推出了超线程技术,通过共享处理器的执行资源,提高CPU的利用率,让处理单元获得更高的吞吐量。    1 超线程技术背景   传统的处理器内部存在着多种并行操作方式。①指令级并行ILP(Instruction Level Paramllelism):同时执行几条指令,单CP
[嵌入式]
ARM 系列 -- 为 ARM Linux 制作根文件系统
根文件系的组成:目录、Shell、库、脚本 (1)目录 根文件系统要包含的目录:/dev /lib /etc、/proc /dev:设备文件系统的挂接点 /lib:用于存放动态链接库 /etc:用来存放初始化脚本和其他配置文件的 /proc:用来挂载存放系统信息虚拟文件系统 (2)Shell Shell 就是 Busybox,从网上下载来 busybox-1.9.1.tar.gz 解压缩以后找到 Makefile 里面的 ARCH 和 CROSS_COMPILE,改成: ARCH ?= arm CROSS_COMPILE ?= /usr/local/arm/3.3.2/bin/arm-linux-
[单片机]
S3C2440移植linux3.4.2内核之支持YAFFS文件系统
获取yaffs2源码并给内核打补丁 首先获取yaffs2源码(参考git命令使用详解) cd /work/nfs_root git clone git@github.com:lifeyx/yaffs2.git //若下载出现error:403,可以试试vi /etc/resolv.conf,将nameserver地址改为: 114.114.114.114 将yaffs2源码来配置到内核里(使内核支持yaffs2) vi /work/nfs_root/yaffs2/README-linux 参考上图: /*给内核打补丁*/ cd /work/nfs_root/yaffs2/ ./patch-ker.sh c m /w
[单片机]
一种基于ARM-Linux的FPGA程序加载方法
  1、引言   FPGA在系统上电时,需要从外部载入所要运行的程序,此过程被称为程序加载。多数情况下,FPGA从外部专用的 EPROM读入程序。这种方式速度慢,而且只能加载固定的程序。显然,当系统需要容量大而且 FPGA要加载的程序可以根据需要有选择的加载时不能采用这种方法。本文实现了一种基于外部处理器的加载方法,速度快,而且可以根据设置给FPGA加载相应的程序。   对于 Xilinx公司的 FPGA芯片,有五种加载方式:JTAG模式,串行从模式,串行主模式,并行从模式和并行主模式。JTAG模式常用于调试时,将主机综合好的程序加载到FPGA,优先级高于其他几种模式。其他加载模式取决于 FPGA上加载模式管脚(M0,M1,M
[单片机]
一种基于ARM-<font color='red'>Linux</font>的FPGA程序加载方法
基于ARM的便携式1553B总线测试系统的设计与实现
随着航空电子系统的发展,多路数据传输数据总线在航空电子系统中起着越来越重要的作用,其主要特点是集中控制、实时性要求高、分布处理。1553B总线以其具有较高的可靠性和灵活性,广泛应用于军事、航空航天系统。传统的1553B测试设备采用普通计算机或工控机作为测试平台,通过PCI总线与被测设备通信,这对测试设备的携带造成极大不便。本文所阐述的测试系统以ARM9作为中央处理器,以DDC的BU-64843T7作为1553B协议芯片,从而实现系统的小型化和便携化,应用FPGA实现ARM时序与1553B时序的转换,并采用Linux操作系统以确保系统稳定可靠。 1 ARM与FPGA数据通信接口设计 1. 1 系统硬件介绍 该系统硬件由LPC3
[单片机]
基于ARM的便携式1553B总线测试系统的设计与实现
基于ARM-Linux和CDMA的远程视频监控系统
0 引言 CDMA(码分多址)无线网络具有覆盖面广,高效、低成本的特点,CDMA网络的数据传输速率可达200kb/s,这里开发的嵌入式远程视频监控系统就是充分利用CDMA无线网络技术和嵌入式系统的特点而搭建的数据传输系统,特别适合边远偏僻或不具备常规网络传输条件的地方使用,例如车载视频监控系统、交通路口(车牌实时监视)及城市路灯的监控等。 1 嵌入式Linux系统 嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统,目前嵌入式系统已经无处不在,从汽车、家用微波炉、PDA(个人数字助理)、电视机、到工控生产现场、通信、仪器、仪表、汽车、船舶、航空、航天、军事装备
[嵌入式]
iic裸机与linux通信,裸机系列——S3C2440IIC通信
经过一周左右的时间终于是把IIC弄的个差不多了,我只能说对于每一个程序都要认真对待,每个程序的编写都是一种进步。对于IIC,给我的感觉是这个东西单片机的时候也知道,但是没有调出来,现在RAM裸机编程正好好好的学习的一下,但是虽然对于2440的IIC驱动只需要配置好寄存器和把握好时序就可以了,但是我还是经过了很多的一段痛苦的时期,不过现在回想看看,都是一种成长的经历,让人值得骄傲。因为我坚持过来了。好的,说正点的,首先IIC编程依然感谢乐于奉献的赵老师,他的博客地址很多详细的介绍我就不多说了,赵老师的博客讲得很详细,和以前一样讲一下自己的体会和问题。 1.AT24C08芯片,是一款EEPROM,8K,不过是8Kbit,1024X
[单片机]
小广播
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty