46

一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 2: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 3: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 4: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

使用例

●@Ubuntu 16.04 i386

○ # apt install which bash patch sed make gcc g++binutils build-essential gzip bzip2 tarperl cpio python unzip rsync git wget

○ $ make lego_ev3_defconfig

○ $ make

○ $ ls –lh output/images/sdcard.img-rw-r--r-- 1 motai 32M output/images/sdcard.img

○ $ file output/images/sdcard.img●DOS/MBR boot sector;

●partition 1 : FAT32(0xc), 32768 sectors;

●partition 2 : ext3(0x83), 23874 sectors

3

Page 5: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

Buildroot - make

●何をしているか

1. ソースコードのダウンロード

2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、インストール●既存ツールチェーンのインポート

3. 選択したパッケージの configure, ビルド、インストール

4. カーネルイメージのビルド(選択時)

5. ブートローダのビルド(選択時)

6. rootfsの生成

4

Page 6: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 7: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 8: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 9: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 10: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 11: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 12: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 13: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 14: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

BUILDROOT メニュー

1. コンパイラ

2. /dev 管理

3. init system

4. 主要パッケージ一覧

13

Page 15: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

Internal toolchain

●コンパイラ

○ gcc: gcc-4.x.x, gcc-5.x.x, gcc-6.x.x

●標準Cライブラリ

○ GNU Libc : GNU Cライブラリ

○ uClibc-ng : 組込みLinux向け小型Cライブラリ●Alpha, ARC, ARM, AVR32, Blackfin, CRIS, FR-V, H8/300, HPPA, i386, IA64, LM32, M68K/Coldfire, Metag, Microblaze, MIPS, MIPS64, NDS32, NIOS2, OpenRISC, PowerPC, Sparc, SuperH, X86_64 and XTENSA

○ musl : Linuxの標準Cライブラリ●x86, x86_64, ARM, MIPS, Microblaze, PowerPC

14

Page 16: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

External toolchain

●既存ツールチェイン

○有名で試験済みのツールチェインを使いたいとき

●確認済み:CodeSourcery, Linaro, crosstools-NG

○ sysroot 機能必須

●未対応:OpenEmbedded, Yocto, distribution toolchain

○コンパイル済みライブラリが含まれていて修正できない

○ x86ターゲットの場合もクロスコンパイラが必須

15

Page 17: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

/dev 管理

● devノード

① Static using device table

② Dynamic using devtmpfs only (推奨)●デバイス発見次第、カーネルにより/dev配下が自動生成

●kernel 2.6.32以降

●CONFIG_DEVTMPFS=y && CONFIG_DEVTMPFS_MOUNT=y

③ Dynamic using devtmpfs + mdev●BusyBox付属の軽量実装版 udev

○ /etc/mdev.confに従い、パーミッション/所有者を設定

●FirmwareへのPushリクエスト機能あり

●CONFIG_DEVTMPFS=y && CONFIG_DEVTMPFS_MOUNT=y

16

Page 18: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

/dev 管理

● devノード (続き)

④ Dynamic using devtmpfs + eudev●スタンドアローン版udev

○一般的なディストリビューションのudevと同じ (Systemdの一部)

● init systemがsystemdの場合はudevになる。

17

Page 19: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

init system

① BusyBox (推奨)

○ BR2_INIT_BUSYBOX=y

○ /etc/inittab●デフォルトであれば、/etc/init.d/rcSスクリプトを実行し、gettyを立ち上げ。

② Systemd

○ Cgroups、snapshot/restoreと多機能

○並行起動、ソケット使用、D-Bus、udev

③ SystemV

○ Upstart/Systemdに未対応なプログラム用

○ /etc/inittab (BusyBox形式と少し違う)

18

Page 20: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

主要パッケージ一覧

alsa gstreamer vlc p7zip xz dhrystone gdb

iozone kexec latencytop lmbench lttng netperf oprofile

rt-tests ramspeed stress whetstone trace-cmd valgrind aufs

cifs-utils fwup mmc-utils ntfs-3g sshfs unionfs dejavu

icon-theme sound-theme gnuchess supertuxkart fswebcam glmark2 mesa3d-demo

qt5 rrdtool directfb fbterm imagemagick mesa3d sdl

x11r7 docker synergy enlightenment fluxbox openbox metacity

hdparm i2c-tools irda-utils lm-sensors minicom powertop erlang

lua perl python php ruby openssl beecrypt

mbedtls berkeleydb mysql postgresql sqlite mongodb gamin

freetype wayland pixman libpng jquery json bitstream

x264 openssh openldap libselinux ncurses exim mutt

qemu wine clamav apache avahi dhcpcd iftop

iperf ipsec-tools lighttpd lrzsz nginx nuttcp openntpd

proftpd rsync samba4 tcpdump wireshark wireless_tools wget

bash zsh xen uemacs vim cgroups lxc

19

● 1569パッケージ

詳しくはこちら https://git.busybox.net/buildroot/tree/package

Page 21: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 22: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 23: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

各パッケージのコンフィグ変更

BusyBox / uClibc / Linux Kernel

22

Page 24: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 25: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 26: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 27: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

ビルド

ディレクトリ構成

ビルドの仕方

フルリビルドが必要な場合

各パッケージのみリビルドする場合

26

Page 28: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 29: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

ビルドの仕方

28

● $ make helpCleaning:

clean - delete all files created by builddistclean - delete all non-source files (including .config)

Build:all - make worldtoolchain - build toolchain

:<略>

●ビルド (スライド3, スライド4 もご参照ください)$ make

●フルリビルド$ make clean all

Page 30: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

フルリビルドが必要な場合

● Buildrootの方針

○パッケージの依存関係は定義できるが、開発者に対応を強いるのは困難。ユーザ側で対応する。

●ユーザに知っておいて欲しいこと

① ターゲットのアーキテクチャを変更:フルリビルド

② ツールチェインを変更:フルリビルド

③ パッケージを追加:リビルド●追加により他パッケージへ影響がある場合は除く例)パッケージAがあれば機能が有効になるパッケージBがある

④ パッケージの除去:(急がないが)フルリビルド推奨

29

Page 31: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

フルリビルドが必要な場合

●ユーザに知っておいて欲しいこと(続き)

⑤ パッケージ内オプションを変更:フルリビルド

⑥ rootfsスケルトンファイルを変更:フルリビルド●overlay, post-build/imageスクリプトの変更はリビルドのみ

●ビルドエラーになった場合はフルリビルド試行

30

Page 32: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

各パッケージのリビルド方法

●パッケージのビルドディレクトリを消す(簡単で確実)

○ $ rm –rf output/build/<package>

○ $ make <package>

●パッケージのビルドディレクトリをクリーンする

○ $ make <package>-dirclean

●パッケージをリビルド、インストールする

○ $ make <package>-rebuild

●コンフィグからやり直す

○ $ make <package>reconfigure

31

Page 33: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

ソースコードのダウンロード

● $ make source

● $ ls dlDirectFB-1.7.7.tar.gz LuaJIT-2.0.4.tar.gz Python-2.7.13.tar.xzautoconf-2.69.tar.xz automake-1.15.tar.xz bash-4.3.30.tar.gzbinutils-2.26.1.tar.bz2 bison-3.0.4.tar.xz bonnie++-1.03e.tgzbusybox-1.25.1.tar.bz2 cairo-1.14.6.tar.xz …

●バージョン管理したい場合に使用

32

Page 34: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 35: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 36: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 37: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

ライセンス確認 [2/2]

○ output/legal-info/|-- README

|-- buildroot.config

|-- legal-info.sha256

|-- host-manifest.csv

|-- host-licenses/ COPYING,LICENSE,README ファイル

|-- host-sources/ tarball,patchファイル

|-- manifest.csv

|-- licenses/ COPYING,LICENSE,README ファイル

`-- sources/ tarball,patchファイル

○各ディレクトリ以下はパッケージ毎に分かれて該当ファイルが配置される

● Buildroot license GPLv2+ [GPLv2 or any later version]

36

Page 38: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 39: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

グラフ

●出力形式の指定

○ $ BR2_GRAPH_OUT=svgmake graph-depends graph-build graph-size

○ $ man dot (-Tオプション記載のフォーマット)

●指定パッケージ起点

○ $ make busybox-graph-depends

38

Page 40: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

もう少し踏み込んで開発したい

defconfigの作成

rootfsの構成変更

ユーザの追加

開発中パッケージの指定

39

Page 41: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

defconfigの作成

● $ make savedefconfig

○ cp defconfig configs/<boardname>_defconfig

● $ make linux-update-defconfig

○ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE に指定した.configからデフォルト値を取り除いたconfigを作成

● $ make busybox-update-config

○ BR2_PACKAGE_BUSYBOX_CONFIG

● $ make uclibc-update-config

○ BR2_UCLIBC_CONFIG

40

Page 42: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

rootfsの構成変更

● Root filesystem overlays (BR2_ROOTFS_OVERLAY)

○指定したツリーをビルド後のターゲットrootfsにコピー

● Post-build scripts (BR2_ROOTFS_POST_BUILD_SCRIPT)

○全パッケージのインストール後に指定したスクリプトを実行

● Custom target skeleton (BR2_ROOTFS_SKELETON_CUSTOM)

○指定したツリーをビルド前のターゲットrootfsにコピー

● Post-fakeroot scripts (BR2_ROOTFS_POST_FAKEROOT_SCRIPT)

○ fakerootにて/devを作成した後に指定したスクリプトを実行

○ root権限にて実行される

41

Page 43: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、
Page 44: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

開発中パッケージの指定

● 特定のパッケージは別のパスを指定したい場合。例えば、Linuxカーネルは特定のソースコードを使用したい。○ 通常はBuildrootにより、ダウンロード、展開され、

output/build/<package>-<version>に置かれる。

● local.mkにて<pkg>_OVERRIDE_SRCDIRを定義○ $ cat local.mk

LINUX_OVERRIDE_SRCDIR = /home/motai/linux/

● 注意事項○ make clean の対象外となる。○ ソースコードに修正を加えたら make <package>-rebuild all を

実行する。

● 動作○ rsync にて output/build/<package>-custom にコピー○ その後、ビルド。

43

Page 45: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、

まとめ

●組込みLinux向けユーザランド構築ツール『Buildroot』はツールチェインからソースコードより生成する便利なツール

● 100超のリファレンスボードのdefconfigあり1500超のパッケージあり。設定変更も容易で、依存関係も図示。

●コツは必要だが、豊富なマニュアルとシンプルな作りで開発しやすい。

44

Page 46: 一人の満足から、社会の満足へ | 株式会社大阪エヌデーエス...Buildroot - make 何をしているか 1. ソースコードのダウンロード 2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、