bc10
bc10-router

buildrootについて

buildrootは組み込みLinux環境を作成するためのツールです。Makefileといくつかのpatchのセットから構成されています。
本稿では以下のURLにあるbeagleboard-xm用にカスタムされたbuildrootを使用し、ビルド環境の構築とビルド手順を記載します。

ビルド環境構築手順について

ビルド環境構築に使用するホストOSはUbuntu 10.04(64bit)です。
追加パッケージ、設定変更とビルド環境の構築手順について記載します。

ビルド環境構築手順は大まかに分けてbuildrootの取得・Toolchainの取得と、bc10用ファイルの配置です。
buildrootの取得(git clone)は以下のURLに記載されている手順で行います。

http://blog.galemin.com/2012/03/buildroot-2012-02-for-beagleboard-xm-with-li-5m03-mt9p031-camera-support/

追加導入パッケージ

ビルド環境構築のために以下の各パッケージを導入します。

ssh vim git-core build-essential curl ia32-libs diffstat cvs subversion chrpath texi2html texinfo 
libncurses5-dev bison flex gettext

dashからbashへの変更

Ubuntuデフォルトのshellはdashで、そのままmakeを実行するとエラーが起こるため、
以下のコマンドを実行しデフォルトshellをbashに変更します。

$ sudo dpkg-reconfigure dash

「dash を /bin/sh インストールしますか?」と聞かれるので「No」or 「いいえ」を選択します。
これで shell は bash に変更されます。

buildrootの取得

gitコマンドを使用しbuildrootを取得します。

$ cd ${HOME}
$ mkdir work_router
$ cd work_router
$ git clone https://github.com/MaxGalemin/buildroot.git

Toolchainのインストール

TIのWebサイトからToolchainを適当なディレクトリにダウンロードしインストールします。
インストール先を指定しなければ${HOME}/ti-sdk-beagleboard-05.05.01.00にBeagleBoardSDKがインストールされ、
${HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit/以下にToolchainが展開されます。

$ wget http://software-dl.ti.com/dsps/dsps_public_sw/am_bu/sdk/BeagleBoardSDK/latest/exports/ti-sdk-beagleboard-05.05.01.00-Linux-x86-Install
$ chmod +x ti-sdk-beagleboard-05.05.01.00-Linux-x86-Install

consoleでインストールするため --mode consoleオプションを付けて実行します。

$ ./ti-sdk-beagleboard-05.05.01.00-Linux-x86-Install --mode console

インストールしたToolchainのPATHをbashrcの末尾に設定します。

$ vi ${HOME}/.bashrc

PATH=${HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit/bin:$PATH
$ source ${HOME}/.bashrc

Toolchainについて

本稿で使用しているbuildroot(2011.05をベースに調整されたもの)のデフォルトToolchainはCodeSourceryの2011.03ですが、
本稿ではbc10-router/arago-projectで使用しているTIが配布しているti-sdk-beagleboard-05.05.01.00
に同梱のToolchainを使用しています。

bc10用のconfig配置

bc10用のconfigファイルは

があります。それぞれ適当なディレクトリにダウンロードしてください。

各ファイルの配置は以下のとおりです。
boardディレクトリにbc10ディレクトリを作成してください。
kernel-patchesディレクトリはbuildroot/board/beagleboard/xm/kernel-patchesを
コピーします。
busybox-1.19.x.configは同名のファイルが存在しますので元のファイルを適当な名前に
リネームしてください。

work_router/
   `- buildroot/
          |- board/
          |    `-bc10/
          |        |- kernel-patches/
          |        `- linux-3.2.8.config
          |- configs/
          |       `- bc10_defconfig
          `-package/
                 `- busybox/
                          `- busybox-1.19.x.config (bc10用編集済みbusyboxのconfigファイル)

配置ファイルの設定確認

配置完了後、make bc10_defconfig、make menuconfigコマンドを実行して
各設定が以下のようになっていることを確認してください。
特にToolchain Pathは上記の設定が記載されていること(インストール先が異なる場合は適宜変更をしてください)、
KernelのCustom kernel patches、Configuration file pathのディレクトリ指定が
board/bc10/を設定している事を確認してください。

$ cd ~/work_router/buildroot
$ make bc10_defconfig
$ make menuconfig

 Toolchain --->
   |- Toolchain type(External toolchain)
   |- Toolchain (Custom toolchain)
   |- (${HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit) Toolchain Path
   |- ($(ARCH)-arago-linux-gnueabi) Toolchain prefix
   |- External toolchain C library (glibc)
   ...
   |- [*] Toolchain has C++ support?
   ...
   
 Package Selection for the target  --->
   ...
   |- (package/busybox/busybox-1.19.x.config) BusyBox configuration file to use?
   ...
   
  Kernel  --->
   ...
   |- (board/bc10/kernel-patches) Custom kernel patches
   ...
   |- (board/bc10/linux-3.2.8.config) Configuration file path
   ...
 

buildrootの修正、変更について

TIのToolchainを使用した際、CodeSourcery2011.03のToolchainとは
ベースとしているGCCのバージョンなど多くの相違点があり、そのためビルドエラーが起こる箇所が何点かあります。
その点を予め修正、変更しビルドを実行します。

基本的にbc10-router/arago-projectで使用しているバージョンに合わせる
方法で修正、変更を行います。

libtoolのバージョン変更

buildrootのlibtoolのバージョンを2.2.10からbc10-router/arago-project
使用している2.2.6bに変更します。

これはTIのToolchainをビルドした際libtoolが2.2.6bでリンクされており、buildrootのデフォルトバージョン2.2.10を
そのまま使用した際にライブラリのバージョン不一致によるエラーが起こる事を防ぐために変更しています。

補足:以降のパッケージの各変更について、ToolchainをbuildrootデフォルトのCodeSourcery 2011.03を使用した場合は
下記記載のエラーは起こりません。

$ cd ${HOME}/work_router/buildroot
$ vi package/libtool/libtool.mk

- LIBTOOL_VERSION = 2.2.10
+ # LIBTOOL_VERSION = 2.2.10
+ LIBTOOL_VERSION = 2.2.6b
   LIBTOOL_SOURCE = libtool-$(LIBTOOL_VERSION).tar.gz   

ncursesのバージョン変更

ncursesのバージョンを5.7から5.9に変更します。
これも同様にTIのToolchainでのビルド時にエラーが起こる事を回避するためです。

$ cd ${HOME}/work_router/buildroot
$ vi package/ncurses/ncurses.mk 

--- ncurses.mk_orig     2012-12-21 17:10:01.570116798 +0900
+++ ncurses.mk  2012-12-21 15:30:30.220956375 +0900
@@ -23,27 +23,52 @@
 # USA

 # TARGETS
-NCURSES_VERSION = 5.7
+#NCURSES_VERSION = 5.7
+NCURSES_VERSION = 5.9
 NCURSES_SITE = $(BR2_GNU_MIRROR)/ncurses
 NCURSES_INSTALL_STAGING = YES
 NCURSES_DEPENDENCIES = host-ncurses 

+HOSTCPPFLAGS += "-D_GNU_SOURCE"
+
 NCURSES_CONF_OPT = \
+       --enable-widec \
+       --without-progs \
        --with-shared \
-       --without-cxx \
-       --without-cxx-binding \
        --without-ada \
-       --without-progs \
-       --without-tests \
+       --enable-hard-tabs \
+       --enable-xmc-glitch \
+       --enable-colorfgbg \
        --disable-big-core \
-       --without-profile \
-       --disable-rpath \
-       --enable-echo \
-       --enable-const \
-       --enable-overwrite \
-       --enable-broken_linker \
+       --disable-rpath-hack \
+       --with-ticlib \
+       --with-termlib=tinfo \
+       --enable-sigwinch \
+       --enable-pc-files \
+       --with-build-cc="${HOSTCC}" \
+       --with-build-cpp="${HOSTCPP}" \
+       --with-build-ld="${HOSTLD}" \
+       --with-build-cflags="${HOSTCFLAGS}" \
+       --with-build-cppflags='${HOSTCPPFLAGS}' \
+       --with-build-ldflags='${HOSTLDFLAGS}' \
        --disable-static

+#NCURSES_CONF_OPT = \
+#      --with-shared \
+#      --without-cxx \
+#      --without-cxx-binding \
+#      --without-ada \
+#      --without-progs \
+#      --without-tests \
+#      --disable-big-core \
+#      --without-profile \
+#      --disable-rpath \
+#      --enable-echo \
+#      --enable-const \
+#      --enable-overwrite \
+#      --enable-broken_linker \
+#      --disable-static
+
 ifneq ($(BR2_ENABLE_DEBUG),y)
 NCURSES_CONF_OPT += --without-debug
 endif
@@ -99,7 +124,7 @@ endif

 define NCURSES_INSTALL_TARGET_CMDS
        mkdir -p $(TARGET_DIR)/usr/lib
-       cp -dpf $(NCURSES_DIR)/lib/libncurses.so* $(TARGET_DIR)/usr/lib/
+       cp -dpf $(NCURSES_DIR)/lib/* $(TARGET_DIR)/usr/lib/
        $(NCURSES_INSTALL_TARGET_PANEL)
        $(NCURSES_INSTALL_TARGET_FORM)
        $(NCURSES_INSTALL_TARGET_MENU)
@@ -120,6 +145,32 @@ define NCURSES_INSTALL_TARGET_CMDS
        $(NCURSES_INSTALL_TARGET_DEVFILES)
 endef # NCURSES_INSTALL_TARGET_CMDS 

+
+
+
+# define NCURSES_INSTALL_TARGET_CMDS
+#      mkdir -p $(TARGET_DIR)/usr/lib
+#      cp -dpf $(NCURSES_DIR)/lib/libncurses.so* $(TARGET_DIR)/usr/lib/
+#      $(NCURSES_INSTALL_TARGET_PANEL)
+#      $(NCURSES_INSTALL_TARGET_FORM)
+#      $(NCURSES_INSTALL_TARGET_MENU)
+#      ln -snf /usr/share/terminfo $(TARGET_DIR)/usr/lib/terminfo
+#      mkdir -p $(TARGET_DIR)/usr/share/terminfo/x
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/x/xterm $(TARGET_DIR)/usr/share/terminfo/x
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/x/xterm-color $(TARGET_DIR)/usr/share/terminfo/x
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/x/xterm-xfree86 $(TARGET_DIR)/usr/share/terminfo/x
+#      mkdir -p $(TARGET_DIR)/usr/share/terminfo/v
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/v/vt100 $(TARGET_DIR)/usr/share/terminfo/v
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/v/vt102 $(TARGET_DIR)/usr/share/terminfo/v
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/v/vt200 $(TARGET_DIR)/usr/share/terminfo/v
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/v/vt220 $(TARGET_DIR)/usr/share/terminfo/v
+#      mkdir -p $(TARGET_DIR)/usr/share/terminfo/a
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/a/ansi $(TARGET_DIR)/usr/share/terminfo/a
+#      mkdir -p $(TARGET_DIR)/usr/share/terminfo/l
+#      cp -dpf $(STAGING_DIR)/usr/share/terminfo/l/linux $(TARGET_DIR)/usr/share/terminfo/l
+#      $(NCURSES_INSTALL_TARGET_DEVFILES)
+# endef # NCURSES_INSTALL_TARGET_CMDS
+

udev-181のpatch追加

udev-181でもTIのToolchain使用時にエラーが起こります、またbc10-router/arago-project
使用しているudevは165でダウンロード元サイトには100以前と170以降しか
アーカイブされていないため、バージョンは181のままでエラーを回避するpatchを
package/udev/udev-181-define-trigger-happy.patchという名前で作成します。
patchの内容は以下の通りです。

$ vi package/udev/udev-181-define-trigger-happy.patch

diff -Naur udev-181.orig/src/udev-builtin-input_id.c udev-181/src/udev-builtin-input_id.c
--- udev-181.orig/src/udev-builtin-input_id.c   2012-03-05 11:41:10.000000000 -0500
+++ udev-181/src/udev-builtin-input_id.c        2012-03-05 11:46:31.000000000 -0500
@@ -30,6 +30,10 @@

 #include "udev.h"

+#ifndef BTN_TRIGGER_HAPPY
+#define BTN_TRIGGER_HAPPY 0x2c0
+#endif
+
 /* we must use this kernel-compatible implementation */
 #define BITS_PER_LONG (sizeof(unsigned long) * 8)
 #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)

イメージの作成

上記の手順まで完了後ビルドを実行します。

$ make

ビルド完了後、work_router/buildroot/output/imagesに以下の各ファイルが
作成されます。

MLO  rootfs.tar  u-boot.img  uEnv.txt  uImage

uEnv.txtの編集

uboot用環境設定ファイルuEnv.txtは上記までの手順で作成されますが、
以下の内容に変更します。

--- __uEnv.txt_orig	2012-12-18 15:20:53.344986130 +0900
+++ uEnv.txt	2012-12-18 15:21:06.901053349 +0900
@@ -1,3 +1,2 @@
-mpurate=1000
-dvimode=1024x768MR-16@60
-uenvcmd=mmc init; run loaduimagefat; run mmcboot
+mmcroot=/dev/mmcblk0p2 rw
+uenvcmd=run loaduimagefat; run mmcboot

SDへの書き込み

bc10/booting 起動用SDカードの作成の手順で作成されたSDカードを
使用する前提で記載しています。FAT32、Ext3それぞれのディレクトリ名は
/media/FAT,/media/EXT3とします。

上記までで作成したファイルをそれぞれのディレクトリにコピー、展開をします。

$ cp MLO /media/FAT
$ cp u-boot.img /media/FAT
$ cp uImage /media/FAT
$ sudo tar xvf rootfs.tar -C /media/EXT3

以上で、SDへの書き込みは完了です。

bc10起動後の設定について

本buildrootを用いてbc10を起動した際の幾つかのトピックを記載します。

dropbear の login について

本buildrootではデフォルトのshell は bash 、sshdは dropbear を使用しています。
外部から本buildrootに(root、作成したユーザともに)ssh経由でアクセスしようとした際、
以下のような警告がログに表示され、loginすることができません。

authpriv.warn dropbear[780]: User 'root' has invalid shell, rejected

これはdropbear/svr-auth.c内のshellをチェックする箇所が/bin/shに固定されているために
起こる問題です。/etc/passwdの該当ユーザのshellを以下のように /bin/bash から /bin/sh へ
変更し再起動を行うことで login が可能になります。

$ vi dropbear-2012.55/svr-auth.c
254行目~

/* check that the shell is set */
usershell = ses.authstate.pw_shell;
if (usershell[0] == '\0') {
/* empty shell in /etc/passwd means /bin/sh according to passwd(5) */
     usershell = "/bin/sh";
}
...<略>
endusershell();
TRACE(("no matching shell"))
dropbear_log(LOG_WARNING, "User '%s' has invalid shell, rejected",
                            ses.authstate.pw_name);
send_msg_userauth_failure(0, 1);
return DROPBEAR_FAILURE;
[root@bc10-router ~]# vi /etc/passwd
root:x:0:0:root:/root:/bin/sh
...

無線LANモジュールの読込

起動に無線LANモジュールを読み込まないため、ログイン後以下のように
モジュールを読み込むことで無線LANデバイスの認識が完了します。

# modprobe rt2800usb
[   38.027832] cfg80211: Calling CRDA to update world regulatory domain
[   38.291656] usb 1-2.4: reset high-speed USB device number 4 using ehci-omap
[   38.486846] usbcore: registered new interface driver rt2800usb
# ifconfig -a
...<略>
wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
         BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

更新記録

2012/12/21 初稿掲載
2012/12/25 bc10起動後の設定についてを追加、bc10用のconfig配置のbc10_defconfig、linux-3.2.8.configの更新
2013/01/07 構成変更、文言修正

syariten

添付ファイル: filelinux-3.2.8.config 1612件 [詳細] filebc10_defconfig 1746件 [詳細] filebusybox-1.19.x.config 1704件 [詳細]

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-01-08 (火) 14:57:19 (4120d)