日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Yocto基本概念及介绍

發(fā)布時(shí)間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yocto基本概念及介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Yocto詳解

參考:http://www.yoctoproject.org/docs/2.1/mega-manual/mega-manual.html#creating-a-general-layer-using-the-yocto-layer-script?這篇文章第五章不錯(cuò)

1.名詞解釋

  • Yocto:Yocto是這個(gè)開源項(xiàng)目的名稱,該項(xiàng)目旨在幫助我們自定義Linux系統(tǒng)
  • Poky:Poky有兩個(gè)含義。第一個(gè)含義是用來構(gòu)建Linux的構(gòu)建系統(tǒng),值得注意的該P(yáng)oky僅僅是一個(gè)概念,而非一個(gè)實(shí)體:它包含了 BitBake工具、編譯工具鏈、BSP、諸多程序包或?qū)?#xff0c;可以認(rèn)為Poky即是Yocto的本質(zhì);此外Poky還有另外一層意思,使用Poky系統(tǒng)得到的默認(rèn)參考 Linux 發(fā)行版也叫Poky(當(dāng)然,我們可以對(duì)此發(fā)行版隨意命名)。Poky的兩個(gè)含義千萬不能混淆
  • Metadata:元數(shù)據(jù)集,所謂元數(shù)據(jù)集就是發(fā)行版內(nèi)各基本元素的描述與來源?
    • Recipes:.bb/.bbappend文件,配方文件,描述了從哪獲取軟件源碼,如何配置,如何編譯。bbappend和bb的區(qū)別主要在于bbappend是基于bb的,功能是對(duì)相應(yīng)的bb文件作補(bǔ)充和覆蓋,有點(diǎn)類似于“重寫”的概念
    • Class:.bbclass文件
    • Configuration:.conf文件,即配置文件,我們可以用它來改變構(gòu)建方式
  • Layers:即各種meta-xxx目錄,將Metadata按層進(jìn)行分類,有助于項(xiàng)目的維護(hù)
  • Bitbake:一個(gè)任務(wù)執(zhí)行引擎,用來解析并執(zhí)行Metadata
  • Output:即各種輸出image

  • 總結(jié):假如用烹飪一桌酒席來形容構(gòu)建發(fā)行版,則Yocto就是飯店名,Poky就是廚房(以及提供作為參考的菜的搭配套餐),Metadata就是烹飪資源(.bb/.bbappend表示配方/配方上的貼士,.conf表示廚房里的管事的小組長),Layers就是菜譜的分類(如川菜譜、粵菜譜),Bitbake就是廚師,Output就是得到的一桌酒席

2.Yocto的架構(gòu)

假設(shè)現(xiàn)在有一個(gè)已經(jīng)構(gòu)建好的Yocto環(huán)境。有關(guān)Yocto的具體操作和環(huán)境構(gòu)建詳見Yocto的使用實(shí)例

  • 假設(shè)我們的項(xiàng)目名稱叫imx6_avi,那么進(jìn)入我們的項(xiàng)目目錄,查看,其結(jié)構(gòu)為
注意:該目錄省略了很多不必要的細(xì)節(jié),只把重要的文件顯示了出來 imx6_avi_super|__Makefile|__build| |__cache| |__conf| |__bblayers.conf| |__local.conf ||__sources|__base|__cache| |__conf| |__bblayers.conf(和build目錄中的一樣)| |__local.conf(和build目錄中的一樣)|||__meta-avi(放硬件無關(guān)的內(nèi)容,主要和文件系統(tǒng)相關(guān)的東西)| |__classes| |__conf| | |__distro| | | |__imx6.conf| | |__layer.conf| || |__recipes-core| | |__busybox| | |__images| | | |__avi-common-package.inc| | | |__avi-image-core.inc| | | |__avi-image-core.bb| | | |__avi-image.inc| | |__ifupdown| | |__openssh-keys| || |__recipes-qt| |__recipes-graphics| |__recipes-devtools| ||__meta-imx6-avi| |__conf| | |__machine| | |__layer.conf| | |__include| | |__imx6-avi-super.conf| | |__imx6-avi_mini.conf| | | |__recipes-bsp| | |__u-boot| | |__u-boot-imx6-avi.bb| || |__recipes-core| | |__images| | |__avi-image-core.bbappend| || |__recipes-kernel | |__linux | |__linux-imx6-avi/ | | |__defconfig | |__linux-imx6-avi.bb |||__meta-Exynos-avi|__meta-qt5-avi|__meta-fsl-arm|__meta-openembedded|__meta-qt5|__poky|__meta-skeketon|__meta-yocto|__meta|__classes|__conf|__recipes-bsp||__recipes-connectivity| |__dhcp| |__nfs-utils||__recipes-devtools|__recipes-core
  • 首先來分析一下目錄結(jié)構(gòu),不難發(fā)現(xiàn)主要有三級(jí)構(gòu)成:meta-xxx->recipes-yyy->zzz/ttt.bb。比如:meta-avi-> recipes-core->openssh-keys
  • meta-xxx就是layer(菜譜的分類如川菜譜、粵菜譜),recipes-yyy就是Metadata(具體某一本菜譜),zzz就是菜譜上具體的一個(gè)配方
  • 從目錄中不難看出,主要有這么幾個(gè)layer

    • meta-avi:由我們創(chuàng)建并維護(hù)。和avi有關(guān)的項(xiàng)目需要的配方。可以認(rèn)為這個(gè)目錄中的配方都是通用的、與平臺(tái)無關(guān)的內(nèi)容
    • meta-imx6-avi:由我們創(chuàng)建并維護(hù)。imx6平臺(tái)avi項(xiàng)目需要的配方
    • meta-Exynos-avi:由我們創(chuàng)建并維護(hù)。Exynos平臺(tái)avi項(xiàng)目需要的配方
    • meta-qt5-avi:由我們創(chuàng)建并維護(hù)。avi項(xiàng)目中qt5需要的配方
    • meta-fsl-arm:飛思卡爾官方推出的配方大全
    • meta-openembedded:openembedded推出的配方大全
    • meta-qt5:qt5官方推出的qt5配方大全
    • poky中的一堆meta:yocto官方推出的參考配方。雖然這些meta被放在了poky里面,但是還是不影響使用的,他們具有和上面那些meta相同的地位,如下圖

    不難看出,這里面很多的layer只是我們照搬過來的,目的是為了借用里面現(xiàn)成的配方(可以認(rèn)為這些layer充當(dāng)了“庫”),而真正由我們維護(hù)的僅僅是幾個(gè)名字中帶有avi的layer,而且它們是依賴于那些充當(dāng)“庫”的layer的。如下圖?

  • 介紹完了layer,那么問題來了,那么是否可以認(rèn)為,這些layer全部被enable了呢?答案固然是否定的,我們的項(xiàng)目是imx6_avi_super,顯然不可能去包含meta-Exynos-avi這個(gè)三星平臺(tái)專用的layer
  • 具體的layer選擇由imx6_avi_super/sources/conf/bblayers.conf負(fù)責(zé),直觀位置在前面目錄中可以體現(xiàn)。仔細(xì)觀察該文件,重點(diǎn)在BBLAYERS這個(gè)變量,里面有一些layer,這些layer就被enable了。不難發(fā)現(xiàn)這里面并沒有meta-Exynos-avi,這也恰好印證了我們建立開發(fā)環(huán)境(repo sync)時(shí),從git倉庫中拉的是imx6_avi_super這個(gè)項(xiàng)目對(duì)應(yīng)的Poky。
LCONF_VERSION = "6"BBPATH = "${TOPDIR}" BSPDIR := "/home/username/yocto/imx6_avi_super" BBFILES ?= "" BBLAYERS = " \ ${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-yocto \ \ ${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \ ${BSPDIR}/sources/meta-qt5 \ ${BSPDIR}/sources/meta-qt5-avi \ \ ${BSPDIR}/sources/meta-fsl-arm \ \ ${BSPDIR}/sources/meta-avi \ ${BSPDIR}/sources/meta-imx6-avi \

  • 這些layer目前是被enable了,那么是否可以認(rèn)為,這些layer中的配方也全部被使能了呢?答案固然是否定的,我們的發(fā)行版中不可能把所有的軟件包放進(jìn)去。在Yocto中,這個(gè)選擇配置操作是由好多個(gè)conf、bb文件協(xié)同完成的,并不存在一個(gè)總的大綱,這也是和buildroot最大的不同之處(buildroot是由menuconfig來進(jìn)行大綱式的配置)。可以理解為Yocto是“分封制”,皇帝說的不一定能落實(shí),具體還是各種大小地方官說了算;而buildroot是“中央集權(quán)制”,皇帝一人說了算?
  • 如何理解Yocto的配置方法?這要從發(fā)行版的定制流程說起。我們的目的很簡單,是要得到uboot、kernel、rootfs這三個(gè)image;Yocto的目的也很簡單,它要經(jīng)過一級(jí)一級(jí)配置,逐步縮小配方,直至得到uboot、kernel、rootfs這三個(gè)image。每一級(jí)需要哪些配方,由該級(jí)對(duì)應(yīng)的配置文件(conf/bb)決定。越上級(jí)的配置是越籠統(tǒng)的,越下級(jí)的配置越細(xì)致。如果下級(jí)的配置項(xiàng)相對(duì)于上級(jí)有補(bǔ)充或者沖突,則以下級(jí)的內(nèi)容為準(zhǔn),可以認(rèn)為下級(jí)會(huì)對(duì)上級(jí)進(jìn)行“重寫”。這其實(shí)有點(diǎn)類似交通法規(guī)?

  • 有關(guān)構(gòu)建的路線和流程:對(duì)于整個(gè)發(fā)行版構(gòu)建,雖然每一級(jí)的配方由(conf/bb)決定,但是每一級(jí)路線和方向的選擇,是由我們最終bitbake的對(duì)象決定的,比如我們最終bitbake avi-image-core,我們想要獲得rootfs.img,那么:

    • 第一步Poky就會(huì)從local.conf開始,一路向下,一級(jí)一級(jí)配置,直到配置到和rootfs有關(guān)的那一堆bb,最終形成完整完全的配方
    • 然后獲取配方需要的資源,比如各種軟件包,比如kernel的源碼
    • 最后把所有的資源編譯出我們需要的鏡像

  • 最后說一下bitbake,比如我們要選擇編譯rootfs.img,那么使用bitbake avi-image-core即可,但是很多時(shí)候并不直接采用這種做法。大多數(shù)情況下我們會(huì)在項(xiàng)目目錄下寫一個(gè)Makefile,里面包含各種各樣的功能,內(nèi)部以bitbake指令實(shí)現(xiàn)

3.配置文件詳解

上一節(jié)簡單介紹了Yocto是如何配置我們的項(xiàng)目,這一節(jié)開始分析具體的配置文件

  • local.conf:

總結(jié)

以上是生活随笔為你收集整理的Yocto基本概念及介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。