Difference between revisions of "EBC Exercise 08 Installing Development Tools"

From eLinux.org
Jump to: navigation, search
m (Download and Compile U-boot)
(download)
(14 intermediate revisions by 3 users not shown)
Line 10: Line 10:
 
'''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.
 
'''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.
  
== Install development environment v2 ==
+
== The Kernel ==
Follow these v2 instructions. They work for the 3.2.25 kernel.
+
  
=== Using Jason's instructions ===
+
These instructions have been tested for the 3.2.25 kernel.
  
These are notes on following instructions [https://github.com/beagleboard/kernel/blob/6682025752d0b807119c1e363a0b1b9bfe2ab453/README.md Beagleboard kernel git site].
+
=== download ===
 +
These are notes are based on [https://github.com/beagleboard/kernel/blob/6682025752d0b807119c1e363a0b1b9bfe2ab453/README.md 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'''
 
  host$ '''sudo apt-get install -y git lzop gcc-arm-linux-gnueabi uboot-mkimage'''
  
25 seconds
+
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$ '''git clone git://github.com/beagleboard/kernel.git'''
 +
host$ '''cd kernel'''
 +
host$ '''git checkout 6a7c4284a16fed3dae87f4aef78b59c902e4da84 -b beaglebone-3.2'''
  
2.5 seconds
+
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$ '''./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
  
38.5 minutes
+
=== 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 '''-j''X'' ''' to match the number of cores you have. '''uImage''' is the kernel!
 +
host$ '''cd kernel'''
 +
host$ '''make beaglebone_defconfig'''
  
host$ '''make -j9'''
+
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'''.
  
4 minutes
+
export ARCH=arm
 +
export CROSS_COMPILE=arm-linux-gnueabi-
 +
Do the above once
  
  host$ '''make uImage'''
+
Now ''source'' the file.
 
+
  host$ '''source ~/.oe/crossCompileEnv.sh'''
18 seconds
+
Do the above once per terminal session.
  
 +
host$ '''make -j9'''
 
  host$ '''make uImage'''
 
  host$ '''make uImage'''
host$ '''mkdir ~/kernel/rootfs'''
+
Do the above every time you recompile the kernel
host$ '''make INSTALL_MOD_PATH=~/kernel/rootfs modules_install'''
+
host$ '''cd'''
+
  
12 seconds
+
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'''
  
  host$ '''scp kernel/kernel/arch/arm/boot/uImage root@beaglebone.local:/boot/uImage-3.2.25+
+
=== install ===
10 seconds
+
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' '''
  
host$ '''cd kernel/rootfs'''
+
Now log into the beagle and move some things around.
  host$ '''find -H -depth | cpio -o -H crc | ssh root@beaglebone.local 'cd /; cpio -id' '''
+
  host$ '''ssh root@beagle
  
1 minute 16 seconds
+
This will copy the kernel to the ext4 partition.
 +
beagle$ '''cd /boot'''
 +
beagle$ '''rm uImage'''
 +
beagle$ '''ln -s uImage-3.2.25+ uImage'''
  
host$ '''cd'''
+
This will copy to the FAT partition.
  host$ '''ssh root@beaglebone.local 'cd /boot; rm uImage' '''
+
  beagle$ '''mkdir /media/mmcblk0p1'''
  host$ ssh root@beaglebone.local 'cd /boot; ln -s uImage-3.2.25+ uImage'
+
  beagle$ '''mount /dev/mmcblk0p1 /media/mmcblk0p1'''
host$ ssh root@beaglebone.local 'mount /dev/mmcblk0p1 /mnt'
+
  beagle$ '''cp /boot/uImage-3.2.25+ /media/uImage'''
  host$ ssh root@beaglebone.local 'cp /boot/uImage-3.2.25+ /mnt/uImage'
+
  
== Download and Compile U-boot ==
+
=== reboot ===
 +
Make sure screen is running on your host so you can see the shutdown and boot processes.
 +
host$ '''screen /dev/ttyUSB1 115200'''
  
While were' at it, let's get the boot loader we'll be using...
+
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'''
  
  host$ '''git clone git://git.denx.de/u-boot.git'''
+
Then restart you beagle
 +
  beagle$ '''shutdown -r now'''
  
Mine took about 3 minutes.
+
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
  
Once installed you are ready for kernel work.
+
== DAS U-boot ==
 +
These instructions came from [http://www.eewiki.net/display/linuxonarm/Home eewiki].
  
== Installing on a Remote Machine ==
+
=== download ===
 +
While we're at it, let's get the boot loader we'll be using.  It takes some 3 minutes.
  
Installing the cross development tools and the kernel on a laptop is nice, but sometimes the downloads are too long for such a portable device. I've had a bitbake run some 12 hours.  Another option is to use a remote machine.  In my case our CSSE department has created a virtual machine with Ubuntu 12.04 installed on it. 
+
  host$ '''cd ~/BeagleBoard'''
 
+
  host$ '''git clone git://git.denx.de/u-boot.git'''
To install on a remote machine are the same as above;  However here's a couple of tips to make it easier. 
+
  host$ '''cd u-boot/'''
 
+
  host$ '''git checkout v2012.10-rc2 -b tmp'''
First, ssh to the remote machine.  Assume the machine is called '''csse''' and your login name is '''beagle'''.
+
 
+
  local$ ssh -CX beagle@csse
+
 
+
You can leave the '''beagle@''' off if you have the same login on both machine. The '''-C''' says to compress everything that's moved between the machines over the network. This is good for slow connections.  The '''X''' says to pass the X11 display information to the remote machine. This way you can run graphical programs, such as gedit, on the remote machine and the graphics will display on your local machine (assuming you are running X11 on your local machine).
+
 
+
If you are '''ssh'''ing a lot check out the tip [[ECE497_Tips_and_Tricks#Suspending_ssh | here]] about suspending ssh and the tip [[ECE497_Tips_and_Tricks#Authorizing_ssh | here]] about authorizing ssh so you don't have to enter your password every time.
+
 
+
Once logged on to the removed machine run
+
 
+
  remote$ sudo apt-get install byobu
+
 
+
This installs '''byobu''' which is a program that lets you connect to the same shell from multiple machines. Once installed run
+
 
+
remote$ byobu
+
 
+
You'll see something like:
+
 
+
[[File:Screenshot-beagle@ubu-may_-_byobu.png | 300px]]
+
 
+
So what?  Run a couple of commands, like '''ls''' or '''who''', then hit '''F6'''.  This will suspend your session.  Now run '''byobu''' again. You'll be back in the same session. The session keeps running, even when you aren't connected.
+
 
+
Do you see the use?
+
* Fire up byobu
+
* Start a long bitbake
+
* Once you are sure it running OK, hit F6 and go home.
+
* From home fire up byobu and you'll see your bitbake (probably still running). 
+
* You can F6 and check on it later.
+
 
+
Try opening another terminal and running byobu in both terminals.  You'll see the same thing in both.
+
 
+
Run
+
 
+
$ man byobu
+
  
to see what it can doHere's a list of shortcuts:
+
=== compile ===
 +
Now configure and buildThe 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-'''
  
      F2 - Create a new window
+
=== install ===
      F3 - Move to previous window
+
      F4 - Move to next window
+
      F5 - Reload profile
+
      F6 - Detach from this session
+
      F7 - Enter copy/scrollback mode
+
      F8 - Re-title a window
+
      F9 - Configuration Menu
+
      F12 -  Lock this terminal
+
      Ctrl-a $ - show detailed status
+
      Ctrl-a R - Reload profile
+
      Ctrl-a ! - Toggle key bindings on and off
+
      Ctrl-a k - Kill the current window
+
  
But there is much more. Go and explore.
+
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.
  
 
{{YoderFoot}}
 
{{YoderFoot}}

Revision as of 19:28, 5 November 2012

thumb‎ Embedded Linux Class by Mark A. Yoder


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 [1] 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 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.




thumb‎ Embedded Linux Class by Mark A. Yoder