[[labs.beatcraft.com]]
[bc10-router]
#contents

* About buildroot [#l0769f5e]
>
buildboot is a tool for creating an embedded Linux embedded Linux. It constitutes of Makefile and other patch files. This article employs the buildroot, which specifically customized for beagleboard-xm. This explains how to create the build environment and how to build an embedded Linix with buildroot. For the details of buildroot, please visit URLs listed below.~
- Embedded HOWTOs~
[[http://blog.galemin.com]]~
- github/MaxGalemin/buildroot~
[[https://github.com/MaxGalemin/buildroot]]~

* Process of Creating the Building Environment [#x9d9b8f0]
>
The Host OS, which is used for creating the build environment, is Ubuntu 10.04 (64bit). Processes of adding extra packages, modifying the configuration, and creating the build environment are explained.~
~
There are three stages in the process of creating the build environment: obtaining buildroot, obtaining toolchain, and placing the files for bc10.~
~
To obtain the git clone of buildroot, follow the direction, which is written the web page below. Its URL is:~
[[http://blog.galemin.com/2012/03/buildroot-2012-02-for-beagleboard-xm-with-li-5m03-mt9p031-camera-support/]]~

** Adding extra packages [#f5394d1f]
>
To create the build environment, the packages listed below are added to the default packages.~
 ssh vim git-core build-essential curl ia32-libs diffstat cvs subversion chrpath texi2html texinfo 
 libncurses5-dev bison flex gettext

** Changing from dash to bash [#wb58ddf2]
>
The default shell of Ubuntu is dash. To execute make with the default setting, it will cause error and, and make process will fail. To prevent this happening, the setting of shell is changed to bash.~
 $ sudo dpkg-reconfigure dash
To execute the command above, it will ask to install dash at /bin/sh? Please select NO. Then, shell will be changed to bash.

** Obtaining buildroot [#q09b3ba5]
>
To use git command, obtain buildroot.
 $ cd ${HOME}
 $ mkdir work_router
 $ cd work_router
 $ git clone https://github.com/MaxGalemin/buildroot.git

** Installing Toolchain [#x592f7a4]
>
The default Toolchain, which buildroot (this is adjusted to 2011.05 base) uses, is CodeSourcery 2011.03. However, this article uses a toolchian, which is included in ti-sdk-beagleboard-05.05.01.00. This file is distributed by TI. This Toolchain is also used for [[bc10-router/arago-project]].~
~
Download Toolchain from TI's web site. The downloaded file can be placed at whichever directory you like.~
If you do not specify any directory, the file will be downloaded at the directory of ${HOME}/ti-sdk-beagleboard-0.5.05.01.00, and toolchain will be extracted at the directory of ${HOME}/ti-sdk-beagleboard-0.5.05.01.00/linux-devkit/.~
 $ 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
To install it by console, add --mode console option to the command line. Then, execute it.~
 $ ./ti-sdk-beagleboard-05.05.01.00-Linux-x86-Install --mode console
PATH of toolchain is added to the list on bashrc.~
 $ vi ${HOME}/.bashrc
 
 PATH=${HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit/bin:$PATH
 $ source ${HOME}/.bashrc

** Placing configuration files for bc10 [#h5636ac4]
>
There are config files for bc10. You can download these files to any directories.~
#ref(linux-3.2.8.config);~
#ref(bc10_defconfig);~
#ref(busybox-1.19.x.config);~
~
However, these files are needed to be stored the specific directories. The directories are shown shown below. Please create bc10 directory under board directory.~
kernel-patches are copied from the downloaded buildroot file, buildroot/board/beagleboard/xm/kernel-patches, and the copied file is stored at the directory below /buildroot/board/bc10/.~
At the location where busybox-1.19.x.config is stored, a file does have the identical name has already existed. Please change the name of the existing file, and place the downloaded 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 (the config file for busybox, which has already been edited for bc10)
*** Confirming the configuration of the placed files [#b7c153ea]
>
Completing to placing these configuration files, please check the settings of these files. To execute make bc10_deconfig and make menuconfig commands, check the settings of these files. If the settings are correct, the outputs of commands are the same as the example shown below.~
Especially, please check PATH of Toolchain. Its PATH has to be set as it is described above. (If its installed location differs form explained one, please adjust its PATH.) Please make sure that Custom kernel patches and Configuration file path of Kernerl specify the directory of 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
    ...
 ~

** Modifying and changing buildroot [#ve65e8e3]
>
Since IT's Toolchain and the Toolchain of CodeSourcery2011.03 employ the different versions of GCC, each Toolchain requires a specific GCC. If the version of GCC and a Toolchain do not match, it will cause a build error. To prevent this happening, modify and change buildroot. Version of GCC and settings of other tools are consist with the settings used at [[bc10-router/arago-project]].~

*** Changing the version of libtool [#e969e58d]
>
The default version of libtool is 2.2.10. The version 2.2.6b is used at [[bc10/arago-project]]. As changing the version of libtool from 2.2.10 to 2.2.6b, make the version of libtool consist with TI's Toolchain. If version 2.2.10 is used with TI's Toolchain, it causes an error due to version mismatch of libraries.~
 $ 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   

>
Note:~
Toolchain of CodeSourcery2011.03 causes only a build error on buildroot. It does not cause any build errors when it builds other tools.~

*** Change the version of ncurses [#pf9d8790]
>
The version of ncurses is changed from 5.7 to 5.9. This change prevents a build error occurring. The build error is due to version mismatch of libraries.~
 $ 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
 +

*** Adding a patch to udev-181 [#sc5e8c36]
>
TI's Toolchain has an issue to udev-181 and causes a build error. Since u-dev for  [[bc10-router/arago-project]] is 165, it does not suffer this issue. However, the download site of udev for Toolchain archives under 100 and over 170. There is no 165. To avoid an error happening, a pach is applied to udev-181. The name of patch and the location that it is placed are package/udev/udev-181-define-trigger-happy.patch. The contents of the patch are shown below.~
 $ 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)

** Creating Images [#f2c24480]
>
When the preparation is completed, images are build. Please execute the command below for building the images~
 $ make
After the build process is completed, the image files are created at the directory: work_router/buildroot/output/images. The names of the created files are:~
 MLO  rootfs.tar  u-boot.img  uEnv.txt  uImage

*** Editing uEnv.txt [#g319f1be]
>
The environment configuration file for uboot has been created, but its contents are needed to be modified. The details are:~
 --- __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

* Writing images to a SD card [#df3be0d4]
>
The process of formatting a SD card is shown []. Please follow the direction, and format a SD, which is suitable to bc10. Create FAT32 and Ext3 directories and the names of these directories are /media/FAT and /media/EXT3, respectively.~
~
Then, copy the created files to the targeted directories and extract them.~
 $ cp MLO /media/FAT
 $ cp u-boot.img /media/FAT
 $ cp uImage /media/FAT
 $ sudo tar xvf rootfs.tar -C /media/EXT3
This is the end of the process of writing images to a SD card.~

* Configuration after booting bc10 [#tc776df9]
>
As the images are written to a SD card, yet some modification is required using this buildroot.~
** About login of dropbear [#f01472c2]
>
This buildroot uses bash and dropbear as the default shell and ssh, respectively. To access this buildroot via ssh, it denies the login, showing the message. The message is shown below.~
 authpriv.warn dropbear[780]: User 'root' has invalid shell, rejected
This issue is due to that the authentication of dropbear only recognizes sh, not recognizes bash. In drop/svr-auth.c, the part of checking shell is fixed as /bin/sh. It means that it accept only sh. To fix this issue, shell of User root changes form /bin/bash to /bin/sh. Then, reboot it. The details are show below.~
 $ vi dropbear-2012.55/svr-auth.c
 line254~
 
 /* 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";
 }
 ...<Skip>
 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
 ...

** Reading in wireless LAN modul [#h461b605]
>
Under the default setting, the wireless LAN module cannot be recognized. To make this module recognized, after booting, change it as it is shown below.~
 # 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
 ...<Skip>
 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)

* Revision History [#r357e8f8]
>
- 2013/07/22 This article is initially uploaded

Front page   Edit Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   RSS of recent changes