在线免费观看成年人视频-在线免费观看国产-在线免费观看国产精品-在线免费观看黄网站-在线免费观看精品

產品分類

當前位置: 首頁 > 工業電氣產品 > 工業開關 > 風壓開關

類型分類:
科普知識
數據分類:
風壓開關

如何定制嵌入式Linux發布版

發布日期:2022-04-26 點擊率:154

  • 關鍵詞:                                                                Linux                                                                Embedded                                                                ARM

  • 摘要:針對嵌入式系統預編譯Linux鏡像和發行版在創客運動中已經很普遍,這些發行版本已經包含組件(有時候可能超過必需的),因此學生和業余愛好者們可以很容易的開始開發。Ubuntu, Debian和Arch都屬于這樣的發行版。


1). 簡介

針對嵌入式系統預編譯Linux鏡像和發行版在創客運動中已經很普遍,這些發行版本已經包含組件(有時候可能超過必需的),因此學生和業余愛好者們可以很容易的開始開發。Ubuntu, Debian和Arch都屬于這樣的發行版。


可是,當我們需要在計算機模塊或者工業產品上面運行定制化或者特殊應用的Linux鏡像時候,一個預編譯的嵌入式Linux發行版本并不一定是最好的選擇。編譯一個鏡像有一整套流程,在這個過程中,可以去掉任何不想要的但會導致開機時間增加,影響處理速度以及浪費內存空間的項目。很多時候我們因為系統里面有很多無用的應用和服務在運行導致系統資源浪費。舉例說明,在headless應用中,桌面環境是不需要的,因此我們應該編譯一個基于控制臺的版本,也就是一個更快更輕量級的Linux版本。另一個使用預編譯版本的弊端是授權問題,如Canonical (提供Ubuntu發行版本的公司) 就不允許在沒有適當合作認證前提下隨意定制和銷售Ubuntu。與之相反,基于一個定制的Linux版本,我們可以完全控制所需安裝的包以及使用的授權。因此,我們就可以根據項目軟硬件需求擁有一個更優化的Linux鏡像。


但是,如果我們想要將自己開發的Qt應用或者C應用集成到定制Linux版本中,我們該怎么做呢?是不是需要先編譯應用然后復制到板子上面?還是需要先創建如”.ipk”或者”.deb”文件,然后復制到系統中去?如何將應用包含到”local.conf”文件的” IMAGE_INSTALL_append”中去?如何像其他嵌入式設備那樣使應用在系統啟動后自動運行?


在本文中,我們將演示如何使用OpenEmbedded/Yocto編譯系統工具以自動方式來實現上面問題,我們將會快速展示基于bitbake來實現如編譯,包安裝,文件夾創建以及添加類似系統啟動后應用自動運行服務的步驟。之后,我們將會為我們產品或者計算機模塊獲得一個定制化的嵌入式Linux發布版本。盡管不同開發平臺或者單板之間的操作細節可能有些不同,但是原理都是一致的。


2). 準備

為了跟隨下面步驟操作,首先需要配置一個用于編譯嵌入式Linux鏡像的環境,請參考Toradex 開發者中心教程。Toradex使用OpenEmbedded-core編譯系統來編譯鏡像。基本上,這個教程包含:

a). 安裝準備

b). Repo安裝

c). 下載Toradex BSP version2.5

d). 因為我們應用是基于Qt,因此需要在”stuff”目錄下添加 ”meta-qt5” layer,運行下面命令來添加:

e). 基于上面所有,我們可以開始編譯我們自己的嵌入式Linux版本了。


3). 使用QtCreator 創建應用程序

為了演示需要,我們開發了一個雙屏顯示應用,實際上是兩個程序運行在不同的顯示屏。這類應用很常見,如機場值機柜臺,或者在汽車中,一個是方向盤后面有儀表盤組,另一個是用于多媒體功能,GPS導航等的顯示面板。本文并未涉及Qt交叉編譯應用的詳細配置,關于這個信息請參考Toradex開發者中心這篇文章。


上述兩個應用程序的源代碼可以從GitHub上面找到,請記住當我們編譯鏡像的時候,這兩個應用程序會按照我們稍后編寫的recipe文檔指令自動下載和編譯。

重要:當鏡像編譯時候為了確定應用從哪里安裝,務必添加下述紅色部分代碼到“.pro” Qt 項目文件:


4). 同步應用程序到GitHub

我們選擇使用GitHub是因為它提供版本控制工具,同時由于它是云平臺,這樣任何人都可以訪問存儲在上面的項目和應用。不過,它也提供”private repository”選項。稍后,我們將會看到recipte通過GitHub下載應用,并自動安裝到我們定制的Linux鏡像中。為了達到這個目的,我們首先要將應用程序所在的本地文件夾同步到GitHub倉庫。我們需要為每個應用創建一個對應的倉庫。


a). 從我們已經創建的GitHub賬戶進入,我們需要添加一個倉庫。點擊右上角的 ,然后選擇"NewRepository",在新加載的頁面中,設定好"name", 添加 "description",最后點擊"Createrepository"。

b). 在接下來的頁面中,GitHub給出一些選項。為了方便,我們選擇如下:

上述命令在主機對應Qt應用文件夾中執行:screen1和screen2。請記得編輯URL為你的GitHub 用戶名和倉庫名。執行push命令后,輸入GitHub用戶名和密碼,項目就會被上傳了。對另外一個應用執行同樣操作。進入你的GitHub profile頁面,就可以看到新的倉庫了。


5). 創建layerrecipes

什么是recipe?按照YoctoReference Manual,recipes是以”.bb”后綴結尾的文件,recipe主要包含有關給定軟件的信息,包括從哪里獲取源,應用補丁,如何編譯源代碼以及如何在最后打包所有。


添加一個新recipe到編譯環境比較好的方式是將其放到一個新的layer里面,Layers通常是按照機器類型,功能或相似條目組織的一組meta-data。我們用meta-toradex layer為例,Toradex通過這個layer給客戶提供Board Support Packages (BSP's),定制化 kernel, U-boot, 圖形特性等很多內容。另一些大家熟知的layer 如meta-beagleboard, meta-fsl-arm和meta-intel-galileo。此外,我們也發現一些很有趣的layer比如meta-games, meta-maker以及無人機相關的meta-uav。大量的layer列表可以從這里找到。作為示例,我們這里創建一個新layer "meta-projects"。


a). 進入"oe-core/stuff"文件夾,我們可以發現很多layers,包括上面提到的meta-toradex。在這里利用”mkdir”命令創建新名字為"meta-projects"的文件夾。

b). 進入"meta-projects"文件夾,再次創建一個名字為"conf"的新文件夾。

c). 進入"conf"文件夾,利用文本編輯工具如”vi”創建一個名字為"layer.conf"的新文件,并添加下面內容,這是一個layer配置文件所需的最簡格式,注意我們layer名字用紅色顯示。

d). Recipes在layer文件夾中按照應用類型,軟件分類等組織,進入到”meta-toradex” layer文件夾,可以發現所有關于Qt相關的recipes和應用都在”recipes-qt”文件夾里面,而所有和內核相關的都在”recipes-kernel”文件夾里面,依此類推。因為我們的應用是和Qt相關,因此我們在”meta-projects”目錄下創建名字為”recipes-qt”的文件夾。

e). 在”recipes-qt”文件夾里面,我們為每一個應用程序創建一個以應用名字命名的文件夾。


6). 編輯recipes功能和項目(GitHub下載,自動運行等)

a). 我們基于下面實現編譯和安裝一個”HelloWorld” C程序的簡單recipes來編寫我們的recipes。


b). 在每一個recipe文件夾,我們創建一個作為recipe本身的”.bb”文件。這個文件應包含下面一些基本變量如:

./ DEscriptION – recipe簡述以及其包含的軟件

./ SECTION – recipe 類型說明

./ LICENSE – recipe或軟件適用的license文件

./ LIC_FILES_CHKSUM – license文件的Checksum號

./ SRC_URI – 應用或者其源代碼地址

./ SRCREV – GitHub對應的所需commit 標簽


我們第一個程序所用的recipe文件如下,第二個recipe依此類推。


c). 分析上面recipe,我們可以發現一些重要項目。

./ 在”LICENSE”條目我們聲明了所使用的license,MIT license在開源項目中被廣泛使用,在”stuff/openembedded-core/meta/files/common-licenses/MIT”這里也可以找到。

./ Checksum 號可以通過一個Linux 應用 md5sum獲取,如下操作。另外,如果項目不是開源的,其他license也可以被直接使用或者創建,不過請一定聲明正確的license文件路徑和checksum。

---------------------

md5sum MIT

0835ade698e0bcf8506ecda2f7b4f302  MIT

---------------------

./ “SRC_URI” 聲明了應用的路徑,在文本情境是一個GitHub路徑。應用被下載,編譯,并安裝在我們鏡像的root 文件系統下。

./ “SRCREV”參數聲明要使用的倉庫commit標簽。可以進入GitHub上你的 repositorycommit部分來查詢要使用的標簽,https://github.com/giobauermeister/app-artigo-screen1/commits/master,然后點擊下面標示的按鍵來保存標簽,建議使用最新的commit。

./ “DEPENDS”那里我們聲明了一些Qt依賴。


d). 下一步,我們來準備”do_install”功能,是負責用于安裝我們應用初始化腳本的,同時,我們還需要一個unit configuration file (.service),負責自動啟動我們應用,即上面recipe文件中設計的下面兩個文件。

---------------------

${WORKDIR}/git/qt-artigo-embarcados-screen1.sh

${WORKDIR}/git/qt-artigo-embarcados-screen1.service

---------------------


./ 每一個程序的初始化腳本和unit文件都應存放在對應的GitHub倉庫。以”.service”結尾的unitconfiguration文件編碼了由”system”控制和管理的操作流程。Service 文件可以在”/etc/systemd/system/”下找到,為了分配在”/lib/systemd/system/”下也有。服務可以通過systemctl命令被啟動或者永久使能。更多關于”system”的信息請見Toradex開發者中心這篇文章。

請注意安裝目錄是在Qt Creator project file (.pro)里面定義,如在本文”使用Qt Creator 創建應用程序”章節所述。


./ Unit 文件 “qt-artigo-embarcados-screen1.service”內容如下。另一個應用的unit文件除了更改對應的”ExecStart”路徑,其他是完全一樣的。

---------------------

[Unit]

Description=Starts Embarcados Qt demoapplication screen1

After=multi-user.target


[Service]

Type=simple

ExecStart=/usr/bin/qt-artigo-embarcados-screen1.sh


[Install]

WantedBy=multi-user.target

---------------------


./ 注意到unit文件調用了初始化腳本,screen1和screen2應用的腳本內容如下:

./ 注意命令” exportQT_QPA_EGLFS_FB=/dev/fb0”,這個命令用來聲明程序運行使用的framebuffer,這個新參數是在Qt5中引入的。上面兩個腳本都需要上傳到GitHub每個應用對應的倉庫,并在系統鏡像編譯中被自動下載和安裝。


7). 編譯image

a). 進入oe-core目錄,對”export”文件進行source操作來設置環境。在第一次調用時候,會同時在”build/conf”目錄下創建一些最簡的配置文件”*.conf”。source操作后會讓我們進入”build”目錄下,在這里我們將”bitbake”我們的鏡像。

b). 在”build/conf”目錄下我們發現有”bblayer.conf”和”local.conf”文件。包含我們鏡像所有資源的layers在”bblayer.conf”文件中被列出。之前我們在”stuff”文件夾復制了”meta-qt5” layer,現在我們將”meta-qt5”和”meta-projects”都添加到”bblayers.conf”文件。

c). 在”local.conf”文件中我們發現定義了一些編譯選項和設置,如編譯目標平臺,使用多少核心去編譯,下載路徑等。我們創建一個新的變量” IMAGE_INSTALL_append”,用來指明將被安裝的包括我們Qt應用在內的一些項目。

進入”local.conf”文件,添加/修改如下內容:

“ACCEPT_FSL_EULA”變量需要被設置,以確認我們接受來自原來Freescale的license條款。在所有iMX6平臺都需要聲明這個。另外,我們也移除了一些桌面相關的項目,因為我們的鏡像是console鏡像。

d). 在編輯完上面兩個配置文件后,我們進入”build”目錄運行下面”bitbake”命令開始編譯流程。

---------------------

bitbake console-trdx-image

---------------------


8). 更新鏡像到計算機模塊

鏡像更新步驟在Toradex 開發者中心文檔已經被詳細描述,請見FlashingEmbedded Linux to iMX6 modules。


9). 測試我們的最終鏡像


更新鏡像后,Linux會自動運行,之后可以看到我們的應用會自動啟動。另外也可以通過一些啟動信息看到我們的systemd文件也啟動了。


10). 總結

本文旨在為嵌入式系統編譯定制化鏡像提供基本指導。我們了解到一個鏡像可以被定制,改進后應用在一個產品中。我們也了解到關于git,layer和reciptes的概念。文本許多理念也在被一些公司使用,如Toradex,一個計算機模塊提供商。Toradex通過layers “meta-toradex”和”meta-toradex-extra”向它的客戶提供非常多的開發資源,包括Board Support Package,examples,demos等。誰知道下一個是不是就是你,通過創造images,layers或者applications來引領嵌入式系統世界新的革命!


參考文檔

http://developer.toradex.com/how-to/how-to-set-up-qt-creator-to-cross-compile-for-embedded-linux
http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#new-recipe-writing-a-new-recipe
http://playerstage.sourceforge.net/wiki/Cross_Compile_Player_with_Openembedded_and_BitBake#Player_Recipe
http://bec-systems.com/site/501/best-practices-for-building-qt-applications-with-openembedded
https://wiki.yoctoproject.org/wiki/Creating_a_recipe_for_a_Qt_application
https://github.com/meta-qt5
https://wiki.yoctoproject.org/wiki/Building_your_own_recipes_from_first_principles
https://community.freescale.com/docs/DOC-94849
https://wiki.yoctoproject.org/wiki/How_do_I
http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html
https://opensource.org/licenses/MIT
http://choosealicense.com/licenses/mit/
http://www.freedesktop.org/software/systemd/man/systemd.service.html
https://wiki.archlinux.org/index.php/Systemd
https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/
http://developer.toradex.com/knowledge-base/how-to-autorun-application-at-the-start-up-in-linux
http://www.embeddedlinux.org.cn/OEManual/recipes_examples.html
http://wiki.openmoko.org/wiki/BitBake_recipe
https://www.wolfssl.com/wolfSSL/Docs-beginners-guide-yocto-openembedded-recipe.html

文本最初以葡萄牙語發表于Embarcados.com,請見這里


下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

推薦產品

更多
日本极品少妇VIDEOSSEX| 蜜臀亚洲AV无码精品国产午夜. | 乱人伦人妻中文字幕不卡| 欧美XXXX做受欧美GAY| 色综合天天综合网国产| 亚洲MV国产MV在线MV综合试| 中文字幕无码人妻少妇免费| 成熟丰满熟妇偷拍XXXXX| 国产一起色一起爱| 麻豆精品久久久久久中文字幕无码| 强 暴 疼 哭 处 女| 无码人妻精品一区二区蜜桃视频 | 无码专区无码专区视频网址| 亚洲熟妇色XXXXX亚洲| AV网站免费线看精品| 国产成人午夜福利在线小电影| 精品久久一卡2卡三卡4卡分区| 内射女校花一区二区三区| 特级毛片在线大全免费播放| 亚洲色丰满少妇高潮| 菠萝视频免费最新在线观看| 国产一区二区三区日韩精品| 蜜桃久久国产一区二区| 视频在线一区二区三区| 亚洲中文字幕人妻| 俄罗斯性孕妇孕交| 久久久久无码精品亚洲日韩| 日韩精品东京热无码视频| 亚洲国产成人精品无码区花野真一| 99久9在线 | 免费| 国产新婚夫妇叫床声不断| 男女裸交免费无遮挡全过程| 无码国产精品一区二区免费式直播 | 班长哭着说不能再C了视频 | 亚洲AV无码成人精品网站漏男 | 欧美黑人巨大VIDEOS精品| 午夜精品一区二区三区免费视频| √天堂中文官网在线| 欧美人与牲禽动交精品| 无码专区国产精品第一页| 中文无码人妻影音先锋| 国产SM残忍打屁股调教视频| 狼人无码精华AV午夜精品| 婷婷久久香蕉五月综合加勒比| 在线观看ww亚洲精品| 国产精品人人做人人爽 | 少妇又紧又深又湿又爽视频 | 成 人 黄 色 网 站 视频 S色| 精品国产一区二区亚洲人成毛片| 日本黄色网址日本| 一炕四女被窝交换啪啪| 国产成人夜色高潮福利影视| 女少18XⅩXX性XXXXHD| 亚洲AV永久无码精品漫画| WWW亚洲精品久久久| 久久99精品国产麻豆蜜芽| 熟妇阿 HD中文电影| 最新版天堂资源网在线种子| 国语自产第1国语自产第10页| 日本熟妇色XXXXX日本老妇| 阳茎伸入女人的阳道免费视频 | 亚洲A级成人片在线观看| 成人Av无码一区二区三区| 拒嫁豪门少奶奶99次出逃| 性色AV蜜臀AV色欲AV| 啊别插了视频高清在线观看| 久久青青草原亚洲AV无码| 小鲜肉洗澡时自慰网站XNXX| 被黑人上司侵犯狂草内射| 美女裸露双奶头光屁股无遮挡直播 | 免费无码午夜福利片| 亚洲精品欧美二区三区中文字幕| 国产99久久久国产无需播放器| 欧美18VIDEOSEX性欧美| 亚洲午夜无码片在线观看影院| 国产精品欧美福利久久| 日本适合十八岁以上人群的护肤品| 中国VODAFONEWIFI粗| 精人妻无码一区二区三区蜜桃| 无码中文字幕加勒比一本二本| 成人免费一区二区三区视频软件| 女儿国免费观看完整版在线| 亚洲午夜精品久久久久久浪潮| 国产一区二区三区美女| 无码AV蜜臀AⅤ色欲在线观看| 办公室扒开奶罩揉吮奶头AV| 男生把小j放进女人屁股视频狂躁| 亚洲色偷偷综合亚洲AV色欲| 国内精品人妻久久毛片APP| 玩弄漂亮少妇高潮白浆| 大胆极品美軳人人体| 青梅被从小摸到大H补课1视频 | 高黄暴H日本在线观看| 清纯JK校花被啪啪AV免费| 中文字幕一线产区和二线区的区别| 精品久久久无码中文字幕天天| 新X8X8拨牐拨牐永久免费AP| 国产超碰人人模人人爽人人添| 日韩一区二区三区人妻系列| ワンピースのエロ官网| 欧美巨大黑人精品一二三| 中文字幕无码成人免费视频| 久久偷看各类WC女厕嘘嘘偷窃 | 久久精品人人做人人爽| 亚洲国产成人久久综合同性| 国产亚洲AV片在线观看播放| 天天想你免费看西瓜视频| 高跟丝袜AV专区| 色哟哟网站在线观看| 俄罗斯1317大但人文艺术| 肉丝超薄少妇一区二区三区| 成人欧美一区二区| 撒尿BBWBBW毛| 丰满少妇高潮在线播放不卡| 色婷婷久久久SWAG精品| 成熟丰满的人妻中文字幕电影| 日产无人区一线二线三线新版 | 精品国产一区二区三区免费| 亚洲国产制服丝袜先锋| 精品乱码一区二区三区av| 亚洲日韩AV无码一区二区三区| 精品无码专区免费下载| 亚洲色偷偷AV男人的天堂| 久久精品这里热有精品| 一边下奶一边吃面膜视频| 久久中文字幕AV一区二区不卡| 与大屁股熟女啪啪喷水| 免费精品一区二区三区第35| 2021自拍偷在线精品自拍偷 | XXXX内射中国老妇| 忍着娇喘在公面前被夜袭| 大胆欧美乱老熟妇伦电影免费| 丝袜护士无码视频一区二区三区 | 无码GOGO大胆啪啪艺术| 国产麻豆精品精东影业AV网站| 五月天天爽天天狠久久久综合| 国产亚洲欧洲AⅤ综合一区| 亚洲娇小被黑人巨大撑爆| 久久久久久毛片精品免费不卡| 中国WINDOWS野外| 欧州一级 片内射AV| 成人AV无码一区二区三区| 他扒开内裤把舌头进去会有影响吗| 国产馆AV超薄肉色丝袜| 亚洲AV永久无码精品另类稀缺| 久久精品久久久久久久精品| 18禁H免费动漫无码网站| 青青草国产成人99久久| 大屁股大乳丰满人妻| 午夜私人电影院在线观看| 精品国产AⅤ无码一区二区蜜桃| 一本大道大臿蕉无码视频| 欧美黑人男士和白人美女a级黄片视频在线播放 | 无套内内射视频网站| 精品人妻无码专区在中文字幕| 有人有在线观看的片资源| 全黄H全肉边做边吃奶| 国产成人人综合亚洲欧美丁香花| 亚洲AV综合色区无码一区| 麻豆熟妇人妻XXXXXX| 啊宝宝的扇贝真会夹C视频| 我和公GONG在厨房日本电影| 精品国产一区二区AV片| 18禁美女黄网站色大片免费看 | 4D肉蒲团之性奴大战奶水| 日日摸日日碰夜夜爽暖暖视频| 国产无遮挡无码视频在线观看不卡 | 狠狠色噜噜狠狠狠888米奇视频 | 国产AV成人一区二区三区| 亚洲精品WWW久久久久久| 男女车车的车车网站W98免费| 成在人线AV无码免观看麻豆| 亚洲AV乱码一区二区三区在线观看 | 日韩一区二区三区AV| 哈昂~哈昂够了太多了老师 | 亚洲S久久久久一区二区| 免费播放片高清在线视频| 粉嫩av一区二区三区四区| 亚洲国产精品无码久久98蜜桃| 女人不怕粗短就怕蘑菇头什么意| 丰满少妇女裸体BBW| 亚洲熟妇丰满XXXXX国语| 全部免费毛片在线播放| 国产在线无码精品无码| 69国产成人综合久久精品| 挽起裙子迈开腿坐下去的图片高清 | 免费下载破解看片APP的软件| 公交车最后一排被C| 艳妇臀荡乳欲伦交换H漫画小说| 日本高清XXXXXXXXXX| 极品少妇被啪到呻吟喷水| 99久久久无码国产精品9| 西西GOGO大胆啪啪艺术| 男人J桶进女人P无遮挡的图片| 国产精品扒开腿做爽爽爽日本无码 | 中央气象台1一7天降水量预报图 | 在线成本人国语视频动漫| 婷婷国产三区四区| 内射爽无广熟女亚洲| 国产亚洲成AV人片在线观看导航|