[[bc10]] ~
[[bc10-router]] ~

#contents

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

- Embedded HOWTOs ~
http://blog.galemin.com/ ~

- github/MaxGalemin /buildroot ~
https://github.com/MaxGalemin/buildroot ~


* ビルド環境構築手順について [#d1738175]
ビルド環境構築に使用するホスト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/

** 追加導入パッケージ [#oa3a893e]
ビルド環境構築のために以下の各パッケージを導入します。~

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

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

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


** buildrootの取得 [#ib5f94bf]
gitコマンドを使用しbuildrootを取得します。
 
 $ cd ${HOME}
 $ mkdir work_router
 $ cd work_router
 $ git clone https://github.com/MaxGalemin/buildroot.git


** Toolchainのインストール [#o4482f6f]
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について [#oe9c45b3]
本稿で使用しているbuildroot(2011.05をベースに調整されたもの)のデフォルトToolchainはCodeSourceryの2011.03ですが、~
本稿では[[bc10-router/arago-project]]で使用しているTIが配布しているti-sdk-beagleboard-05.05.01.00~
に同梱のToolchainを使用しています。~

** bc10用のconfig配置 [#w323c746]
bc10用のconfigファイルは
#ref(linux-3.2.8.config) ~
#ref(bc10_defconfig) ~
#ref(busybox-1.19.x.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ファイル)

*** 配置ファイルの設定確認 [#b8565f74]
配置完了後、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の修正、変更について [#xc5a18b2]
TIのToolchainを使用した際、CodeSourcery2011.03のToolchainとは~
ベースとしているGCCのバージョンなど多くの相違点があり、そのためビルドエラーが起こる箇所が何点かあります。~
その点を予め修正、変更しビルドを実行します。~
~
基本的に[[bc10-router/arago-project]]で使用しているバージョンに合わせる~
方法で修正、変更を行います。~

*** libtoolのバージョン変更 [#if791a68]
buildrootのlibtoolのバージョンを2.2.10から[[bc10-router/arago-project]]で~
使用している2.2.6bに変更します。~
~
これはTIのToolchainをビルドした際libtoolが2.2.6bでリンクされており、buildrootのデフォルトバージョン~
2.2.10をそのまま使用した際にライブラリのバージョン不一致によるエラーが起こる事を防ぐために変更しています。~
これは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のバージョン変更 [#b5c59daf]
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追加 [#o9d998ff]
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)
 
** イメージの作成 [#q85964e0]
上記の手順まで完了後ビルドを実行します。~

 $ make

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

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

*** uEnv.txtの編集 [#abc12934]
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への書き込み [#x964d970]
[[bc10/booting 起動用SDカードの作成>http://labs.beatcraft.com/ja/index.php?bc10%2Fbooting#q0449272]]の手順で作成された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起動後の設定について [#t8c8abfa]
本buildrootを用いてbc10を起動した際の幾つかのトピックを記載します。~

** dropbear の login について [#cd8c524a]
本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モジュールの読込 [#pb5d2aa2]
起動に無線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)


* 更新記録 [#df5632a3]
2012/12/21 初稿掲載~
2012/12/25 [[bc10起動後の設定について>http://labs.beatcraft.com/ja/index.php?bc10-router%2Fbuildroot#t8c8abfa]]を追加、[[bc10用のconfig配置>http://labs.beatcraft.com/ja/index.php?bc10-router%2Fbuildroot#w323c746]]のbc10_defconfig、linux-3.2.8.configの更新~
2013/01/07 構成変更、文言修正~

RIGHT:syariten

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS