[[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