Buildroot vs OpenEmbedded or Yocto Project

譯自 Buildroot vs. OpenEmbedded or Yocto Project: A Four Hands Discussion - 2016.pdf

Buildroot 和 yocto的對比

對比內(nèi)容:

(1) 嵌入式構(gòu)建系統(tǒng)
目標是構(gòu)建一個完整的,客制化的嵌入式Linux系統(tǒng)
包括root filesystem缅叠, toolchain锻离, kernel, bootloader
(2) 從源代碼開始
(3) 使用交叉編譯工具鏈
(4) 非巢酃鳎活躍的維護和開發(fā)工程
(5) 工業(yè)界廣泛使用
(6) 有文檔和培訓課程
(7) 自由軟件

buildroot的通用信條

(1) 專注于簡單化
(2) 使用簡單捉蚤,理解簡單,擴展簡單
(3) 通過擴展腳本而不是buildroot本身來處理特殊情況
(4) 使用現(xiàn)存的技術(shù)/語言: kconfig炼七, make. (值得投入時間去學習)
(5) 默認小
(6) 目的無關(guān)的(Purpose-agnostic)
(7) 開放社區(qū)缆巧,沒有供應商、官僚/公司的管理

yocto的通用信條

(1) 支持主要的CPU架構(gòu)
OpenEmbedded:僅qemu
Yocto Project: 為一小部分機器增加支持
(2) 只提供核心方法豌拙,使用layers來支持更多的package和機器
(3) 客戶的改動應該在一個單獨的layer
(4) 多用途的構(gòu)建系統(tǒng):盡可能靈活的處理更多的使用情況
(5) 開放社區(qū)陕悬,但是該工程被公司贊助商發(fā)起的Yocto Project Advisory Board監(jiān)管
(6) OpenEmbedded 是一個獨立社區(qū)驅(qū)動的工程。

buildroot 輸出

(1) 主要是根文件系統(tǒng)鏡像
同時包含:工具鏈按傅, 內(nèi)核鏡像捉超, bootloader等
(2) 支持多種格式: ext2/3/4, ubifs唯绍, iso9600等
(3) 沒有二進制包拼岳, 沒有包管理系統(tǒng)
一些人稱之為一個firmware generator
通過包不可能更新
更新需要一個完整的系統(tǒng)更新,像Andorid一樣
認為部分更新是有害的

Yocto 輸出

(1) 構(gòu)建distribution况芒,主要的輸出是一個package feed
包管理系統(tǒng)是可選的
裝載和更新系統(tǒng)的一部分是可能的
(2) 通過安裝一些包裂问,也可以產(chǎn)生根文件系統(tǒng)鏡像。支持ext2/3/4牛柒, ubifs堪簿, iso9600等,也支持VM鏡像:vmdk皮壁,vdi椭更,qcow2
(3) 最終,鏡像類或者工具蛾魄,wic可用來構(gòu)建磁盤鏡像
(4) 生成image時也可以生成SDK虑瀑,可以讓應用開發(fā)者編譯和測試他們的應用(不用集成到build中)湿滓。但是SDK必須要和image匹配。

Buildroot 配置

(1) 和Linux kernel一樣使用kconfig
(2) 簡單的{menu舌狗,x叽奥,n,g}配置接口
(3) 整個配置保存在一個文件 .config/defconfig
(4) 定義系統(tǒng)的各個方面:架構(gòu)痛侍,內(nèi)核版本/內(nèi)核配置朝氓,bootloader,用戶空間package等等主届。
(5) make menuconfig赵哲, make
(6) 為不同的機器構(gòu)建通用的系統(tǒng):單獨處理
一個可以從fragment中構(gòu)建出defconfig的工具
可行的,但是并非超級簡單
每臺機器完全獨立的構(gòu)建

Yocto 配置

(1) 配置分成幾個部分:
Distribution 配置 (package配置君丁,toolchain和libc選擇...)
Machine Configuration (定義架構(gòu)枫夺, CPU功能, BSP)
Image recipe (target安裝什么package)
Local配置 (Distribution和默認machine選擇绘闷, 編譯時使用多少個線程橡庞, 是否刪除build artifact)
(2) 有必要收集將要被使用的layers,并宣布它們印蔗。
(3) 允許為不同的機器構(gòu)建相同的鏡像扒最,或者為同一個機器構(gòu)建不同的distribution或鏡像。

Buildroot layers

(1) 沒有l(wèi)ayer的概念
(2) 所有的包在官方repository中維護
(3) 添加BR2_EXTERNAL
允許存儲包定義喻鳄、配置和其他人工文件
一個BR2_EXTERNAL
通常用作專有的/客制化的包和配置
僅增加包,不覆蓋buildroot中的包

yocto layers

(1) layer機制允許修改和增加新package或image
(2) core build system确封, BSP和custome modifications之間明確分離
(3) 第三方提供為它們layers提供BSP除呵,或者一套處理專用應用程序的方法
(4) Layers需要兼容和使用相同的OE branch base
(5) 謹防layer quality, 檢查不是系統(tǒng)性的
(6) OpenEmbedded Metadata Index 列出了可用的layers爪喘,recipes颜曾,machines:http://layers.openembedded.org/layerindex/
(7) 此外,有一個強大的override機制秉剑,可以基于machine或者distribution調(diào)整recipe variables

buildroot/yocto toolchain

相同的功能:
(1) 構(gòu)建自己的toolchain泛豪,基于gcc、C庫(glibc侦鹏, uClibc诡曙, musl)
(2) 使用external toolchain, 對于buildroot更簡單略水,因為內(nèi)置有這個功能价卤,對于yocto,只有在additional vendor layers正真完全支持渊涝。

buildroot new package
涉及三個文件Config.in xxx.mk xxx.hash

yocto new package
涉及一個文件×××.bb

buildroot: complexity
(1) 設計成簡單使用
(2) 對于core慎璧,每個建議的功能以有用性/復雜度比來分析
(3) core邏輯完全使用make編寫床嫌,少于1000行的code包含了230行注釋: 確實容易理解what、why胸私、how厌处;幾乎和一個shell腳本一個接一個地下載、提取岁疼、構(gòu)建阔涉、安裝軟件那樣簡單。
(4) 文檔很充分五续,有很多資源可用
(5) 一個小時的talk足以描述所有內(nèi)部實現(xiàn)(ELCE 2014)
(6) IRC上典型的反饋: 來自Yocto洒敏,非常驚喜,使用起來這么簡單疙驾。 這是讓我為難的第一件事凶伙。

Yocto Project: complexity
(1) 有點陡峭的學習曲線
(2) 核心是bitbake, 一個用python編寫的單獨項目(60千行代碼)
(3) 一套class定義common task
(4) recipe 使用 bitbake specific language它碎, python 和 shell 混合編寫
(5) 日志和調(diào)試可幫助理解每個task具體做了什么
(6) 詳細的文檔函荣,但是有很多不同的配置變量
(7) 并不總是容易理解最佳實踐(比如, Poky 不能用于 production扳肛, distro/image 修改不能在local.conf中做傻挂, 刪除tmp/)
(8) 人們依然對一些術(shù)語感到疑惑(Yocto Project, Poky挖息, OpenEmbedded金拒, bitbake)

Buildroot packages
(1) 1800+ packages
(2) Graphics: X.org, Wayland, Qt4/Qt5, Gtk2/Gtk3, EFL
(3) Multimedia: Gstreamer 0.10/1.x, ffmpeg, Kodi, OpenGL
(4) Languages: Python2/3, PHP, Lua, Perl, Erlang, Mono, Ruby, Node.js
(5) Networking: Apache, Samba, Dovecot, Exim, CUPS, lots of servers/tools
(6) Init systems: Busybox(default), initsysv, systemd
(7) No support for a toolchain on the target

Yocto Project packages
(1) 幾千個recipes: 對于oe-core, meta-openembedded套腹, meta-qt5大約2200個绪抛。通過Metadata Index知道多余8400
(2) 大部分和buildroot一樣
(3) 更多的語言: Java, Go, Rust, smalltalk
(4) 對于Qt3仍有一個起作用的layer
(5) meta-virtualization(Docker, KVM电禀, LXC幢码, Xen)和 meta-openstack layers

Buildroot 依賴方法

(1) 極簡依賴, 如果一個功能可以關(guān)閉尖飞,那么默認關(guān)閉
(2) 很多自動依賴症副,比如,如果你開啟OpenSSL政基,將自動從其他可提供SSL支持的enabled的包中獲得SSL支持
(3) 默認毫不費力的的得到小的根文件系統(tǒng)

Yocto Project 依賴方法

(1) 在distribution級進行package 配置
開啟OpenSSL將對所有package打開贞铣,但是可以對一些package關(guān)閉,相反沮明,也可以對選定的pacakge開啟一些功能咕娄。
(2) 可以在machine級進行修改,但是應該避免這樣做
(3) 每個recipe可以定義自己的默認功能集珊擂,一個穩(wěn)健的默認配置圣勒。

Buildroot 更新/安全

(1) 每三個月release费变,兩個月開發(fā),一個月穩(wěn)定
(2) release包含package版本更新: security 更新和major 更新
(3) 核心架構(gòu)也可能潛在性的發(fā)生改變
(4) 沒有LTS版本圣贸,用于需要自己處理
(5) 正在提供一個腳本來評估給定buildroot配置中未解決的CVE (Common Vulnerabilities & Exposures)

Yocto Project 更新/安全

(1) 每6個月release挚歧,一次在4月,一次在10月
(2) 可通過wiki: https://wiki.yoctoproject.org/wiki/Yocto_Project_v2.1_Status了解planning和roadmap
(3) 在M1和最終release之間的三個月內(nèi)包含4個milestone
(4) 至少先前和當前release的版本有指定維護者吁峻,他們獲取安全和重要的解決方法滑负,但是沒有recipe更新
(5) 舊版本由社區(qū)維護

Buildroot 檢測配置修改

(1) Buildroot不很智能
(2) 當修改配置是,它不嘗試檢測哪些需要rebuild
(3) 一旦build一個package用含,buildroot將不rebuild它矮慕,除非你強制
(4) 大的配置修改需要full rebuild
(5) 小的配置修改可以不需要full rebuild
(6) 一個配置,一個build啄骇,不能配置間不能分享

Yocto Project 檢測配置修改

(1) bitbake 維護一個shared State Cache允許增加的builds
(2) 它通過創(chuàng)建inputs的checksum檢測task的input修改
(3) 該cache可在所有的builds間共享痴鳄, 對于類似的machines,build很快
(4) 可以跨主機分享該cache缸夹,比如一個夜間服務器和一個開發(fā)機痪寻,大大加快full build

Buildroot: architecture support

(1) 支持很多架構(gòu)
(2) ARM(64), MIPS虽惭, PowerPC(64)橡类, x86/x86-64
(3) 也支持很多更專用的架構(gòu): Xtensa, Blackfin, ARC, m68k, SPARC, Microblaze, NIOSII; ARM noMMU, especially ARMv7-M
(4) 架構(gòu)供應商提供援助: Imagination Technologies的MIPS, IBM的PowerPC64, Synopsys的ARC芽唇, Analog Devices的Blackfin

Yocto Project: architecture support

(1) core中顾画, ARM, MIPS匆笤, PowerPC研侣, X86,以及它們64bit 系列
(2) separate layers: Microblaze疚膊, NIOSII
(3) 通常芯片廠商維護他們自己的BSP layer: meta-intell义辕, meta-altera (ARM & NIOSII)虾标, meta-atmel寓盗, meta-fsl, meta-ti璧函, mtea-xilinx ...
(4) 社區(qū)提供: meta-rockchip傀蚌, meta-sunxi

Buildroot: minimal build
最小的build花費15分25秒,image size 2.2MB

yocto project: minimal build
最小build花費50分47秒蘸吓, image size為4.9MB善炫。 如果有存在的sstate-cache,花費1分21秒

License
(1) 都可以創(chuàng)建一個使用許可證的列表
(2) 都能夠檢測到許可證更改
(3) Yocto項目可以剔除GPLv3

Buildroot & Yocto 選擇

Buildroot

(1) 非常專用的CPU架構(gòu)
(2) 非常小的rootfs < 8M
(3) 對工程師沒有很大的要求
(4) 不支持各種mechines或者類似的系統(tǒng)
(5) 不需要包/部分系統(tǒng)的更新
(6) 小系統(tǒng)

yocto

(1) 不是非常特殊的CPU架構(gòu)库继,不是非常小的rootfs箩艺,需要有經(jīng)驗的工程師窜醉。
(2) 不是非常特殊的CPU架構(gòu),不是非常小的rootfs艺谆,需要有經(jīng)驗的工程師榨惰。支持幾種類似的系統(tǒng)
(3) 不是非常特殊的CPU架構(gòu),不是非常小的rootfs静汤,需要有經(jīng)驗的工程師琅催。需要更新包和部分系統(tǒng)
(4) 不是非常特殊的CPU架構(gòu),不是非常小的rootfs虫给,需要有經(jīng)驗的工程師藤抡。非常大的系統(tǒng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抹估,隨后出現(xiàn)的幾起案子缠黍,更是在濱河造成了極大的恐慌,老刑警劉巖棋蚌,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫁佳,死亡現(xiàn)場離奇詭異,居然都是意外死亡谷暮,警方通過查閱死者的電腦和手機蒿往,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湿弦,“玉大人瓤漏,你說我怎么就攤上這事〖瞻#” “怎么了蔬充?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長班利。 經(jīng)常有香客問我饥漫,道長,這世上最難降的妖魔是什么罗标? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任庸队,我火速辦了婚禮,結(jié)果婚禮上闯割,老公的妹妹穿的比我還像新娘彻消。我一直安慰自己,他們只是感情好宙拉,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布宾尚。 她就那樣靜靜地躺著,像睡著了一般谢澈。 火紅的嫁衣襯著肌膚如雪煌贴。 梳的紋絲不亂的頭發(fā)上御板,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音牛郑,去河邊找鬼稳吮。 笑死,一個胖子當著我的面吹牛井濒,可吹牛的內(nèi)容都是我干的灶似。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瑞你,長吁一口氣:“原來是場噩夢啊……” “哼酪惭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起者甲,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤春感,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虏缸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲫懒,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年刽辙,在試婚紗的時候發(fā)現(xiàn)自己被綠了窥岩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宰缤,死狀恐怖颂翼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慨灭,我是刑警寧澤朦乏,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站氧骤,受9級特大地震影響呻疹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筹陵,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一刽锤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惶翻,春花似錦姑蓝、人聲如沸鹅心。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旭愧。三九已至颅筋,卻和暖如春宙暇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背议泵。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工占贫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人先口。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓型奥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碉京。 傳聞我的和親對象是個殘疾皇子厢汹,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容