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

From eLinux.org
Jump to: navigation, search
m (Updating and running off the eMMC)
m (Changed)
 
(15 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:ECE497]]
+
[[Category:ECE497Fall2014]]
 
{{YoderHead}}
 
{{YoderHead}}
 
{{EBC3.8}}See [[EBC Exercise 08 Installing Development Tools 3.2]] if you are working with the 3.2 kernel.
 
{{EBC3.8}}See [[EBC Exercise 08 Installing Development Tools 3.2]] if you are working with the 3.2 kernel.
Line 19: Line 19:
  
 
  host$ '''git clone git://github.com/RobertCNelson/linux-dev.git'''
 
  host$ '''git clone git://github.com/RobertCNelson/linux-dev.git'''
  host$ '''cd linux-dev.git'''
+
  host$ '''cd linux-dev'''
 
  host$ '''git checkout origin/am33x-v3.8 -b am33x-v3.8'''
 
  host$ '''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$ '''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'''
 
  host$ '''cp system.sh.sample system.sh'''
 +
Now make the following changes to '''system.sh'''.  The <code>></code> shows what's in system.sh.sample. The <code><</code> shows what you should change it to.
 
  host$ '''diff system.sh*'''
 
  host$ '''diff system.sh*'''
 
  15c15
 
  15c15
Line 39: Line 40:
 
Now build the kernel.
 
Now build the kernel.
 
  host$ '''./build_kernel.sh'''
 
  host$ '''./build_kernel.sh'''
  + Detected build host [Ubuntu 12.04.3 LTS]
+
  + Detected build host [Ubuntu 14.04 LTS]
 
  + host: [x86_64]
 
  + host: [x86_64]
  + git HEAD commit: [6a8557f75f5b35a79729308379adc13b43535806]
+
  + git HEAD commit: [58ee2121370badd3c0a22e39f67068f242d5e068]
  Debian/Ubuntu/Mint: missing dependicies, please install:
+
  Debian/Ubuntu/Mint: missing dependencies, please install:
 
  -----------------------------
 
  -----------------------------
 
  sudo apt-get update
 
  sudo apt-get update
  sudo apt-get install build-essential device-tree-compiler fakeroot lzma lzop u-boot-tools libncurses5-dev ia32-libs
+
  sudo apt-get install build-essential device-tree-compiler fakeroot lzma lzop u-boot-tools   libncurses5-dev:amd64 libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386
 
  -----------------------------
 
  -----------------------------
 
  * Failed dependency check
 
  * Failed dependency check
Line 51: Line 52:
 
The build script is telling you what you need to install.  Do the installs and rerun the build command.
 
The build script is telling you what you need to install.  Do the installs and rerun the build command.
 
  host$ '''./build_kernel.sh'''
 
  host$ '''./build_kernel.sh'''
+ Detected build host [Ubuntu 12.04.2 LTS]
+
  + Detected build host [Ubuntu 12.04.2 LTS]
Debian/Ubuntu/Mint: missing dependicies, please install:
+
  Debian/Ubuntu/Mint: missing dependicies, please install:
-----------------------------
+
  -----------------------------
sudo apt-get update
+
  sudo apt-get update
sudo apt-get install libncurses5-dev  
+
  sudo apt-get install libncurses5-dev  
-----------------------------
+
  -----------------------------
* Failed dependency check
+
  * Failed dependency check
 
If you don't get this error, move to the next step. I fixed this error by editing <code>linux-dev/tools/host_det.sh</code> and commenting out the line:
 
If you don't get this error, move to the next step. I fixed this error by editing <code>linux-dev/tools/host_det.sh</code> and commenting out the line:
 
  # dpkg -l | grep libncurses5-dev | grep ${deb_arch} >/dev/null || deb_pkgs="${deb_pkgs}libncurses5-dev "
 
  # dpkg -l | grep libncurses5-dev | grep ${deb_arch} >/dev/null || deb_pkgs="${deb_pkgs}libncurses5-dev "
Line 68: Line 69:
 
At some point you will see
 
At some point you will see
 
[[File:KernelConfiguration.png]]
 
[[File:KernelConfiguration.png]]
[http://www.youtube.com/watch?v=HJ9nUqYMjqs&t=13m30s Go back to the video above and forward to 13:30].  Here you will see how to configure the kernel. Once you've exited the configuration tool the kernel will start compiling.  If you have a multicore machine you will see all the core busy.  It's only a few more minutes before it is done.
+
[http://www.youtube.com/watch?v=HJ9nUqYMjqs&t=13m30s Go back to the video above and forward to 13:30].  Here you will see how to configure the kernel. Once you've exited the configuration tool the kernel will start compiling.  If you have a multicore machine you will see all the cores busy.  It's only a few more minutes before it is done.
  
 
=== Installing the 3.8 Kernel on Your Black Bone ===
 
=== Installing the 3.8 Kernel on Your Black Bone ===
 +
 +
==== Updating and running off the eMMC ====
 +
[[EBC_Exercise_23_Configuring_the_Kernel#Making_and_Installing_the_kernel]] has instructions for copying the correct files to the eMMC to update the kernel.
  
 
==== Booting off the SD card ====
 
==== Booting off the SD card ====
 +
Here are some '''optional''' instructions for booting off the SD card rather than the eMMC.
 +
 
So far you'be been running everything off the onboard 2G flash. You can continue to do so, but when installing a new kernel there is a good chance you mess up your image and it will be another 45 minutes to reflash it.  Instead go back to [[EBC_Exercise_03_Installing_a_Beagle_OS]] an instead of installing the eMMC flasher image from [http://beagleboard.org/latest-images], install the '''BeagleBone (Runs on BeagleBone Black as well without flashing the eMMC)''' image (first list).   
 
So far you'be been running everything off the onboard 2G flash. You can continue to do so, but when installing a new kernel there is a good chance you mess up your image and it will be another 45 minutes to reflash it.  Instead go back to [[EBC_Exercise_03_Installing_a_Beagle_OS]] an instead of installing the eMMC flasher image from [http://beagleboard.org/latest-images], install the '''BeagleBone (Runs on BeagleBone Black as well without flashing the eMMC)''' image (first list).   
  
Line 87: Line 93:
 
This keeps it from installing on the VFAT partition.
 
This keeps it from installing on the VFAT partition.
  
==== Updating and running off the eMMC ====
+
=== Updating to a new version of the kernel ===
[[EBC_Exercise_23_Configuring_the_Kernel#Making_and_Installing_the_kernel]] has instructions for copying the correct files to the eMMC to update the kernel.
+
 
 +
When you build your kernel the uImage file has some version information in the name.  For example '''uImage-3.8.13-bone20'''.  The '''3.8.13''' is the version of the kernel and the '''bone20''' is the version of the patches applied to the kernel for the BeagleBone.  Over time new patches will be posted. These instructions show how to get the latest version.
 +
 
 +
How do you know if you have the latest version?  Run
 +
beagle$ '''uname -a'''
 +
Linux yoder-black-bone '''3.8.13-bone28''' #1 SMP Wed Oct 16 15:32:18 EDT 2013 armv7l GNU/Linux
 +
to see what version you are running. [http://rcn-ee.net/deb/precise-armhf/ This site lists many different versions].  See if yours is the newest, if not continue on.
  
=== Minimal Ubuntu Build ===
+
This [https://groups.google.com/forum/#!topic/beagleboard/D3wRnulVE1I post to the Google Group] lists the steps as "You need to recheckout master, delete your old branch and re-pull".  Here's how you do it.
  
(The video says rcn-ee.net/deb/rootfs/oneiric, but it isn't there.)
+
  host$ '''cd linux-dev'''
  host$ '''wget http://rcn-ee.net/deb/rootfs/raring/ubuntu-raring-console-armhf-2013-03-28.tar.xz'''
+
  host$ '''git checkout master'''
  host$ '''xz -d ubuntu-raring-console-armhf-2013-03-28.tar.xz'''
+
error: Your local changes to the following files would be overwritten by checkout:
  host$ '''tar -xf ubuntu-raring-console-armhf-2013-03-28.tar'''
+
patches/defconfig
Put the SD card in a reader for your host and...
+
Please, commit your changes or stash them before you can switch branches.
  host$ '''./setup_sdcard.sh --mmc /dev/sd''c'' --uboot bone
+
Aborting
 +
Hmm.... something has changed.  See what it is.
 +
  host$ '''git diff patches/defconfig'''
 +
diff --git a/patches/defconfig b/patches/defconfig
 +
index d903776..3268287 100644
 +
  --- a/patches/defconfig
 +
+++ b/patches/defconfig
 +
@@ -2041,6 +2041,7 @@ CONFIG_JHD629_I2C=y
 +
  # CONFIG_SERIAL_NONSTANDARD is not set
 +
  # CONFIG_N_GSM is not set
 +
  # CONFIG_TRACE_SINK is not set
 +
+CONFIG_LPD8806=m
 +
  CONFIG_DEVKMEM=y
 +
 
 +
  #
 +
It looks like some configuration setting have changed.  Since we are getting a new version of the kernel, let's revert back to the previous file and try again.
  
Ian's Notes: The builds are being updated constantly, so go to http://rcn-ee.net/deb/rootfs/raring/ and find the latest build, if the one above does not work.
+
host$ '''git checkout patches/defconfig'''
 +
host$ '''git checkout master'''
 +
Switched to branch 'master'
 +
Success, now step 2.
 +
host$ '''git branch -d am33x-v3.8'''
 +
warning: deleting branch 'am33x-v3.8' that has been merged to
 +
          'refs/remotes/origin/am33x-v3.8', but not yet merged to HEAD.
 +
Deleted branch am33x-v3.8 (was 3fc8a73).
 +
Now repull
 +
host$ '''git pull'''
 +
Then start over again
 +
host$ '''git checkout origin/am33x-v3.8 -b am33x-v3.8'''
 +
Branch am33x-v3.8 set up to track remote branch am33x-v3.8 from origin.
 +
Switched to a new branch 'am33x-v3.8'
 +
Your '''system.sh''' file should be unchanged, so start building
 +
host$ '''./build_kernel.sh'''
 +
Mine took some 26 minutes on an 8 core machine.
  
 
== DAS U-boot ==
 
== DAS U-boot ==
Line 110: Line 153:
 
  host$ '''git clone git://git.denx.de/u-boot.git'''
 
  host$ '''git clone git://git.denx.de/u-boot.git'''
 
  host$ '''cd u-boot/'''
 
  host$ '''cd u-boot/'''
  host$ '''git checkout v2013.04 -b tmp'''
+
  host$ '''git checkout v2013.07 -b tmp'''
  
 
=== U-Boot Patches ===
 
=== U-Boot Patches ===
  host$ '''wget https://raw.github.com/eewiki/u-boot-patches/master/v2013.04/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch'''
+
  host$ '''wget https://raw.github.com/eewiki/u-boot-patches/master/v2013.07/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch'''
 
  host$ '''patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch'''
 
  host$ '''patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch'''
  
Line 126: Line 169:
  
 
  host$ '''scp u-boot.img root@beagle:.'''
 
  host$ '''scp u-boot.img root@beagle:.'''
  beagle$ '''mkdir /media/mmcblk0p1'''
+
  beagle$ '''mkdir /media/BONE'''
  beagle$ '''mount /dev/mmcblk0p1 /media/mmcblk0p1'''
+
  beagle$ '''mount /dev/mmcblk0p1 /media/BONE'''
  beagle$ '''cd /media/mmcblk0p1'''
+
  beagle$ '''cd /media/BONE'''
 
  beagle$ '''mv u-boot.img u-boot.img.orig'''  # Save the working u-boot
 
  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 u-boot.img.new'''
 
  beagle$ '''cp u-boot.img.new u-boot.img'''
 
  beagle$ '''cp u-boot.img.new u-boot.img'''
 +
 
Once installed you are ready for u-boot work.
 
Once installed you are ready for u-boot work.
 +
 +
== Recovering ==
 +
If your Beagle fails to boot, follow the [[EBC_Exercise_22_Recovering]] instructions to recover.
  
 
{{YoderFoot}}
 
{{YoderFoot}}

Latest revision as of 07:01, 12 October 2016

thumb‎ Embedded Linux Class by Mark A. Yoder


3.8 Kernel

See EBC Exercise 08 Installing Development Tools 3.2 if you are working with the 3.2 kernel.

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

3.8 Kernel

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

Getting the 3.8 Kernel

These notes 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 Black page.

host$ git clone git://github.com/RobertCNelson/linux-dev.git
host$ cd linux-dev
host$ 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

Now make the following changes to system.sh. The > shows what's in system.sh.sample. The < shows what you should change it to.

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 build the kernel.

host$ ./build_kernel.sh
+ Detected build host [Ubuntu 14.04 LTS]
+ host: [x86_64]
+ git HEAD commit: [58ee2121370badd3c0a22e39f67068f242d5e068]
Debian/Ubuntu/Mint: missing dependencies, please install:
-----------------------------
sudo apt-get update
sudo apt-get install build-essential device-tree-compiler fakeroot lzma lzop u-boot-tools   libncurses5-dev:amd64 libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386 
-----------------------------
* Failed dependency check

The build script is telling you what you need to install. Do the installs and rerun the build command.

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

If you don't get this error, move to the next step. I fixed this error by editing linux-dev/tools/host_det.sh and commenting out the line:

#	dpkg -l | grep libncurses5-dev | grep ${deb_arch} >/dev/null || deb_pkgs="${deb_pkgs}libncurses5-dev "

It was looking for amd64 in the dpkg -l listing and it wasn't appearing.

Building the 3.8 Kernel

Rerun the kernel build

host$ ./build_kernel.sh

At some point you will see KernelConfiguration.png Go back to the video above and forward to 13:30. Here you will see how to configure the kernel. Once you've exited the configuration tool the kernel will start compiling. If you have a multicore machine you will see all the cores busy. It's only a few more minutes before it is done.

Installing the 3.8 Kernel on Your Black Bone

Updating and running off the eMMC

EBC_Exercise_23_Configuring_the_Kernel#Making_and_Installing_the_kernel has instructions for copying the correct files to the eMMC to update the kernel.

Booting off the SD card

Here are some optional instructions for booting off the SD card rather than the eMMC.

So far you'be been running everything off the onboard 2G flash. You can continue to do so, but when installing a new kernel there is a good chance you mess up your image and it will be another 45 minutes to reflash it. Instead go back to EBC_Exercise_03_Installing_a_Beagle_OS an instead of installing the eMMC flasher image from [1], install the BeagleBone (Runs on BeagleBone Black as well without flashing the eMMC) image (first list).

This time when you plug in the SD and boot the bone will boot from the SD card (rather than copying a new image to the 2G builting flash). I suggest programming 2 or 3 SD cards with this image. That way if you really mess up one you can always switch to a another card and keep going.

Also, if you are booting from the SD and mess up something, you can plug the messed up card into your host computer and fix things and try it again.

Copying to the SD Card

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 install_kernel.sh and commented out line 160

#			mmc_partition_discover

This keeps it from installing on the VFAT partition.

Updating to a new version of the kernel

When you build your kernel the uImage file has some version information in the name. For example uImage-3.8.13-bone20. The 3.8.13 is the version of the kernel and the bone20 is the version of the patches applied to the kernel for the BeagleBone. Over time new patches will be posted. These instructions show how to get the latest version.

How do you know if you have the latest version? Run

beagle$ uname -a
Linux yoder-black-bone 3.8.13-bone28 #1 SMP Wed Oct 16 15:32:18 EDT 2013 armv7l GNU/Linux

to see what version you are running. This site lists many different versions. See if yours is the newest, if not continue on.

This post to the Google Group lists the steps as "You need to recheckout master, delete your old branch and re-pull". Here's how you do it.

host$ cd linux-dev
host$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
	patches/defconfig
Please, commit your changes or stash them before you can switch branches.
Aborting

Hmm.... something has changed. See what it is.

host$ git diff patches/defconfig
diff --git a/patches/defconfig b/patches/defconfig
index d903776..3268287 100644
--- a/patches/defconfig
+++ b/patches/defconfig
@@ -2041,6 +2041,7 @@ CONFIG_JHD629_I2C=y
 # CONFIG_SERIAL_NONSTANDARD is not set
 # CONFIG_N_GSM is not set
 # CONFIG_TRACE_SINK is not set
+CONFIG_LPD8806=m
 CONFIG_DEVKMEM=y
 
 #

It looks like some configuration setting have changed. Since we are getting a new version of the kernel, let's revert back to the previous file and try again.

host$ git checkout patches/defconfig
host$ git checkout master
Switched to branch 'master'

Success, now step 2.

host$ git branch -d am33x-v3.8
warning: deleting branch 'am33x-v3.8' that has been merged to
         'refs/remotes/origin/am33x-v3.8', but not yet merged to HEAD.
Deleted branch am33x-v3.8 (was 3fc8a73).

Now repull

host$ git pull

Then start over again

host$ git checkout origin/am33x-v3.8 -b am33x-v3.8
Branch am33x-v3.8 set up to track remote branch am33x-v3.8 from origin.
Switched to a new branch 'am33x-v3.8'

Your system.sh file should be unchanged, so start building

host$ ./build_kernel.sh

Mine took some 26 minutes on an 8 core machine.

DAS U-boot

These instructions came from Robert C Nelson's eewiki.net.

download

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

host$ cd ~/BeagleBoard
host$ git clone git://git.denx.de/u-boot.git
host$ cd u-boot/
host$ git checkout v2013.07 -b tmp

U-Boot Patches

host$ wget https://raw.github.com/eewiki/u-boot-patches/master/v2013.07/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
host$ patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch

compile

Now configure and build. The first time takes some 1.5 minutes. After that it's only 5 seconds or so.

host$ source ~/crossCompileEnv.sh 
host$ make distclean
host$ make am335x_evm_config
host$ make

install

host$ scp u-boot.img root@beagle:.
beagle$ mkdir /media/BONE
beagle$ mount /dev/mmcblk0p1 /media/BONE
beagle$ cd /media/BONE
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.

Recovering

If your Beagle fails to boot, follow the EBC_Exercise_22_Recovering instructions to recover.




thumb‎ Embedded Linux Class by Mark A. Yoder