buildroot是一個成熟的SDK框架,基於它有了openwrt。linux
曾經有一個項目,須要將原有的OpenWrt SDK改造,而且將軟件框架從新定義。嘗試精簡原來的OpenWrt,而且刪除全部的軟件包,留下rootfs、busybox這些基本的東西,可是仍是有不少地方不如人意,難以修改(定製的過於深刻)。因而找到它的前身,buildroot,進行修改。架構
拿到buildroot後。發現和OpenWrt的一大區別就是耦合性低。在OpenWrt裏面一些自動編譯的操做,須要在buildroot裏面手動編譯。好比make busybox-rebuild。對於linux內核來講,在make linux-menuconfig以後,須要將.config手動拷貝回來,而不是自動同步。雖然麻煩一點,可是我以爲這樣是一個比較好的作法,畢竟以前作OpenWrt的時候發現整個流程太過於自動化,修改個內核配置以後一串內核的配置文件被修改合併而讓人摸不着頭腦。框架
另外,將OpenWrt的SDK移植到buildroot也是使人愉快的,拷貝toolchain,busybox和內核,再花功夫研究文件系統image的生成,寫一個post-build腳本,配置CPU架構等一些參數,image就能夠下載運行了。固然須要根據本身的需求精簡、修改一些東西。好比你想把平臺有關的東西塞到一些文件夾裏面,再添加一些文件夾做爲其餘平臺的根文件夾,多個-平臺存在於同一份SDK裏面,這樣都是能夠的。不過修改的時候不要定製過分,把一些之後有用的東西給刪了,到最後要用的時候仍是要改回來。固然了,只要你有toolchain、內核和文件系統layout就能夠作移植了,不必定要給出很好的原版SDK。post
buildroot的定製是比較便捷快速的,好比你移動一些文件夾,像fs,arch這些,只須要修改Config.in和makefile就能夠了。由於它耦合性程度低的優勢,修改起來較爲容易,不會出現牽一髮而動全身的現象,因此本身修改的時候也不要增長太多的關聯,給後續的維護帶來麻煩。學習
buildroot的框架比較清晰。首先它軟件包的定義和OpenWrt相似,不含有其餘的冗餘成分,作SDK該作的事,規定軟件到哪裏編譯,傳遞哪些編譯選項,安裝到哪裏。對於每個組件,即便是toolchain也是一個軟件包,這樣一來,只須要修改Config.in和相關的makefile就能夠定義本身想要的東西。若是你還不明白,buildroot提供了一個pdf說明文檔,仔細看一遍再繼續研究。而OpenWrt的文檔大而全,這是不可避免的,由於二者的定位不一樣。ui
buildroot可讓人更加清晰地學習linux。學習linux的編譯運行流程,buildroot比當前熱門的OpenWrt好得多。OpenWrt這個發行版定製了不少東西,你一個make就完成的事情,可能渾然不知裏面發生了什麼。當你拿到buildroot,即便是別人作好的,只要你仔細看一下里面的流程就會明白一個linux是怎麼生成的,由於它的框架比較簡單。固然buildroot也是一個大而全的東西,由於它是一個開源的軟件,它支持不少體系結構,能夠適當按照本身須要精簡。若純粹本身用,不精簡也不要緊。lua
buildroot沒有暗示你使用什麼。對於OpenWrt來講,使用了uhttpd,你可能就須要libubox和luci,lua這一堆東西,若是你不用這些,你使用OpenWrt可能就意義不大了。而使用了buildroot,你會選擇本身要用什麼,從busybox開始逐漸搭建你本身的王國。固然了你也可使用uhttpd這一堆東西。ci