關於buildroot移植的思考

2022-03-27 13:32:17 字數 1341 閱讀 2976

buildroot是乙個成熟的sdk框架,基於它有了openwrt。

曾經有乙個專案,需要將原有的openwrt sdk改造,並且將軟體框架重新定義。嘗試精簡原來的openwrt,並且刪除所有的軟體包,留下rootfs、busybox這些基本的東西,但是還是有很多地方不如人意,難以修改(定製的過於深入)。於是找到它的前身,buildroot,進行修改。

拿到buildroot後。發現和openwrt的一大區別就是耦合性低。在openwrt裡面一些自動編譯的操作,需要在buildroot裡面手動編譯。比如make busybox-rebuild。對於linux核心來說,在make linux-menuconfig之後,需要將.config手動拷貝回來,而不是自動同步。雖然麻煩一點,但是我覺得這樣是乙個比較好的做法,畢竟之前做openwrt的時候發現整個流程太過於自動化,修改個核心配置之後一串核心的配置檔案被修改合併而讓人摸不著頭腦。

buildroot的定製是比較便捷快速的,比如你移動一些資料夾,像fs,arch這些,只需要修改config.in和makefile就可以了。因為它耦合性程度低的優點,修改起來較為容易,不會出現牽一髮而動全身的現象,所以自己修改的時候也不要增加太多的關聯,給後續的維護帶來麻煩。

buildroot的框架比較清晰。首先它軟體包的定義和openwrt類似,不含有其他的冗餘成分,做sdk該做的事,規定軟體到**編譯,傳遞哪些編譯選項,安裝到**。對於每乙個元件,即使是toolchain也是乙個軟體包,這樣一來,只需要修改config.in和相關的makefile就可以定義自己想要的東西。如果你還不明白,buildroot提供了乙個pdf說明文件,仔細看一遍再繼續研究。而openwrt的文件大而全,這是不可避免的,因為兩者的定位不同。

buildroot可以讓人更加清晰地學習linux。學習linux的編譯執行流程,buildroot比當前熱門的openwrt好得多。openwrt這個發行版定製了很多東西,你乙個make就完成的事情,可能渾然不知裡面發生了什麼。當你拿到buildroot,即使是別人做好的,只要你仔細看一下裡面的流程就會明白乙個linux是怎麼生成的,因為它的框架比較簡單。當然buildroot也是乙個大而全的東西,因為它是乙個開源的軟體,它支援很多體系結構,可以適當按照自己需要精簡。若純粹自己用,不精簡也沒關係。

buildroot沒有暗示你使用什麼。對於openwrt來說,使用了uhttpd,你可能就需要libubox和luci,lua這一堆東西,如果你不用這些,你使用openwrt可能就意義不大了。而使用了buildroot,你會選擇自己要用什麼,從busybox開始逐漸搭建你自己的王國。當然了你也可以使用uhttpd這一堆東西。

關於buildroot移植的思考

buildroot是乙個成熟的sdk框架,基於它有了openwrt。曾經有乙個專案,需要將原有的openwrt sdk改造,並且將軟體框架重新定義。嘗試精簡原來的openwrt,並且刪除所有的軟體包,留下rootfs busybox這些基本的東西,但是還是有很多地方不如人意,難以修改 定製的過於深入...

關於移植的補充

以qt為例,移植的時候安裝在了宿主機上的哪乙個路徑下,那麼當貼上到開發板檔案系統的時候最好也放到相同目錄 原因 宿主機上移植好的qt是編譯qt應用程式用的,它提供了各種標頭檔案和庫,開發板上的qt是負責提供qt應用程式的執行環境,比如qt應用程式執行時所需要的各種庫,各種字型等,原則上,編譯與執行是...

Mini XML在海思晶元上移植

解壓編譯 configure host arm hisiv300 linux 修改生產了makefile檔案 將objs mmd.o mxmldoc.o testmxml.o zipc.o libobjs 修改為 objs mmd.o libobjs 在all targets 行後增加如下內容 ar...