以下參考自CSDN博客,點擊這里訪問原文
- Yocto:Yocto是這個開源項目的名稱,該項目旨在幫助我們自定義Linux系統(tǒng)
- Poky:Poky有兩個含義。第一個含義是用來構(gòu)建Linux的構(gòu)建系統(tǒng),值得注意的該Poky僅僅是一個概念瓶珊,而非一個實體:它包含了 BitBake工具、編譯工具鏈耸彪、BSP伞芹、諸多程序包或?qū)樱梢哉J為Poky即是Yocto的本質(zhì)蝉娜;此外Poky還有另外一層意思唱较,使用Poky系統(tǒng)得到的默認參考 Linux 發(fā)行版也叫Poky(當(dāng)然,我們可以對此發(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負責(zé)茫叭,直觀位置在前面目錄中可以體現(xiàn)酬屉。仔細觀察該文件,重點在BBLAYERS這個變量揍愁,里面有一些layer呐萨,這些layer就被enable了。
bblayers.conf
- 這些layer目前是被enable了莽囤,那么是否可以認為谬擦,這些layer中的配方也全部被使能了呢?答案固然是否定的烁登,我們的發(fā)行版中不可能把所有的軟件包放進去怯屉。在Yocto中,這個
選擇配置操作是由好多個conf饵沧、bb文件協(xié)同完成
的锨络,并不存在一個總的大綱,這也是和buildroot最大的不同之處(buildroot是由menuconfig來進行大綱式的配置)狼牺∠鄱可以理解為Yocto是“分封制”,皇帝說的不一定能落實是钥,具體還是各種大小地方官說了算掠归;而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)