EBC Exercise 08 Installing Development Tools 3.8

Early in the class most of the exercises we will do will all run on the BeagleBoard. You'll be able to edit (gedit), compile (gcc) and run all on the Beagle. Later, when we start compiling the kernel or the boot loader, (U-boot) you will need to cross compile on a Linux machine and copy the results to the Beagle.

The purpose of this exercise is to install all the tools needed for compiling on your host so they will be ready when you need them.

Instructions for building Ångström are given here; however there are a few changes you have to make. Here's what I did.

Tip: Run this exercise using a wired connection if you can. The Ubuntu wireless driver can be finicky, and if it stops working you'll have to restart some of this.

The 3.8 Kernel
Make sure you installed the cross compiler (EBC Exercise 08a Cross-Compiling) before doing this exercise.

Note taken from Beaglebone: Adding USB Wi-Fi & Building a Linux Kernel starting around 4 minutes and ending around 21 minutes. Uses kernel from Robert C. Nelson's BeagleBone page.

host$ git clone git://github.com/RobertCNelson/linux-dev.git host$ git git checkout origin/am33x-v3.8 -b am33x-v3.8 host$ time git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git (21 minutes) host$ cp system.sh.sample system.sh.sample host$ diff system.sh* 15c15 < CC=arm-linux-gnueabi- --- > #CC=arm-linux-gnueabi- 21c21 < LINUX_GIT=~/BeagleBoard/linux-stable/ --- > #LINUX_GIT=/home/user/linux-stable/ 31c31 < ZRELADDR=0x80008000 --- > #ZRELADDR=0x80008000

Now get some more tools. host$ sudo apt-get install -y uboot-tools ccache libncurses5-dev host$ sudo apt-get install build-essential host$ sudo apt-get install device-tree-compiler lzop u-boot-tools ia32-libs Then build the kernel. host$ ./build_kernel.sh + Detected build host [Ubuntu 12.04.2 LTS] Debian/Ubuntu/Mint: missing dependicies, please install: - sudo apt-get update sudo apt-get install libncurses5-dev - * Failed dependency check I fixed this error by editing  and commenting out the line: It was looking for amd64 in the  listing and it wasn't appearing.
 * 1) 	dpkg -l | grep libncurses5-dev | grep ${deb_arch} >/dev/null || deb_pkgs="${deb_pkgs}libncurses5-dev "

Now install by inserting the SD to be installed on into your host machine and run: host$ ./tools/install_kernel.sh

Mine failed because there wasn't enough space on the VFAT partition for uImage, however uImage isn't needed there, so I just editted  and commented out line 160 This keeps it from installing on the VFAT partition.
 * 1) 			mmc_partition_discover

Minimal Ubuntu Build
(The video says rcn-ee.net/deb/rootfs/oneiric, but it isn't there.) host$ wget http://rcn-ee.net/deb/rootfs/raring/ubuntu-raring-console-armhf-2013-03-28.tar.xz host$ xz -d ubuntu-raring-console-armhf-2013-03-28.tar.xz host$ tar -xf ubuntu-raring-console-armhf-2013-03-28.tar Put the SD card in a reader for your host and... host$ './setup_sdcard.sh --mmc /dev/sdc'' --uboot bone

The 3.2 Kernel
These instructions have been tested for the 3.2.25 kernel.

download
These are notes are based on Beagleboard kernel git site.

First download the tools needed to compile the kernel. This took about 25 seconds. host$ sudo apt-get install -y git lzop gcc-arm-linux-gnueabi uboot-mkimage

Next download the tools to get the kernel and the patches needed to make it run on the beagle. (2.5 seconds) host$ cd ~/BeagleBoard host$ git clone git://github.com/beagleboard/kernel.git host$ cd kernel host$ git checkout 6a7c4284a16fed3dae87f4aef78b59c902e4da84 -b beaglebone-3.2

Next download the kernel and the patches. Before running ./patch/sh, take a look at it. Can you figure out what it's doing? Also look at patch_script.sh, it's where the details are. The downloading/patching process takes some 39 minutes. host$ less patch.sh patch_script.sh host$ ./patch.sh host$ '''cp patches/beaglebone/defconfig kernel/arch/arm/configs/beaglebone_defconfig host$ wget http://arago-project.org/git/projects/?p=am33x-cm3.git\;a=blob_plain\;f=bin/am335x-pm-firmware.bin\;hb=HEAD -O kernel/firmware/am335x-pm-firmware.bin host$ md5sum kernel/firmware/am335x-pm-firmware.bin 17d6a4c24d3cb720aa9ed4522cb891fc kernel/firmware/am335x-pm-firmware.bin

compile
Once patched you are ready to compile the kernel. The first time takes a while. Mine tool 4 minutes, but I was running on 8 cores. Set the -jX  to match the number of cores you have. uImage is the kernel! host$ cd kernel host$ make beaglebone_defconfig

Now that you know it's working, let's compile it. First set the paths to find the cross-compiles. Put the following in a file, call it ~/.oe/crossCompile.sh.

export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- Do the above once

Now source the file. host$ source ~/.oe/crossCompileEnv.sh Do the above once per terminal session.

host$ make -j9 host$ make uImage Do the above every time you recompile the kernel

You also need all the kernel modules. Here we create a directory to install them in. (a few seconds) host$ mkdir ../rootfs host$ make INSTALL_MOD_PATH=../rootfs modules_install

install
Copy the kernel and the modules to the Beagle. (a minute or so) host$ cd .. host$ '''scp kernel/arch/arm/boot/uImage root@beagle:/boot/uImage-3.2.25+ host$ cd rootfs host$ find -H -depth | cpio -o -H crc | ssh root@beagle 'cd /; cpio -id' 

Now log into the beagle and move some things around. host$ '''ssh root@beagle

This will copy the kernel to the ext4 partition. beagle$ cd /boot beagle$ rm uImage beagle$ ln -s uImage-3.2.25+ uImage

This will copy to the FAT partition. beagle$ mkdir /media/mmcblk0p1 beagle$ mount /dev/mmcblk0p1 /media/mmcblk0p1 beagle$ cp /boot/uImage-3.2.25+ /media/uImage

reboot
Make sure screen is running on your host so you can see the shutdown and boot processes. host$ screen /dev/ttyUSB1 115200

If you get an error try changing making yourself the owner of /dev/ttyUSB1. host$ sudo chown yoder:yoder /dev/ttyUSB1 host$ screen /dev/ttyUSB1 115200

Then restart you beagle beagle$ shutdown -r now

If all goes well you will boot into your new kernel. beagle$ uname -a Linux beaglebone 3.2.25+ #1 Fri Oct 19 11:05:28 EDT 2012 armv7l GNU/Linux

DAS U-boot
These instructions came from eewiki.

download
While we're at it, let's get the boot loader we'll be using. It takes some 3 minutes.

host$ cd ~/BeagleBoard host$ git clone git://git.denx.de/u-boot.git host$ cd u-boot/ host$ git checkout v2012.10-rc2 -b tmp

compile
Now configure and build. The first time takes some 4 minutes. After that it's only 5 seconds or so. (Replace am335x_evm_config with omap3_beagle_config if you are compiling for the xM.) host$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- am335x_evm_config host$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

install
host$ scp u-boot.img root@beagle:. beagle$ mkdir /media/mmcblk0p1 beagle$ mount /dev/mmcblk0p1 /media/mmcblk0p1 beagle$ cd /media/mmcblk0p1 beagle$ mv u-boot.img u-boot.img.orig # Save the working u-boot beagle$ cp ~/u-boot.img u-boot.img.new beagle$ cp u-boot.img.new u-boot.img Once installed you are ready for u-boot work.