在桌面级操作系统中,下载一个截图软件就能实现截屏操作,但在嵌入式Linux系统中,要实现小小的截图功能却没有那么简单。本文为您介绍嵌入式Linux系统中实现截屏功能的方法和步骤。
1 . 原理
由于 Linux 系统的 FrameBuffer 机制,会把屏幕上的每个点映射成一段线性内存空间,程序就可以通过改变这段内存的值来改变屏幕上某一点的颜色。屏幕色彩的原始数据保存在/dev/fb0文件内,因此我们可以直接cat /dev/fb0 > fb.raw读取该文件获得数据。
图1 原始截屏数据
显然,这种原始数据无法通过简单的工具直接查看,特别是在精简的嵌入式Linux系统上。因此,我们找到了一个不错的工具——gsnap。这个工具可以将framebuffer中的数据直接保存为png或者jpeg格式的图片。当然,我们需要获得该工具的源码,并且在交叉编译后移植它。
2 . 原材料
本次尝试笔者选择周立功/致远电子开源开发套件EasyARM-i.MX283A3,宿主机选用Ubuntu14.04。首先,我们需要获取gsnap源码,该源码可在网络中搜索下载。源码解压后得到的文件如图2:
图2 gsnap源码
其中gsnap.c为解析算法,感兴趣的读者可以打开研究,本文我们不做分析。我们直接打开跟编译相关的Makefile文件,内容如下。从下图可知,该源码依赖libpng、libjpeg、zlib、libmath四种库。由于交叉编译器的库种包含有libmath,因此我们需要准备好另外三种库备用。
图3 gsnap的Makefile
解压后得到的文件如图4。(源码包可从库官网或论坛下载)
图4 库的源码包解压
3 . 交叉编译
第一步,交叉编译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
4 . 验证
将得到的gsnap可执行文件拷贝到目标板的/opt目录下,执行截屏命令:./gsnap fb.jpg /dev/fb0,将得到的截屏fb.jpg拷贝到ubuntu中可得图8。
图8 截屏得到的图片
上一篇:高性能、高能效,ARM全新CryptoCell安全IP缩短上市时间
下一篇:技术突破:基于三维芯片的光量子计算系统问市
推荐阅读
史海拾趣
Amphenol Piher 是 Amphenol 公司的一部分,专注于设计、制造和销售电子行业中的传感器和电位器等产品。以下是关于 Amphenol Piher 公司发展的五个相关故事:
创立与初期发展:Amphenol Piher 公司的历史可以追溯到20世纪60年代,在西班牙的Valencia成立。最初,公司主要致力于生产电位器和传感器等电子元器件,为不同行业的客户提供定制化的解决方案。随着市场需求的增长和公司技术实力的提升,Amphenol Piher 逐渐赢得了客户的信任和市场认可。
技术创新与产品多样化:Amphenol Piher 公司在技术研发方面持续投入,并不断推出新型的传感器和电位器产品。公司专注于提升产品性能、精度和可靠性,满足客户对高品质电子元器件的需求。除了传统的电位器和传感器,Amphenol Piher 还推出了一系列新型产品,如角位移传感器、线性位移传感器等,为不同应用领域提供多样化的解决方案。
客户合作与定制化解决方案:Amphenol Piher 公司与客户建立了紧密的合作关系,致力于开发定制化的传感器和电位器解决方案。公司的工程团队与客户密切合作,根据客户的需求和应用场景,设计和制造符合特定要求的产品。这种定制化解决方案能够满足客户个性化的需求,为客户提供更加专业和完善的服务。
质量控制与认证标准:Amphenol Piher 公司高度重视产品质量控制,并严格遵循国际质量管理体系标准。公司的生产工艺和质量管理体系符合ISO 9001质量管理体系认证标准,以确保产品质量的稳定性和可靠性。此外,Amphenol Piher 公司的产品还通过了各种行业和应用领域的认证标准,如汽车行业的TS16949认证等,确保产品符合行业标准和规定。
全球市场拓展与合作伙伴关系:除了在西班牙的生产基地外,Amphenol Piher 公司还在全球范围内设有多个销售办事处和代理商网络,拓展了国际市场份额。公司与全球各种行业领先企业建立了长期稳定的合作关系,共同推动产品的创新和市场拓展。通过全球市场拓展和合作伙伴关系,Amphenol Piher 公司不断扩大业务规模,增强了在电子行业中的市场竞争力。
这些故事展示了 Amphenol Piher 公司从成立初期到如今在技术创新、产品多样化、客户合作与定制化解决方案、质量控制与认证标准以及全球市场拓展与合作伙伴关系等方面取得的重要进展。
随着技术的不断积累和市场的不断拓展,Gems Sensors & Controls公司成功加盟了全球知名的世界500强企业丹纳赫集团。这一举措不仅为公司带来了更多的资源和支持,也加速了Gems的全球化布局。如今,Gems的生产基地遍布北美、欧洲和亚洲,并在全球范围内设立了销售、设计和服务办事处,能够为客户提供更加全面和便捷的服务。
在电子行业的初期,AIM主要以传统的铁和金属加工业务为主。然而,随着电子技术的迅猛发展,公司管理层意识到转型的必要性。AIM开始投资研发,逐步将业务扩展到电子元件和设备的制造领域。通过引进先进的生产线和技术人才,AIM成功开发出一系列高性能的电子零部件,逐渐在市场中站稳脚跟。
在2000年代初,ECLIPSE公司是一家专注于企业级软件开发的公司。公司内部的一个小型团队开发了一个名为“Eclipse”的集成开发环境(IDE),用于提高内部项目的开发效率。随着Eclipse的内部使用越来越广泛,公司高层意识到其巨大的潜力,决定将Eclipse开源,并成立专门的Eclipse部门来管理和推广这一项目。通过开放源代码和社区合作,Eclipse迅速吸引了全球开发者的关注,并逐渐成长为开源开发领域的领军者。
长园维安自成立以来,始终坚持技术创新为核心竞争力。在早期发展阶段,公司投入大量资源研发新型线路保护元器件,如PPTC、CPTC等。这些产品凭借其卓越的性能和稳定性,迅速在通讯、汽车电子等领域获得广泛应用。通过不断创新,长园维安在电子行业树立了技术领先的形象。
随着电子行业的全球化趋势日益明显,Flamar公司积极实施国际化战略,通过设立海外研发中心、生产基地和销售网络,不断拓展全球市场。公司先后在欧洲、亚洲等地建立分支机构,与当地企业建立紧密的合作关系,共同推动电子技术的创新与应用。通过国际市场的开拓,Flamar公司不仅实现了业务规模的快速增长,还进一步提升了品牌的国际知名度和影响力。
如何正确选用微波无线监控系统? 随着现代技术突飞猛进的发展,微波无线图像、语音传输系统被广泛应用于广播电视、公安消防、大型住宅区、停车场、重点保护区、库区及水下作业等场所。因其中间无需架设线缆,发射主机和接收机体积小,工作电流小 ...… 查看全部问答∨ |
|
在下,混杀在软件行业七年左右,以c/c++为主,多半在winnt/linux/solaris上做开发. 由于行业竟急日趋激烈,小弟我打算转行做硬件. 我给自已的定位是,操作系统,电子电路.这方面. 请问大家,我该如何学习.… 查看全部问答∨ |
现在,我手头有一个直流伺服电机,自带一套直流伺服电机驱动器。 需要用AVR单片机制作电路,利用外部采集的信号,经处理后按照我们的思路和程序,控制该直流伺服电机驱动器。最终由驱动器控制直流伺服电机。 以往 ...… 查看全部问答∨ |
我在WinCE6.0下写流驱动用到VirtualAlloc与VirtualCopy函数,VirtualCopy运行出错了,GetLastError返回值为87,是参数错误,难道VirtualCopy在驱动里也不能用吗?请大虾指点一下!DWORD GPI_Init(LPCTSTR pContext){ DWORD GPIOSuccess=1;&nbs ...… 查看全部问答∨ |
|
TI 专有 Impedance Track™ 容量测量技术的铅酸电池管理电量监测计集成电路。该 bq34z110 电量监测计 IC 采用小型 14 引脚封装,是业界唯一一款可扩展电源管理器件,支持具有 4V、12V、24V、48V 以及更高电池电压的多串铅酸电池组。 ~采用 I ...… 查看全部问答∨ |
U-boot移植心得《二》 下面我开始分析start.S,在分析之前,我们要了解,u-boot引导linux加载的过程分为2个阶段,第一个阶段的终极目的就是设置好各种硬件环境,将代码从nor flash或NAND flash中拷贝到外部RAM中,然后跳转到C函数中去。第二阶段 ...… 查看全部问答∨ |