2012年1月1期Linux40: 【BusyBox】BuildRoot【µClibc】 (86) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
42: Windows100%(2007.2月号)版KNOPPIXについて (153)
43: 【Linux入れ】そのサポート打ち切りにつき【Me、98】 (621)
45: CentOS Part 34【RHEL Clone】 (686)
46: Linux雑誌について語ろう (282)

【BusyBox】BuildRoot【µClibc】


1 :11/12/19 〜 最終レス :12/01/06
TinyCore並に軽量化され自分の環境に最適化したシステムを作りませんか?
汎用ディストリビューションを作るのが目的ではありません、あくまでもキツイスペック用に
自分専用のシステムを自分の手で作り上げるのが目的です。一番近いイメージはCLFSです。
情報交換が目的であり、成果物を配布するのが目的ではありません。
ターゲットは主に x86, x86-64 とします。
実機で動かすのを目標としますが、Live CDや仮想環境でも構いません。
また、uClibcを標準としますが、Newlib や dietlibc での動作実績も歓迎します。
* uClibc,Newlib,dietlibc は組み込みLinux向け標準Cライブラリです。
* BuildRoot は組み込み開発を容易にするためのツールです
参考サイト
BuildRoot: http://www.buildroot.org/
BusyBox: http://www.busybox.net/
uClibc: http://www.uclibc.org/
Newlib: http://sourceware.org/newlib/
diet libc: http://www.fefe.de/dietlibc/
関連スレ
▼2chでディストリビューションを作ろう!Part3
http://engawa.2ch.net/test/read.cgi/linux/1088167086/
LFS(Linux From Scratch) 統合スレ 2
http://engawa.2ch.net/test/read.cgi/linux/1155412397/
キツいスペックのPCで頑張ってる人の為のスレ 13
http://engawa.2ch.net/test/read.cgi/linux/1295530575/

2 :
スレタイが……。
uClibcにしとけば良かった orz
興味のある方、もうやったぜという方、書き込み待ってます。

3 :
buildrootのコンフィグレーションは至って簡単です
カーネル再構築の時の make menuconfig と同じです
また make help でヘルプの出力が出来ます。
busybox, linux, uclibcのメニューコンフィグも個別に呼び出せます
$ make busybox-menuconfig
$ make linux-menuconfig
$ make uclibc-menuconfig
make するとGentoo の emerge -e world のように自動ダウンロード、ビルド、インストールを行い
rootfsのイメージ作成までやってくれます。

4 :
TECH I シリーズ Vol.16 組み込みLinux入門
http://www.cqpub.co.jp/hanbai/books/33/33271.htm
組み込みLinuxの手引き
http://www26.atwiki.jp/funa_tk/pages/1.html
amazon組み込みlinuxのホームページ
http://www.amazon.co.jp/%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BFLinux/lm/2B6WV11PWM03J
体験!マイコンボードで組込みLinux
http://gihyo.jp/dev/serial/01/micom-linux

5 :
極小だとXなし、日本語なしでOk?

6 :
なんでもおkだけど出来るだけデスクトップを目標としたいのでXあり日本語ありのほうが。
とりあえず最初はX無し日本語無しで動作させて追加していくのがいいかと。
どうせallyesにするとコケまくりで頭爆発するのが落ちなので。

7 :
Xありでもvesaだとドライバ選択不要だから楽かもね

8 :
極端な話CUIなしにすればコマンドライン系は全部不要になるから
速度は上がるよ
カーネルとローダとライブラリとXだけだし
後は起動時のシェル

9 :
開発の速度ね

10 :
実を言うとX入れて起動させるところまで行ってない。
buildrootの中からXの有無出来るのでお気楽に出来ると思うけど
一発でスムーズに最後まで行けないと思う。
で、CUIの部分は全部BusyBoxで済ませられる。
シェルもBusyBox ashで。
ブートローダが一番ネックかも。
インスコは簡単に出来ても実機に移してブートローダーがちゃんと機能するかどうか。
ひとつひとつ手作業でビルドするんじゃ無いので速度はあまり問題じゃないかも。
問題はこける場所が環境により人それぞれなので、そのための情報交換場所があればいいなと思い。
くだスレだと特殊な環境なので相手にされない可能性が大だと思って。

11 :
通常のディストリで一番面倒なのは
パッケージ管理とかインストーラとかハード認識
だったりすると思うんだけど
ライブCDを作るイメージ?

12 :
tiny core のisoイメージ50MB弱だけど
それよりもBuildRootの生成バイナリは小さいの?

13 :
あと作成したrootfsの中に開発環境も含めたいんだけど
過去にやったときはuClibcにリンクさせたgccを作る事ができず
結局toolchainのgcc使って試行錯誤しながら放り込んだ。
その時のメモが残ってないので再チャレンジ。
ビルド終わってchrootで一通り弄り倒したので仮想にパーティション作成するところから始めてくる。
grubの壁さえ越えりゃこっちのもん。
>>11
パッケージ管理はお好み
一応ipkgというのがあるけど別途rpmやdebianutils入れたほうがいい。慣れた物で。
インストーラは要りません。>>1に書いてるけど配布目的じゃないので。
インストールはbuildrootで生成されたディスクイメージを目的のデバイスへ転送という形
>>12
そこは何を選択するかによって違ってくるしLiveCDにするなら圧縮FSの差も出てくる。
打倒な所はSquashFSだけで読み込み専用だけど、unionfsも入れて常用LiveCDにするかはお好み。
TinyCoreのようにfltkのアプリも作れば出来るかも知れないけど、そこを目標にするのは趣旨が違う。
あくまでも自分で使う小さいシステムを作るのが目的なので最小を目指すかどうかもお好み。
TCより小さくできるかも知れないし、TCではやってないXorgとGNOME3とかKDE4とかにチャレンジするもヨシ。
X無しのext2イメージだけどカーネルも入れて30MBになった。(-O2 でビルド)
色々入れまくってTCより小さくするのは難しいかも。
.h,.a,.laなど不必要な物を削除してビルドオプションもサイズ優先にするなど。

14 :
ハード認識は最低限自分の使ってるハードのドライバがあれば良いので
そのようにカーネル構築して、必要なXドライバだけ入れたらおk。
この辺りはGentoo, LFSでのカーネルビルド、BLFSでのXの構築と同じ。

15 :
uClibc使うだけならGentooでもemerge使って楽にクロスコンパイルできるんだけどね
所詮遊びなので固いことは抜きにしたほうが面白い。

16 :
常用ではない?
開発環境は必要?
tiny core カーネル2.9MB rootfs未圧縮 15MB強 Xvesaあり

17 :
読み込み専用のLiveCD作ってしまったら常用するシステムでは無くなってしまうから。
開発環境は必要
釣りじゃなければ、とりあえずやってみた方が早いよ
落とすのはbuildroot1つだから

18 :
puppyって常用可能だよ
ループバックファイルシステムに追加のアプリ追加する感じだし
そうじゃなくてbuildrootじゃなくてもいいだろって話

19 :
完成品をお求めならTCやPuppyをどうぞって事よ
BuildRootってのはディストリビューションではなく自動化するスクリプトだからね。
勘違いしないように。

20 :
tinycoreを日本語化している連中は何だよという話になるぞ
tinycoreの類似ディストロじゃまずいの?
tinycoreライクなという話

21 :
>>19に書いたようにBuildRootはディストリビューションじゃないので実際の運用はLFSよりハードル高いです。
LFS,CLFSは手作業でビルドして行きますが、ブートスクリプト群も用意されている親切な
ディストリビューションの1つなのでその辺りは困りません。
BuildRootで構築するシステムは全て自分で書き上げて行きます。
もちろん>>20のような日本語化してくれる有志もいません。全部自分でやります。
まぁ日本語化と言っても1から作り上げるので完成された英語版ディストリビューションに
改めて日本語環境を追加する作業とは少し違います。
この説明がvンカンプンの人は手を出さないほうがいいでしょう。
あくまでも組み込みで利用されてるツール類を使って自分だけのLinuxシステムに仕上げるのが趣旨です。

22 :
http://usamimi.info/~linux/d/up/up0801.png
まず、このSSを見てください。
vboxでchrootしただけの状態ですが、見事に何にもありません。
シェルはBusyBoxのashです。
/etc/profileはありますが、最小限のPS1です。
正直マゾしか使えません。

23 :
uclibcは小さいけどPC向けではない見たい
制御系の用途で使う物だと
glibcで良くない?
http://ja.wikipedia.org/wiki/%CE%9CClinux
http://monoist.atmarkit.co.jp/mn/articles/0809/03/news115.html

24 :
>>23
glibcでいいならLFSでいいよ
>>1
関連スレ

25 :
>>24
参加者には
glibcとuclibcの違いをきちんと説明した方が良いよ
制御系だと思わぬ所に流れるからね
じゃ落ちます

26 :
Wikipedia見るくらいでいいんじゃないかな。
すげぇ他力本願だが、詳しいことは現役で組み込み開発やってる人に助言してもらおう
uclibcのmenuconfigでAll Locale選んどけばツールチェインはロケール要らないよな。

27 :
でもこれやって工作員用PCになったりしない?

28 :
そもそも実用的になるのかどうか?
NASとかに入れる事を考えると結構使えるかも知れない。
busyboxにhttpd,ftpd,sendmailが入ってるから案外。
でも全て簡易版なのでデーモンのログ取ったりできないからそこは工夫しなきゃダメだろうね。
別にbusyboxの内部コマンド全部使わなくてもいい。
X入れてKDEとかGNOME起動したら面白いだろうなぁ。

29 :
isoで出力するとoutput/images/rootfs.iso9660が出来た
vboxが.iso9660では認識しないので.isoにリネーム
仮想マシンを起動するとgrub 0.97が立ち上がって
Hard Drive (first partition)
BuildRoot ISO9660 image
BuildRootでeを押して確認
kernel /kernel
initrd /initrd
とりあえず、BuildRootで起動してみる
カーネルパニック
rootfs.isoの中を見る
/[BOOT]/Bootable_NoEmulation.img
/boot/grub/menu.lst
/boot/grub/stage2_eltolito
/boot.catalog
/kernel
/initrd
root= を指定しろと言うんだけどinitrdの展開先ってどこになるんだろ?
kernel /kernel root=/dev/sr0 じゃ無理ですた

30 :
>>29
tiny coreを見て勉強しよう
fedoraだとtinycore.gzの中身が見れたよ
ブートローダにroot=の設定は無さそう

31 :
なんと俺向けリアルタイムなスレなんだ
今Gentooで作ってるがbaselayout-liteが無くなったのがかなり痛い
baselayout-liteが使えれば適当にディレクトリ作って
ROOT=/hoge emerge baselayout-lite uclibc busybox
で/hoge以下にある程度完成しちゃうのに・・・
>>29
/dev/sr0はcdドライブでinitrdはメモリ上に展開した起動用極小Linux
だから目を付けてる所が間違ってる気がする
>>30
tinyはsyslinuxだし29はgrub使ってるから作法が違うかも

32 :
>>31
ちゃうわい
tinyは必要なもの全部initrd上に入ってるからroot指定が要らない

33 :
ああ、そういう意味か
極小Linuxでもやり方が幾つもあるから勘違いしちゃった

34 :
isoにするならsyslinuxかなぁと漠然と思ってたんだけど
iso選んだらbuildrootが自動でgrub選択したのでそのまま出力してみた
あとbearboxっていうブートローダもあるんだね。
ブートローダは4つほどサポートされてる。
bearbox
grub
syslinux
(ここ名前忘れた。bearboxの前身らしい)
>>31
>/dev/sr0はcdドライブでinitrdはメモリ上に展開した起動用極小Linux
>だから目を付けてる所が間違ってる気がする
てことは /dev/ram0 とか?

35 :
>tinyは必要なもの全部initrd上に入ってるからroot指定が要らない
んあ?initrdに全部入ってる場合は指定しなくてもいいのか。
つぅ事はカーネル設定見直すのが先か……。

36 :
ははw ソースとオブジェクトが容量取ってるんでdistcleanしたら
output/images/の中も消えてた。もう一度最初から…… orz

37 :
ちょうど手元にあったGentooのLiveCDだと
append root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/image.squashfs cdroot initrd=gentoo.igz
ってなってるね
image.squashfsの中身を見てないけどこれが多分ルートファイルシステムの実体なのかも

38 :
>>37
thx!
再チャレンジしてみる

39 :
あーでもinitrd上に全部入れるってのはGentooのLiveCDとは作りが違う気がする
だから37みたくroot=/dev/ram0が上手くいくか判らん

40 :
おk
ぼちぼちやるお

41 :
ここ読もうこれ読めば分かる
http://nabe.blog.abk.nu/0496

42 :
OpenBlockS266へのBusyBox & uClibc環境の構築
http://www.asahi-net.or.jp/~jg3h-snj/bb_and_uclibc.html

43 :
>>41-42
情報増えてる
d
bearboxじゃなくてBareboxでした
"The Barebox bootloader, formerly known as U-Boot v2."
http://www.barebox.org
失念してたのはこれ
"Das U-Boot"
U-ブートってU-ボートのもじりかなぁ

44 :
make menuconfigからやり直したらカーネルパニックはクリアした。
カーネルコンフィグは弄ってない
make uclibc-menuconfigでもういちど確認してみただけなのに。
気づかないとこで何かやってしまったんだろうけど何か解らない
Filesystem images
-*- ext2 root filesystem
   Compression method (lzma) ← ここをnoneからlzmaに変えたくらい
関係無いよなぁ……。原因が解らず気持ち悪い。
あと起動オプション、root=は無し。デフォのまま
kernel /kernel
initrd /initrd
ネットワークの設定なんてしてないので止まるのはいいがタイムアウトしてくれない。
http://usamimi.info/~linux/d/up/up0803.png ← 今日はココまで。
iso出力でgrubブート出来る事が解ったので、次はtarで出力してカスタマイズしてみる。

45 :
oeがないな。

46 :
各 .config をdate +%sとか日付でバックアップ取っとかないと
いじくり倒してたら訳わからんようになるな。
こまめにdiffしましょう。

47 :
vcsつかえよ

48 :
これくらいの用途でもメリットあるかな?
正直ソース落とす以外で使ったこと無い。
これを機にgitの使い方も覚えるか。

49 :
http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/gittutorial.html
ここ見て
git init
git add .
だけやってみた。おいおい覚えて行く事にする。
やる事増えたけど、1つ前向きになれた事に感謝する >>47

50 :

$ git commit
$ git add -f output/build/busybox-1.19.3/.config
$ git diff --cache
なるほど。こりゃ便利だ。
ってこういう使い方であってるのかな……。
スレ違いなのに3発連投してしまった。脱線スマン。

51 :
今手元に32MBのCFと64MBのスマートメディアとセレ900なマシンとEDEN533なマシンがある
さて、始めようか

52 :
>>50
あってるよ。あとはブランチを覚えたらファイル変更の管理ぐらいには使える。

53 :
>>52
thx!
これ今知ったんだけど面白そうなので貼っとく。
uClibc + BusyBoxで構築してる
http://engawa.2ch.net/test/read.cgi/linux/1295530575/868
http://bellard.org/jslinux/

54 :
完成品だけど、試すにはいいかと思う。
Aboriginal Linux
http://landley.net/code/aboriginal/
バイナリ
http://landley.net/code/aboriginal/downloads/binaries
qemuのスクリプトが(゚д゚)ウマー

55 :
grub> setup (hd0)
setup (hd0)
Floating point exception
(+д+)マズー

56 :
>>> binutils 2.21.1 Building
{ 省略 }
./archures.c:24 から include されたファイル中archive.c:130 から include されたファイル中:
:
sysdep.h:173:21:./sysdep.h:173:21: error: error: libintl.h: そのようなファイルやディレクトリはありませんlibintl.h: そのようなファイルやディレクトリはありません
archive.c: In function ‘_bfd_write_archive_contents’:
archive.c:2120: 警告: implicit declaration of function ‘dgettext’
archive.c:2120: 警告: incompatible implicit declaration of built-in function ‘dgettext’
make[5]: *** [archures.lo] エラー 1
---
output/toolchain/uClibc-0.9.32/include/libintl.h
↑これを
output/host/usr/include/
output/target/usr/include/
にシンボリックリンク作ってみたけど、やっぱ No Such になる。
gcc行を見ると -I ./../include しか無かったので直接binutils $(srcdir)のincludeディレクトリに放り込んだ。
コンパイルは進んだがリンク段階でエラーになる
../libiberty/libiberty.a -lintl
libtool: link: warning: library `/usr/local/pub/buildroot/output/host/usr/i686-unknown-linux-uclibc/sysroot/usr/lib/libintl.la' was moved.
{ libtool: link: ... 省略 }
make[1]: *** [all] エラー 2
uClibcのヘッダはどこにもインストールされないのかな?
binutils.mkかBR2_BINUTILS_EXTRA_CONFIG_OPTIONSでパス指定しなきゃダメなのだろうか……

57 :
http://agentoss.files.wordpress.com/2011/03/buildroot-tuto3-xorg.png
強者はいいなぁ。俺もここまで行きたい。
ところで2011.11はbuildrootの中からfluxboxも選べるようになってるね。

58 :
>>57
すげーなそれ
ウチでは
make[2]: `lib/ld-uClibc.so' is up to date.
  LD libuClibc-0.9.32.so
libc/libc_so.a(sigaction.os): In function `sigaction':
sigaction.c:(.text.__sigaction+0x20): undefined reference to `__emutls_get_address'
libc/libc_so.a(close.oS): In function `__GI___close_nocancel':
(.text+0x55): undefined reference to `__libc_errno'
collect2: ld returned 1 exit status
make[1]: *** [lib/libc.so] エラー 1
って出てどうしても進まない

59 :
なんかmake cleanとかmake linuxとかmake uclibcとか色々やりまくったら通った

60 :
気が早いですが、まとめWiki用意してみました。
Wikiaの垢が無くても匿名で編集出来ます。
http://ja.buildroot2ch.wikia.com/wiki/BuildRoot2ch_Wiki

61 :
*** You must have either have gettext support in your C library, or use the
*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html)
gettext入ってるんだけどこれが出る。
恐らく target には入ってるけど toolchain に入ってないっていう事だと思うんだけどどうすればいいのか解らない。
uclibcのコンフィグやbuildrootのコンフィグで触るとこある?

62 :
http://buildroot.uclibc.org/buildroot.html#gettext-integration
こんなの見っけた。
意味解らんので試行錯誤してくるわ。(sage

63 :
$ grep -i locale .config
BR2_ENABLE_LOCALE=y
# BR2_ENABLE_LOCALE_PURGE is not set
BR2_NEEDS_GETTEXT_IF_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
$ grep -i libintl .config
BR2_PACKAGE_LIBINTL=y
$ grep -i gettext .config
BR2_NEEDS_GETTEXT=y
BR2_NEEDS_GETTEXT_IF_LOCALE=y
BR2_PACKAGE_GETTEXT=y
問題無いように見えるんだが、サパーリ解らん。

64 :
wikiに今までやった事を書いてくれないか?
何をやっていて今どうなっているのかが分からない

65 :
>>64
今までやった事
$ tar jxvf buildroot-2011.11.tar.bz2
$ cd buildroot-2011.11
$ make config
$ make busybox-menuconfig
$ make uclibc-menuconfig
$ make
$ make linux-menuconfig
$ make

66 :
>>65
了解

67 :
再現させるならconfig もいるんじゃないの?

68 :
>>67
そうだけど、対象ハードが自分のという話なんで
configの共有にはハードとの対比が必要かも

69 :
ハードってカーネルぐらいでしょ。ttyとかあるけどさ。ある程度は共通の設定ができるよ。最初から理解しないままあれもこれも入れるとはまるよ。

70 :
ドライバー関係の話

71 :
gettext-develが入ってないとか?

72 :
Starting networkでハングしてログイン画面まで行けないんだけど何が原因?
シリアルコンソールなんて使った事無いしttyS0とか全然解らんわ。
話変わるけどBusyBoxはランレベルが無くて仮想コンソール使いたければsysvinit使わないと
ダメらしいが試してみようにも有効、無効にする場所も解らね。
なんか色々ダメすぎる漏れ

73 :
http://lists.busybox.net/pipermail/buildroot/2010-November/039006.html
これで、起動した━(゚∀゚)━!
年内には無理かなと諦めてたけどプロンプトでますた!
::respawn:-/bin/sh
エロい人、これの解説おながいします

74 :
つ man 5 inittab
オンラインのmanあるからそっちで見れ

75 :
ui

76 :
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../i686-pc-linux-gnu/bin/as: error while loading shared libraries: libc.so.0: cannot open shared object file: No such file or directory
make[3]: *** [sysinfo.o] エラー 1
これ母艦のlibc.so.0がエラーって事ですか?
母艦はglibcなんでlibc.so.6 -> libc-2.13.so なんだけどぉ。
binutils build log
http://usamimi.info/~linux/d/up/up0829.xxx
ぼすkて

77 :
基本的な事を伺います。BuildRootでは
1. 母艦でToolchainをビルド
2. ToolchainでHostをビルド
3. HostでTargetをビルド
この順序で合ってますか?

78 :
>>76だけど、binutils-2.21.1ではuClibcのLDSO_GNU_HASH_SUPPORTは必須?

79 :
思うんだけど、BusyBox的なguiアプリってあるのかな?
見た目は流行りのブラウザベースで他はすっからかんのシステムかと思いきや、
そのブラウザをリネームするだけで実はコンソールになったりエディタになったりしたらすごく面白い気がするんだけど。

80 :
>>79
コンソールはちょっと無理っぽいが、ブラウザさえあればクラウドサービスで大抵何でも出来そう

81 :
まあjslinuxがあるからブラウザ内でBuildRootのコンソールが飼えるんだけどね。
それが実用的かは置いといて

82 :
そういえばBusyBox内蔵の言語ってawk位かな?
forthとかlispとかLL言語がもう少しあるかと思ったんだけど意外だな。

83 :
ash とか sed のことも時には思い出してあげてください。

84 :
参考
http://www.k4.dion.ne.jp/~linux/busybox/
ところでBusyBoxのviって、$HOME/.exrc 見てくれないよな。
BusyBox viの代わりに http://ex-vi.sourceforge.net/ 入れてくれればいいのにな。
package/vi作ってConfig.inとvi.mk書けばいいんだろうけど。

85 :
package/vi/Config.in と package/vi/vi.mk 書いてから package/Config.in 見たら
if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
source "package/vim/Config.in"
endif
Vimがあったのかよ!
Show Othersしなきゃ出てこねぇって盲点だったわ orz
でもまぁex-viのほうが小さいしviコンパチなんでvimよりex-viのほうがいいかもだが、
tiny-vimとex-viならどっちがいいんだろうか?
それとex-vi, vi, exでBR2の命名に少し悩む。

86 :12/01/06
busyboxのviはUTF-8にうまく対応してないんだよなぁ。
自分の手元では、ちょっとパッチ充てて日本語が出るようにしている。
でもカーソル移動はめちゃくちゃ。
wchar_width() 見てカーソル移動するようにしたい。
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
42: Windows100%(2007.2月号)版KNOPPIXについて (153)
43: 【Linux入れ】そのサポート打ち切りにつき【Me、98】 (621)
45: CentOS Part 34【RHEL Clone】 (686)
46: Linux雑誌について語ろう (282)