0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在嵌入式Linux中截屏

AGk5_ZLG_zhiyua ? 來源:未知 ? 作者:胡薇 ? 2018-11-01 16:10 ? 次閱讀

在桌面級(jí)操作系統(tǒng)中,下載一個(gè)截圖軟件就能實(shí)現(xiàn)截屏操作,但在嵌入式Linux系統(tǒng)中,要實(shí)現(xiàn)小小的截圖功能卻沒有那么簡(jiǎn)單。本文為您介紹嵌入式Linux系統(tǒng)中實(shí)現(xiàn)截屏功能的方法和步驟。

一、原理

由于 Linux 系統(tǒng)的 FrameBuffer 機(jī)制,會(huì)把屏幕上的每個(gè)點(diǎn)映射成一段線性內(nèi)存空間,程序就可以通過改變這段內(nèi)存的值來改變屏幕上某一點(diǎn)的顏色。屏幕色彩的原始數(shù)據(jù)保存在/dev/fb0文件內(nèi),因此我們可以直接cat /dev/fb0 > fb.raw讀取該文件獲得數(shù)據(jù)。

圖1 原始截屏數(shù)據(jù)

顯然,這種原始數(shù)據(jù)無法通過簡(jiǎn)單的工具直接查看,特別是在精簡(jiǎn)的嵌入式Linux系統(tǒng)上。因此,我們找到了一個(gè)不錯(cuò)的工具——gsnap。這個(gè)工具可以將framebuffer中的數(shù)據(jù)直接保存為png或者jpeg格式的圖片。當(dāng)然,我們需要獲得該工具的源碼,并且在交叉編譯后移植它。

二、 原材料

本次嘗試筆者選擇ZLG開源開發(fā)套件EasyARM-i.MX283A3,宿主機(jī)選用Ubuntu14.04。首先,我們需要獲取gsnap源碼,該源碼可在網(wǎng)絡(luò)中搜索下載。源碼解壓后得到的文件如圖2:

圖2 gsnap源碼

其中g(shù)snap.c為解析算法,感興趣的讀者可以打開研究,本文我們不做分析。我們直接打開跟編譯相關(guān)的Makefile文件,內(nèi)容如下圖所示。從下圖可知,該源碼依賴libpng、libjpeg、zlib、libmath四種庫(kù)。由于交叉編譯器的庫(kù)種包含有l(wèi)ibmath,因此我們需要準(zhǔn)備好另外三種庫(kù)備用。

圖3 gsnap的Makefile

解壓后得到的文件如圖4。(源碼包可從庫(kù)官網(wǎng)或論壇下載)

圖4 庫(kù)的源碼包解壓

三、交叉編譯

第一步,交叉編譯libjpeg。

進(jìn)入到源碼目錄,執(zhí)行./configure --host=arm-linux --prefix=/home/vmuser/gsnap/jpeg_install/,然后執(zhí)行make、make install ,在安裝目錄/home/vmuser/gsnap/jpeg_install/得到交叉編譯過的庫(kù)。

圖5 交叉編譯libjpeg

第二步,交叉編譯zlib。

由于zlib是libpng的依賴,因此必須首先編譯zlib。由于zlib中的configure并未提供--host參數(shù),因此需要為它手動(dòng)指明交叉編譯器:export CC=arm-fsl-linux-gnueabi-gcc,然后執(zhí)行./configure --prefix=/home/vmuser/gsnap/z_install/,make、make install 。得到的文件類同第一步,不再放圖。

第三步,交叉編譯libpng。

與上述兩步驟又不同,libpng中提供有Linux平臺(tái)下的Makefile例程,我們可以直接拿來修改使用。進(jìn)入到libpng的源碼目錄,執(zhí)行拷貝cp scripts/makefile.linux Makefile,然后打開Makefile修改,如圖6。修改的內(nèi)容為交叉編譯器名稱和依賴的zlib的路徑。最后make、makeinstall得到頭文件可庫(kù)文件。

圖6 修改libpng的Makefile

第四步,交叉編譯gsnap。

為方便起見,我們將上述得到的庫(kù)文件和頭文件分別集中拷貝到自行建立的lib和includes目錄下,并且修改gsnap的Makefile。執(zhí)行make后就能得到可執(zhí)行文件gsnap。

圖7 修改gsnap的Makefile

四、驗(yàn)證

將得到的gsnap可執(zhí)行文件拷貝到目標(biāo)板的/opt目錄下,執(zhí)行截屏命令:./gsnap fb.jpg /dev/fb0,將得到的截屏fb.jpg拷貝到ubuntu中可得圖8:

圖8 截屏得到的圖片

至此,gsnap的編譯與移植工作結(jié)束。各位小伙伴若在嵌入式Linux開發(fā)中遇到問題,歡迎與ZLG電子工程師交流。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19123

    瀏覽量

    305143
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209474

原文標(biāo)題:【教程】嵌入式Linux中如何進(jìn)行截屏?

文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何在嵌入式Linux中進(jìn)行?

    在桌面級(jí)操作系統(tǒng),下載一個(gè)截圖軟件就能實(shí)現(xiàn)操作,但在嵌入式Linux系統(tǒng),要實(shí)現(xiàn)小小的截
    發(fā)表于 10-25 06:13

    Linux使用小技巧:嵌入式Linux系統(tǒng)實(shí)現(xiàn)功能的方法和步驟

    在桌面級(jí)操作系統(tǒng),下載一個(gè)截圖軟件就能實(shí)現(xiàn)操作,但在嵌入式Linux系統(tǒng),要實(shí)現(xiàn)小小的截
    發(fā)表于 05-03 07:00

    嵌入式Linux如何進(jìn)行?

    發(fā)表于 08-09 00:30

    WIFI網(wǎng)卡如何在嵌入式Linux

    僅用于增加百度收錄權(quán)重,排版未優(yōu)化,日常不維護(hù)。請(qǐng)?jiān)L問: 查看、評(píng)論。本博文對(duì)應(yīng)地址: 嵌入式Linux——WIFI網(wǎng)卡/#more如何在嵌入式Li
    發(fā)表于 11-04 08:26

    嵌入式Linux開發(fā)板工具gsnap移植PC機(jī)

    嵌入式Linux開發(fā)板工具gsnap移植PC機(jī):ubuntu16.04.2 LTS開發(fā)板:i.MX6UL交叉編譯器:arm-linux-
    發(fā)表于 11-04 07:27

    嵌入式DHCP Server如何在vxWorks

    嵌入式DHCP Server如何在vxWorks的軟件實(shí)現(xiàn)
    發(fā)表于 03-29 12:27 ?23次下載

    基于Linux嵌入式應(yīng)用淺析

    嵌入式操作系統(tǒng)是目前操作系統(tǒng)應(yīng)用最廣泛的分支之一。本文以Linux為基礎(chǔ),對(duì)Linux嵌入式應(yīng)用的實(shí)時(shí)性問題作深入分析。
    發(fā)表于 04-21 23:33 ?23次下載

    嵌入式Linux觸摸在漆包線檢測(cè)系統(tǒng)的應(yīng)用

    本文針對(duì)嵌入式Linux觸摸在漆包線檢測(cè)系統(tǒng)的應(yīng)用,介紹了本系統(tǒng)觸摸的具體接口電路,
    發(fā)表于 07-27 15:47 ?29次下載

    嵌入式Linux

    嵌入式Linux隨著Linux的迅速發(fā)展,嵌入式Linux現(xiàn)在已經(jīng)有許多的版本,包括強(qiáng)實(shí)時(shí)的嵌入式
    發(fā)表于 06-17 00:36 ?946次閱讀

    基于JPEG在嵌入式Linux的應(yīng)用

    基于JPEG在嵌入式Linux的應(yīng)用
    發(fā)表于 10-31 08:39 ?6次下載
    基于JPEG在<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>中</b>的應(yīng)用

    何在嵌入式Linux中使用GPIO

    了解如何在嵌入式Linux中使用GPIO,特別強(qiáng)調(diào)Zynq-7000系列。 我們介紹了基本的用戶和內(nèi)核空間GPIO使用情況,以及GPIO,GPIO密鑰和GPIO LED上的bit-banged I / O.
    的頭像 發(fā)表于 11-26 07:02 ?4075次閱讀

    嵌入式Linux開發(fā)環(huán)境搭建-(7)嵌入式Linux開發(fā)板工具gsnap移植

    嵌入式Linux開發(fā)板工具gsnap移植PC機(jī):ubuntu16.04.2 LTS開發(fā)板:i.MX6UL交叉編譯器:arm-linux-
    發(fā)表于 11-01 17:38 ?12次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>開發(fā)環(huán)境搭建-(7)<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>開發(fā)板<b class='flag-5'>截</b><b class='flag-5'>屏</b>工具gsnap移植

    嵌入式Linux(基礎(chǔ)篇)】從標(biāo)準(zhǔn)Linux嵌入式Linux + 嵌入式Linux知識(shí)架構(gòu)

    主要介紹了GNU/Linux的誕生,標(biāo)準(zhǔn)Linux是如何應(yīng)用在嵌入式系統(tǒng)的,最后講述了嵌入式Linux
    發(fā)表于 11-02 09:51 ?34次下載
    【<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>(基礎(chǔ)篇)】從標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>到<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> + <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>知識(shí)架構(gòu)

    嵌入式 Linux 的內(nèi)存管理

    點(diǎn)擊 嵌入式 Linux 的內(nèi)存管理
    發(fā)表于 11-02 10:36 ?12次下載
    <b class='flag-5'>嵌入式</b> <b class='flag-5'>Linux</b> <b class='flag-5'>中</b>的內(nèi)存管理

    嵌入式Linux路線

    嵌入式linux開發(fā)環(huán)境搭建、嵌入式linux開發(fā)模型、linux內(nèi)核移植和文件系統(tǒng)、嵌入式
    發(fā)表于 11-02 11:51 ?18次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>路線