YOCTO概覽

以下參考自CSDN博客,點擊這里訪問原文
  • Yocto:Yocto是這個開源項目的名稱,該項目旨在幫助我們自定義Linux系統(tǒng)
  • Poky:Poky有兩個含義。第一個含義是用來構(gòu)建Linux的構(gòu)建系統(tǒng),值得注意的該Poky僅僅是一個概念,而非一個實體:它包含了 BitBake工具、編譯工具鏈、BSP、諸多程序包或?qū)?,可以認為Poky即是Yocto的本質(zhì);此外Poky還有另外一層意思,使用Poky系統(tǒng)得到的默認參考 Linux 發(fā)行版也叫Poky(當然,我們可以對此發(fā)行版隨意命名)。Poky的兩個含義千萬不能混淆
  • Metadata:元數(shù)據(jù)集,所謂元數(shù)據(jù)集就是發(fā)行版內(nèi)各基本元素的描述與來源
    • Recipes:.bb/.bbappend文件,配方文件,描述了從哪獲取軟件源碼,如何配置,如何編譯。bbappend和bb的區(qū)別主要在于bbappend是基于bb的,功能是對相應(yīng)的bb文件作補充和覆蓋,有點類似于“重寫”的概念
    • Recipe: A set of instructions for building packages. A recipe describes where you get source code, which patches to apply, how to configure the source, how to compile it and so on. Recipes also describe dependencies for libraries or for other recipes. Recipes represent the logical unit of execution, the software to build, the images to build, and use the .bb file extension.
    • Class:.bbclass文件
    • Configuration:.conf文件,即配置文件,我們可以用它來改變構(gòu)建方式
  • Layers:即各種meta-xxx目錄,將Metadata按層進行分類,有助于項目的維護
  • Bitbake:一個任務(wù)執(zhí)行引擎,用來解析并執(zhí)行Metadata
  • Output:即各種輸出image
總結(jié):假如用烹飪一桌酒席來形容構(gòu)建發(fā)行版,則Yocto就是飯店名,Poky就是廚房(以及提供作為參考的菜的搭配套餐),Metadata就是烹飪資源(.bb/.bbappend表示配方/配方上的貼士,.conf表示廚房里的管事的小組長),Layers就是菜譜的分類(如川菜譜、粵菜譜),Bitbake就是廚師,Output就是得到的一桌酒席。

yocto項目結(jié)構(gòu)

項目文件結(jié)構(gòu)
sources文件結(jié)構(gòu)

sources,layer結(jié)構(gòu)
image.png
  • 首先來分析一下目錄結(jié)構(gòu),不難發(fā)現(xiàn)主要有三級構(gòu)成:meta-xxx->recipes-yyy->zzz/ttt.bb。比如:meta-avi-> recipes-core->openssh-keys
    • meta-fsl-arm:飛思卡爾官方推出的配方大全
    • meta-openembedded:openembedded推出的配方大全
    • meta-qt5:qt5官方推出的qt5配方大全
  • poky中的一堆meta:yocto官方推出的參考配方。雖然這些meta被放在了poky里面,但是還是不影響使用的,他們具有和上面那些meta相同的地位
  • 介紹完了layer,那么問題來了,那么是否可以認為,這些layer全部被enable了呢?答案固然是否定的
  • 具體的layer選擇由/base/conf/bblayers.conf負責,直觀位置在前面目錄中可以體現(xiàn)。仔細觀察該文件,重點在BBLAYERS這個變量,里面有一些layer,這些layer就被enable了。


    bblayers.conf
  • 這些layer目前是被enable了,那么是否可以認為,這些layer中的配方也全部被使能了呢?答案固然是否定的,我們的發(fā)行版中不可能把所有的軟件包放進去。在Yocto中,這個選擇配置操作是由好多個conf、bb文件協(xié)同完成的,并不存在一個總的大綱,這也是和buildroot最大的不同之處(buildroot是由menuconfig來進行大綱式的配置)??梢岳斫鉃閅octo是“分封制”,皇帝說的不一定能落實,具體還是各種大小地方官說了算;而buildroot是“中央集權(quán)制”,皇帝一人說了算 。
  • 如何理解Yocto的配置方法?這要從發(fā)行版的定制流程說起。我們的目的很簡單,是要得到uboot、kernel、rootfs這三個image;Yocto的目的也很簡單,它要經(jīng)過一級一級配置,逐步縮小配方,直至得到uboot、kernel、rootfs這三個image。每一級需要哪些配方,由該級對應(yīng)的配置文件(conf/bb)決定。越上級的配置是越籠統(tǒng)的,越下級的配置越細致。如果下級的配置項相對于上級有補充或者沖突,則以下級的內(nèi)容為準,可以認為下級會對上級進行“重寫”。這其實有點類似交通法規(guī)
原文配圖
  • 有關(guān)構(gòu)建的路線和流程:對于整個發(fā)行版構(gòu)建,雖然每一級的配方由(conf/bb)決定,但是每一級路線和方向的選擇,是由我們最終bitbake的對象決定的,比如我們最終bitbake avi-image-core,我們想要獲得rootfs.img,那么:
    • 第一步Poky就會從local.conf開始,一路向下,一級一級配置,直到配置到和rootfs有關(guān)的那一堆bb,最終形成完整完全的配方
    • 然后獲取配方需要的資源,比如各種軟件包,比如kernel的源碼
    • 最后把所有的資源編譯出我們需要的鏡像
原文配圖
  • 最后說一下bitbake,比如我們要選擇編譯rootfs.img,那么使用bitbake avi-image-core即可,但是很多時候并不直接采用這種做法。大多數(shù)情況下我們會在項目目錄下寫一個Makefile,里面包含各種各樣的功能,內(nèi)部以bitbake指令實現(xiàn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文首發(fā)于本人博客 sunyongfeng.com。 譯者序 本文譯自 A practical guide to ...
    jeromesun閱讀 26,795評論 1 25
  • 參考:http://www.yoctoproject.org/docs/2.4/bitbake-user-manu...
    半天妖閱讀 16,957評論 3 5
  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,268評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 在 tableViewCell 上添加了一個長按手勢,在手勢方法 editPathAction: 中需要確認是哪一...
    Rivendell24閱讀 1,130評論 0 0

友情鏈接更多精彩內(nèi)容