Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
使用例
●@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
Buildroot - make
●何をしているか
1. ソースコードのダウンロード
2. クロスコンパイラ等ツールチェーンのコンフィグ、ビルド、インストール●既存ツールチェーンのインポート
3. 選択したパッケージの configure, ビルド、インストール
4. カーネルイメージのビルド(選択時)
5. ブートローダのビルド(選択時)
6. rootfsの生成
4
BUILDROOT メニュー
1. コンパイラ
2. /dev 管理
3. init system
4. 主要パッケージ一覧
13
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
External toolchain
●既存ツールチェイン
○有名で試験済みのツールチェインを使いたいとき
●確認済み:CodeSourcery, Linaro, crosstools-NG
○ sysroot 機能必須
●未対応:OpenEmbedded, Yocto, distribution toolchain
○コンパイル済みライブラリが含まれていて修正できない
○ x86ターゲットの場合もクロスコンパイラが必須
15
/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
/dev 管理
● devノード (続き)
④ Dynamic using devtmpfs + eudev●スタンドアローン版udev
○一般的なディストリビューションのudevと同じ (Systemdの一部)
● init systemがsystemdの場合はudevになる。
17
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
主要パッケージ一覧
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
各パッケージのコンフィグ変更
BusyBox / uClibc / Linux Kernel
22
ビルド
ディレクトリ構成
ビルドの仕方
フルリビルドが必要な場合
各パッケージのみリビルドする場合
26
ビルドの仕方
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
フルリビルドが必要な場合
● Buildrootの方針
○パッケージの依存関係は定義できるが、開発者に対応を強いるのは困難。ユーザ側で対応する。
●ユーザに知っておいて欲しいこと
① ターゲットのアーキテクチャを変更:フルリビルド
② ツールチェインを変更:フルリビルド
③ パッケージを追加:リビルド●追加により他パッケージへ影響がある場合は除く例)パッケージAがあれば機能が有効になるパッケージBがある
④ パッケージの除去:(急がないが)フルリビルド推奨
29
フルリビルドが必要な場合
●ユーザに知っておいて欲しいこと(続き)
⑤ パッケージ内オプションを変更:フルリビルド
⑥ rootfsスケルトンファイルを変更:フルリビルド●overlay, post-build/imageスクリプトの変更はリビルドのみ
●ビルドエラーになった場合はフルリビルド試行
30
各パッケージのリビルド方法
●パッケージのビルドディレクトリを消す(簡単で確実)
○ $ rm –rf output/build/<package>
○ $ make <package>
●パッケージのビルドディレクトリをクリーンする
○ $ make <package>-dirclean
●パッケージをリビルド、インストールする
○ $ make <package>-rebuild
●コンフィグからやり直す
○ $ make <package>reconfigure
31
ソースコードのダウンロード
● $ 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
ライセンス確認 [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
グラフ
●出力形式の指定
○ $ BR2_GRAPH_OUT=svgmake graph-depends graph-build graph-size
○ $ man dot (-Tオプション記載のフォーマット)
●指定パッケージ起点
○ $ make busybox-graph-depends
38
もう少し踏み込んで開発したい
defconfigの作成
rootfsの構成変更
ユーザの追加
開発中パッケージの指定
39
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
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
開発中パッケージの指定
● 特定のパッケージは別のパスを指定したい場合。例えば、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
まとめ
●組込みLinux向けユーザランド構築ツール『Buildroot』はツールチェインからソースコードより生成する便利なツール
● 100超のリファレンスボードのdefconfigあり1500超のパッケージあり。設定変更も容易で、依存関係も図示。
●コツは必要だが、豊富なマニュアルとシンプルな作りで開発しやすい。
44