buildrootインストール

buildrootのインストール

buildrootは組み込み用途のLinuxを簡単にビルドするためのツール
今回はこのツールを使って高機能なinitramfsを作る

説明

initramfsはディスクをルートにマウントする前の一時的なファイルシステムだと思うけど,
initramfsに必要なものをいろいろ突っ込んでしまえば,そこそこ使えるはず
別の使い方としてはkdump用に作っておけば,デバッグの時にいろいろできるだろう

インストール

以下からダウンロードしてファイルを解凍して適当なディレクトリに展開しましょう
[](http://buildroot.uclibc.org/)
自分は/usr/src以下に展開しました

コンパイルLinuxカーネルと同じ方法で行う

$ cd /usr/src/buildroot/
$ make menuconfig
$ make 

使った計算機はx86_64なので,menuconfigではまずCPUのアーキテクチャx86_64を選択した.
次にBusyBoxの設定を変更することでいろんなツール(NFS,sshdなど)をinitramfsにインストールできる.
入れるツールはお好みで.
あとはinitramfs(initrd)の圧縮形式の選択でcpio.gzにした.これも好みの問題?
Linuxカーネルをビルドする必要はない.(initramfsをカーネルに組み込む場合はこの限りではない)

makeが完了するとoutput/images/にinitramfsがrootfs.cpioとrootfs.cpio.gzという名前で作成されている

/bootにコピーして,GRUBのメニューを書き換える.

$ cp output/images/rootfs.cpio /boot
$ sudo emacs /boot/grub/menu.lst
#(0)                                                                                                    
title   buildroot
root    (hd0,0)
kernel  /vmlinuz-2.6.38.7-MK root=/dev/ram0 ro iommu=soft
initrd  /rootfs.cpio.gz           

以上でとりあえず起動する.

この状態で以下の点が不満だった

  • ログインシェルが表示されないこと
  • 通信ができないこと

ログインシェルが出ないのでキーボードからユーザ名とパスワードを打ってログインすることできない.
そして通信ができないのでsshで接続することもできない.要するに使えない(シリアルケーブル経由ならいけるかも)

ログインシェルが表示されない問題は以下のページでよくある質問として扱われていた
()http://buildroot.uclibc.org/downloads/buildroot.html#custom_targetfs
make menuconfigにおいてSystem configuration->Port to run a getty (login prompt)を変更すればいいらしい
初期値はttyS0となっていたところをtty1に変更し,起動したところログイン可能になった

次に通信だが,これは通信の設定ファイルを書き換える必要がある.
initramfsに入れられるファイルはbuildroot/output/target以下にあるので,
それを編集してmakeを実行すればrootfs.cpio.*のファイルが書き換わる.
書き換えるファイルはbuildroot/output/target/etc/network/interfacesである.
以下のように設定すればethernetIPアドレスが振られて通信できるようになる

auto lo eth0
iface lo inet loopback
iface eth0 inet static
      address 123.45.67.890
      network 123.45.67.0
      netmask 255.255.255.0
      broadcast 123.45.67.255
      gateway 123.45.67.1
      dns-nameservers 123.45.2.1

今日はここまで