首页 > 其他分享 >嵌入式截屏工具-gsnap移植 arm平台

嵌入式截屏工具-gsnap移植 arm平台

时间:2025-01-10 17:11:45浏览次数:1  
标签:src gnueabihf gsnap 截屏 install linux arm

# 目录
- [前言](#前言)
- [正文](#正文)
  - [原理](#原理)
  - [环境](#环境)
  - [详细流程](#详细流程)
  - [使用](#使用)
- [参考](#参考)



# 正文
## 原理
### 前提条件:
嵌入式机器要支持`/dev/fb0`这个设备节点。不然,这个工具基本就使用不了了。

### 原理:
由于 Linux 系统的 FrameBuffer 机制,把屏幕上的每个点映射成一段线性内存空间,这样,程序就可以通过改变这段内存的值来改变屏幕上某一点的颜色。如果我们想把当前的显示内容保存起来,可能会想到如下命令:

```bash
cat /dev/fb0 > fb_data.raw

反过来,可以将这些数据回显到 framebuffer 中:

cat fb_data.raw > /dev/fb0

但是,用这用方法保存起来的数据是原始数据,只有专用软件才能打开,并且大小固定(如:8MB)。基于这些原因,我们找到一个不错的工具——gsnap,这个工具可以将 framebuffer 的数据保存为图片(png或jpeg格式)。

环境

交叉编译的主机为Ubuntu 16.04

使用的交叉编译器为: arm-linux-gnueabihf-gcc
交叉编译器的下载地址为: https://blog.51cto.com/u_15127589/4102404
我这边直接选择的版本就是最新的:
安装方式就直接在root下面执行: sudo apt install gcc-arm-linux-gnueabihf

arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.
Thread model: posix.........
gcc version 6.3.0 20170516 (Debian 6.3.0-18) 
root@debian:/home/gsnap_build_all_src/install#

测试方式: arm-linux-gnueabihf-gcc -v

gsanp的源码以及一些依赖库的链接如下:

详细流程

首先,进入那个资源文件夹中可以看到:
alt text
建议你们是把出.tar.gz的其他文件都先删掉。因为那些是我解压且修改后的文件。你要是用那些,有可能自己的编译器有问题,都没有发现。

首先,在这个目录下创建一个install的目录,来存放生成的依赖库。
然后,将所有的.tar.gz都解压在当前目录即可。命令: tar -zxvf *****.tar.gz
各个依赖库的交叉编译次序:jpeg --> zlib --> libpng --> gsnap

 cd /work/gsnap/gsnap_build_all_src/jpeg-9d
 export CC=arm-linux-gnueabihf-gcc
 ./configure --host=arm-linux-gnueabihf --prefix=/work/gsnap/gsnap_build_all_src/install/jpeg
 make -j4
 make install

1. 编译libjpeg

在ubuntu中执行以下命令,进行交叉编译:

cd /work/gsnap/gsnap_build_all_src/jpeg-9d
export CC=arm-linux-gnueabihf-gcc
./configure --host=arm-linux-gnueabihf --prefix=/work/gsnap/gsnap_build_all_src/install/jpeg
make -j4
make install

编译成功后,在目录下生成;
alt text

2. 编译zlib

由于zlib是libpng的依赖,因此在交叉编译libpng之前,必须首先编译zlib。在ubuntu中执行以下命令,进行zlib的交叉编译:

cd /work/gsnap/gsnap_build_all_src/zlib-1.2.11
export CC=arm-linux-gnueabihf-gcc
./configure --prefix=/work/gsnap/gsnap_build_all_src/install/zlib
make -j4
make install

交叉编译zlib成功后,接着就可以编译libpng了。

3. 编译libpng

与上述的两个库编译方式不同,由于libpng源码里面提供了Linux平台的Makefile文件,因此,可以直接修改Makefile然后完成编译工作。执行以下命令,进入libpng源码目录,然后进行Makefile复制。

cd /work/gsnap/gsnap_build_all_src/libpng-1.6.37
cp scripts/makefile.linux  Makefile  -a

然后,修改Makefile相应内容:
![alt text]([img]())

# 修改Makefile中的CC和prefix
CC=arm-linux-gnueabihf-gcc
prefix=/work/gsnap/gsnap_build_all_src/install/png

然后,执行:

make -j4
make install

接下来,所有的依赖库都放在install下面了,我们可以看下;

4. 编译gsnap

接下来进入gsnap的源码,去编译编码。

a. 首先,我们进入后,修改一下Makefile。Makefile修改成这样-> 将路径修改为实际路径:

all:
        #$(CC) -g gsnap.c -L/usr/lib -lpng -ljpeg -lz -lm -o gsnap
        arm-linux-gnueabihf-gcc  -g gsnap.c \
        -L /work/gsnap/gsnap_build_all_src/install/png/lib \
        -L /work/gsnap/gsnap_build_all_src/install/jpeg/lib \
        -L /work/gsnap/gsnap_build_all_src/install/zlib/lib \
        -I /work/gsnap/gsnap_build_all_src/install/png/include \
        -I /work/gsnap/gsnap_build_all_src/install/jpeg/include \
        -I /work/gsnap/gsnap_build_all_src/install/zlib/include \
        -lpng -ljpeg -lz -lm -o gsnap
clean:
        rm -f gsnap

        set -i 's|/work/gsnap/|/xxx/xxx/|g' Makefile  替换为你实际路径

里面的路径注意要相对应改成你所当前环境下的。

b. 执行make all,执行完后,我们就可以看到当前文件夹下生成一个gsnap的可执行文件:

make all

接下来,将这个gsnap的可执行文件拷贝到/bin下面。

将一些依赖库拷贝到/lib目录下面。

执行以下命令,可以进行屏幕截图:

gsnap fb.jpg /dev/fb0

执行完后,你就可以在/bin的目录下找到一个fb.jpg,将其拷贝出来,就可以进行显示了。

使用

如果上面的环境下的话,应该就可以直接使用我上面所编译出来的可执行文件,将其拷贝到对应的环境中,然后将对应的库拷贝到对应的/lib环境中,从而,再执行gsnap fb.jpg /dev/fb0这句后,就可以执行进行截图操作,而不用自己进行编译。
img

参考

  1. 嵌入式截屏工具-gsnap移植
  2. 嵌入式Linux开发环境搭建-(7)嵌入式Linux开发板截屏工具gsnap移植
  3. 嵌入式Linux截图工具gsnap移植与分析
  4. ARM-Linux开发 arm-none-Linux-gnueabi-gcc下载安装
  5. make:arm-linux-gnueabihf-gcc:command not found 问题解决
  6. arm-linux-gnueabihf编译工具链安装
- 本文转载自 [嵌入式截屏工具-gsnap移植-作者:落日冬升](https://blog.csdn.net/qq_43211060/article/details/124411859)

标签:src,gnueabihf,gsnap,截屏,install,linux,arm
From: https://www.cnblogs.com/sunisnyu/p/18664301

相关文章

  • 2025最新超详细PycharmIDE安装配置完整版教程(详细步骤)
    包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!1PyCharm下载PyCharm的下载安装非常简单,可以直接到Jetbrains公司官网下载,具体步骤如下:(1)打开Pycharm官网[http://www.jetbrains.com,选择Tools菜单下的PyCharm项,如图1所示,进入下载PyCharm界面。]图1......
  • 2025最新Python安装教程+PyCharm安装教程(超详细!)看这一篇全都搞定!
    Python安装1、首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后如下图,选择图中红色圈中区域进行下载。(免下载直接安装......
  • 笔记 harmonyOS 页面跳转及传递参数
            页面之间的导航可以通过页面路由router模块来完成。页面路由模块根据页面的URL找到目标页面,从而实现跳转。通过页面路由模块,可以使用不同的URL访问不同的页面,包括跳转到Ability内的指定页面、用Ability内的某个页面替换当前页面、返回上一个页面或指定的页面。......
  • 【HarmonyOS NEXT】一多开发介绍(断点、媒体查询、栅格布局)
    断点鸿蒙提供断点以应用窗口宽度为切入点,将应用窗口在宽度维度上分成了几个不同的区间即不同的断点,不同设备会进入到不同的断点区间,在不同的区间下,我们可以可根据需要实现不同的页面布局效果。具体的断点对应的设备尺寸如下所示。断点名称取值范围(vp)xs[0,320)sm[320,600)......
  • Python+Django鹿幸公司员工在线餐饮管理系统的设计与实现(Pycharm Flask Django Vue m
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django鹿幸公司员工在线餐饮管理系统的设计与实现(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框......
  • Python+Django高校网上缴费综合务系统(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django高校网上缴费综合务系统(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数......
  • Harmony开发-ArkUI框架速成十二Grid网格布局
    程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、嵌入式、鸿蒙、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前!网格布局Grid1.Grid如果布局是由很多的行和列所组成、行列可能需要合并、甚至滚动,就可以使用网格......
  • PyTorch团队为TorchAO引入1-8比特量化,提升ARM平台性能
    在深度学习模型部署和优化领域,计算效率与资源消耗的平衡一直是一个核心挑战。PyTorch团队针对这一问题推出了创新性的技术方案——在其原生低精度计算库TorchAO中引入低位运算符支持。这一技术突破不仅实现了1至8位精度的嵌入层权重量化,还支持了具有8位动态量化激活的线性运算符,为......
  • Python+Django城市公交查询系统(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django城市公交查询系统(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数据......
  • Python+Django在线车辆租赁信息管理系统的设计与实现(Pycharm Flask Django Vue mysql
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django在线车辆租赁信息管理系统的设计与实现(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django......