ROOT FileSystemのbuild

Buildrootのbuild
  1. 作業用ディレクトリにダウンロードしたソースを展開し、オブジェクト用ディレクトリを作成します。
    $ cd /proj/MilkCake $ tar xjvf buildroot_<日付>.tar.bz2
  2. Ubunto 16.04 LTSの場合(正確にはGCC 5.xを使用する場合)は以下の修正を行います(赤字部分を追加)(2016/05/23、2016/10/07追記)
    buildroot-2015.05/package/ncurses/0002-gcc-5.x-MKlib_gen.patch 25行目
    + 5.[01234].*) # assume a "broken" one
  3. コンフィギュレーションの設定。
    デフォルトコンフィギュレーションを作成します。
    $ cd buildroot-2015.05 $ make O=../buildroot.obj halley_milkcake_defconfig
    コンフィギュレーションを変更します。
    $ cd ../buildroot.obj $ make menuconfig
    メニューが表示されたら以下の項目を変更します。
    Toolchain ---> Toolchain path コンパイラをインストールしたパスを設定する
    makeを実行します。
    $ make
  4. buildroot.obj/images/rootfs.tar.gz が作成されたルートファイルシステムのアーカイブファイルです。
micro SDカードの作成
  1. micro SDカードを挿入し、パーティションを作成します。例では/dev/sdcとなっていますが、環境によって異なりますので注意してください。
    $ sudo umount /dev/sdc1 ←これ以外にもパーティションがマウントされていたらアンマウントする [sudo] password for user_name: <パスワードを入力> $ sudo fdisk /dev/sdc ←パーティションの作成 [sudo] password for user_name: <パスワードを入力> コマンド (m でヘルプ): p ←現在のパーティションの状態を確認 Disk /dev/sdc: 15.9 GB, 15926820864 bytes ヘッド 255, セクタ 63, シリンダ 1936, 合計 31107072 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x03199632 デバイス ブート 始点 終点 ブロック Id システム /dev/sdc1 8192 31107071 15549440 c W95 FAT32 (LBA) ←パーティションが一つだけある コマンド (m でヘルプ): d ←パーティションの削除。複数ある場合はすべて削除 選択したパーティション 1 コマンド (m でヘルプ): p ←結果を確認 Disk /dev/sdc: 15.9 GB, 15926820864 bytes ヘッド 255, セクタ 63, シリンダ 1936, 合計 31107072 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x03199632 デバイス ブート 始点 終点 ブロック Id システム ←パーティションは一つもない コマンド (m でヘルプ): n ←新しいパーティションを作成 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p パーティション番号 (1-4, 初期値 1): 1 ←パーティション1を指定 開始 セクタ (2048-31107071, 初期値 2048): 2048 Last セクタ, +セクタ数 or +size{K,M,G} (2048-31107071, 初期値 31107071): +1G ←1GByteを指定 コマンド (m でヘルプ): n ←新しいパーティションを作成 Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p パーティション番号 (1-4, 初期値 2): 2 ←パーティション2を指定 開始 セクタ (2099200-31107071, 初期値 2099200): 2099200 Last セクタ, +セクタ数 or +size{K,M,G} (2099200-31107071, 初期値 31107071): +2G ←2GByteを指定 コマンド (m でヘルプ): p ←結果を確認 Disk /dev/sdc: 15.9 GB, 15926820864 bytes ヘッド 255, セクタ 63, シリンダ 1936, 合計 31107072 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x03199632 デバイス ブート 始点 終点 ブロック Id システム /dev/sdc1 2048 2099199 1048576 83 Linux ←パーティションが作成された /dev/sdc2 2099200 6293503 2097152 83 Linux コマンド (m でヘルプ): t ←パーティションタイプを変更 パーティション番号 (1-4): 1 ←パーティション1を指定 16進数コード (L コマンドでコードリスト表示): b ←W95 FAT32を指定 パーティションのシステムタイプを 1 から b (W95 FAT32) に変更しました コマンド (m でヘルプ): p ←結果を確認 Disk /dev/sdc: 15.9 GB, 15926820864 bytes ヘッド 255, セクタ 63, シリンダ 1936, 合計 31107072 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x03199632 デバイス ブート 始点 終点 ブロック Id システム /dev/sdc1 2048 2099199 1048576 b W95 FAT32 ←パーティションタイプが変更された /dev/sdc2 2099200 6293503 2097152 83 Linux コマンド (m でヘルプ): w ←変更を書き込んで終了 パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 警告: DOS 6.x パーティションを作成、または変更してしまった場合は、 fdisk マニュアルの追加情報ページを参照してください。 ディスクを同期しています。
  2. 作成したパーティションをフォーマットします。パーティション1をFAT、パーティション2をEXT4とします。
    $ ls /dev/sdc* ← 作成されたパーティションを確認 /dev/sdc /dev/sdc1 /dev/sdc2 $ sudo mkfs.vfat /dev/sdc1 [sudo] password for user_name: <パスワードを入力> mkfs.fat 3.0.26 (2014-03-07) $ sudo mkfs.ext4 /dev/sdc2 [sudo] password for user_name: <パスワードを入力> mke2fs 1.42.9 (4-Feb-2014) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
  3. フォーマットしたパーティションをマウントし、ルートファイルシステムを展開します。
    $ mkdir /tmp/mnt ← マウントポイントを作成 $ sudo mount /dev/sdc2 /tmp/mnt/ ← マウントする [sudo] password for user_name: <パスワードを入力> $ cd /tmp/mnt/ ← マウントしたディレクトリに移動 $ sudo tar xzvf /proj/MilkCake/buildroot.obj/images/rootfs.tar.gz ← アーカイブファイルを展開する [sudo] password for user_name: <パスワードを入力> $ cd .. $ sudo umount /tmp/mnt ← アンマウントする [sudo] password for user_name: <パスワードを入力>

作成されたmicro SDカードの構成は以下の様になっています。

  1. 第1パーティション

    FATでフォーマットされています。
    サイズは1GByteです。
    ターゲットボード起動時に/sdcardにマウントされます。
    WindowsPCから読み書き可能ですので、WindowsPCとのデータの交換に使用できます。

  2. 第2パーティション

    EXT4でフォーマットされています。
    サイズは2GByteです。
    ターゲットボード起動時に/(ルート)にマウントされます。

  3. それ以外の領域

    未使用です。