0. 測試環境建置
- VirtualBox ver 5.2.2
- ubuntu-16.04.3-desktop-amd64.iso
- Packages already installed in ubuntu (不見得需要,只是之前測試yocto時已經安裝至系統)
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping libsdl1.2-dev xterm
$ sudo apt-get install libncurses-dev
$ wget https://buildroot.org/downloads/buildroot-2017.11.tar.gz
$ tar xvf buildroot-2017.11.tar.gz
$ cd buildroot-2017.11
$ ls configs
接著選一個適合的 configuration,因為預期測試過程會使用 qemu,因此我選擇 qemu_arm_vexpress_defconfig
2. 編譯程式
$ make qemu_arm_vexpress_defconfig$ time make$ make graph-build
在我使用的VM系統內,編譯時間如下,real 94m54.615s
user 52m8.757s
sys 7m26.322s
看來使用 build root 來進行建置過程比 yocto 快多了。編譯成功後, output/images 目錄下會產生下列檔案。
注意:qemu_arm_vexpress_defconfig 預設會使用 uclibc 編譯,使用 BusyBox 當作 init system。
3. 使用 qemu 執行 image
4. 編譯其他 Package (以 ffmpeg 為例)
5. 新增 package
6. 其他常用技巧
$ cd buildroot-2017.11
$ cd output/images
$ sudo apt install qemu-system-arm
$ QEMU_AUDIO_DRV=alsa qemu-system-arm -kernel zImage \
-M vexpress-a9 -m 512 -drive file=rootfs.ext2,if=sd,format=raw \
-dtb ./vexpress-v2p-ca9.dtb \
--append "root=/dev/mmcblk0 console=ttyAMA0,115200" -nographic
接著可以用 root 帳號登入,登入後的畫面如下:(要離開的話,按 CTRL+ a, 再按 x)
4. 編譯其他 Package (以 ffmpeg 為例)
$ cd buildroot/buildroot-2017.11$ make menuconfig
進入下列目錄 Target packages -> Audio and video applications,勾選 ffmpeg,此處預設會編譯全部的 encoder/decoder/muxer/demuxer,為了簡單,我根據此篇的設定,手動設定需要的選項,設定後的結果如下存檔後,可先單獨編譯此 Package看看是否正確$ make ffmpeg
將 ffmpeg library 一併放入 image$ make
接著用 qemu 執行,就可以看到 /usr/lib/ 下面已經多出 ffmpeg 的 library
此處列出 .config 修改前後的差異處
# BR2_PACKAGE_FAAD2 is not set
BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS=y
BR2_PACKAGE_FFMPEG=y
# BR2_PACKAGE_FFMPEG_GPL is not set
# BR2_PACKAGE_FFMPEG_NONFREE is not set
# BR2_PACKAGE_FFMPEG_FFMPEG is not set
# BR2_PACKAGE_FFMPEG_FFPLAY is not set
# BR2_PACKAGE_FFMPEG_FFSERVER is not set
# BR2_PACKAGE_FFMPEG_FFPROBE is not set
# BR2_PACKAGE_FFMPEG_AVRESAMPLE is not set
# BR2_PACKAGE_FFMPEG_SWSCALE is not set
BR2_PACKAGE_FFMPEG_ENCODERS=""
BR2_PACKAGE_FFMPEG_DECODERS="mp3"
BR2_PACKAGE_FFMPEG_MUXERS=""
BR2_PACKAGE_FFMPEG_DEMUXERS="mp3"
BR2_PACKAGE_FFMPEG_PARSERS="mpegaudio"
BR2_PACKAGE_FFMPEG_BSFS=""
BR2_PACKAGE_FFMPEG_PROTOCOLS="file"
BR2_PACKAGE_FFMPEG_FILTERS=""
# BR2_PACKAGE_FFMPEG_INDEVS is not set
# BR2_PACKAGE_FFMPEG_OUTDEVS is not set
BR2_PACKAGE_FFMPEG_EXTRACONF="--disable-debug --enable-neon"
5. 新增 package
若要在 buildroot 系統下,新增一個新的 package 並進行開發,應該參考下列幾個章節
作法簡介如下:
- 8.12.6 Using Buildroot during development
- chapter 17 Adding new packages to Buildroot
- chapter 20 Debugging Buildroot
5.1 新增一個 Package
$ mkdir -p /home/albert/code/mytest/
$ cd /home/albert/code/mytest/
$ vi Config.in : 內容請參考 user manual chapter 17.2
$ vi mytest.mk : 內容請參考 user manual chapter 17.5
5.2 設定 source code 路徑
因為這個 package 會用來開發,因此要設定 pkg_OVERRIDE_SRCDIR 直接使用開發中的 source codemytest.mk 的設定如下:
MYTEST_OVERRIDE_SRCDIR = /home/albert/code/mytest/設定之後,buildroot 在編譯時,會自動將 MYTEST_OVERRIDE_SRCDIR 的內容複製到 output/build/MYTEST-custom/ 目錄
5.3 編譯新的 packaget
接著用 pkg-rebuild all ,便會同步程式碼,重新編譯程式,如下:$ make mytest-rebuild all
5.4 各項新增的部分,可參考 https://github.com/alb423/buildroot_test
6. 其他常用技巧
只下載 source code 到 dl 目錄,先不要進行編譯
$ make source
產出編譯訊息報表 (編譯時間,image size)
$ sudo apt install python-matplotlib
$ make graph-build
$ make graph-size
單獨重新編譯某個 Package
$ make pkg-rebuild
支援 gdb
$ make menuconfig
然後打開這幾個選項即可
- BR2_PACKAGE_HOST_GDB
- BR2_PACKAGE_GDB
- BR2_PACKAGE_GDB_SERVER
要加速後續編譯速度,可以加入 ccache
$ make menuconfig,
然後設定 "ccache" ,此部分可參考 8.12.3 Using ccache in Buildroot