buildrootは以下のURLにあるbeagleboard-xm用にカスタムされたbuildrootを使用しています。
bc10で動作させるためのビルド環境の構築とビルド手順を記載します。
今回使用するbuildrootのデフォルトToolchainはCodeSourceryの2011.03ですが
bc10-router/arago-projectで使用したTIが配布しているToolchain
ti-sdk-beagleboard-05.05.01.00を使用します。
git cloneのみ以下のURLに記載されている手順で行います。
その後、Toolchainの取得、bc10用ファイルの配置を行います。
gitコマンドを使用しbuildrootを取得します。
$ cd ${HOME} $ mkdir work_router $ cd work_router $ git clone https://github.com/MaxGalemin/buildroot.git
TIのWebサイトからToolchainを適当なディレクトリにダウンロードします。
またインストール先を指定しなければ${HOME}/ti-sdk-beagleboard-05.05.01.00
以下に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
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 ...
TIのToolchainを使用した際、CodeSourcery2011.03のToolchainとは
バージョンなど幾つもの異なる点があるためエラーが起こる箇所が何点かあります。
その点を予め修正、変更しビルドを実行します。
基本的にbc10-router/arago-projectで使用しているバージョンに合わせる
方法で修正、変更を行います。
buildrootのlibtoolのバージョンを2.2.10からbc10-router/arago-projectで
使用している2.2.6bに変更します。
これは2.2.10のままではホストPCのlibtoolが2.2.6bでその上で生成されたlibtoolと
ライブラリのバージョン不一致が起こる事を防ぐためです。
$ 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のバージョンを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でも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
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
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への書き込みは完了です。
2012/12/21 初稿掲載