Difference between revisions of "EBC Exercise 23 Configuring the Kernel"

From eLinux.org
Jump to: navigation, search
(bitbake: Updated link)
(Finding the kernel sources: Updated for non=bitbake version)
(17 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:ECE597]]
+
[[Category:ECE497]]
 
[[Category:BeagleBoard]]
 
[[Category:BeagleBoard]]
 +
{{YoderHead}}
  
There are several ways to get and configure the kernel. You could go to the [http://www.kernel.org The Linux Kernel Archives], find the ---arm--- branch, download a kernel and patch it for the omap.  You could use [http://git-scm.com/ git] to get a kernel.  Or you could just use [http://bitbake.berlios.de/manual/ bitbake] like we did before.
+
In a previous exercise ([[EBC Exercise 22 Cross-Compiling and Finding the Right Kernel]]) you learned how to get and compile the kernel.  Here we'll look at configuring it.
  
Let's first learn how to do it the bitbake way.
+
== Finding the kernel sources ==
  
== bitbake ==
+
First set up the environment and go to the kernel directory
  
When you did [[ECE497 Installing The Angstrom Distribution]] you used bitbake to build '''console-image'''.  During that build the kernel was downloaded and compiled.  If you used the default configure, the source code was removed once it was done.  Check and see:
+
host$ '''source ~/.oe/crossCompileEnv.sh'''
<pre>
+
host$ '''cd ~/BeagleBoard/kernel'''
cd ${OETREE}/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi
 
ls
 
</pre>
 
You should see a directory starting with <code>linux-omap-</code>. The rest of the name tells what version you have.  Change to that directory and see what's there:
 
<pre>
 
cd linux-omap-2.6.29-r46
 
ls
 
</pre>
 
If you see a '''git''' directory, you are in luck. If you see just a '''temp''' directory you need to do the following to reload the sources:
 
<pre>
 
cd ${OETREE}/build/conf
 
gedit local.conf
 
</pre>
 
Find the line near the top that says <code>INHERIT += " rm_work "</code> and comment it out.
 
<pre>
 
# INHERIT += " rm_work "
 
</pre>
 
Save the file and then do the following (don't forget to source the source-me.txt file.)
 
<pre>
 
cd ${OETREE}/openembedded
 
$ bitbake -c clean linux-omap-2.6.29
 
$ bitbake -f -c compile linux-omap-2.6.29
 
</pre>
 
''Note:  These instructions are based on
 
[http://wh1t3s.com/2009/05/11/oe-bitake-kernel-mods/ this] which is a good reference on finding and modifying the kernel in the oe distribution. In fact, [http://wh1t3s.com/ wh1t3s] seems to have several nice tips.''
 
  
* The first bitbake command tells bitbake to remove the previously made binary file for that package (think "make clean"), which will force it to re-do what it previously did with the console-image build.
+
== Getting kernel make help ==
 +
Once there try some of the make commands.  Help is a good place to start.
  
* The second bitbake line forces bitbake to rebuild the linux-omap package, which will require re-extracting the previously deleted source code, and apply the relevant OE related patches.
+
host$ '''make help | less'''
 +
Cleaning targets:
 +
  clean          - Remove most generated files but keep the config and
 +
                    enough build support to build external modules
 +
  mrproper        - Remove all generated files + config + various backup files
 +
  distclean      - mrproper + remove editor backup and patch files
 +
 +
Configuration targets:
 +
  config          - Update current config utilising a line-oriented program
 +
  menuconfig      - Update current config utilising a menu based program
 +
  xconfig        - Update current config utilising a QT based front-end
 +
  gconfig        - Update current config utilising a GTK based front-end
 +
...
 +
This produces a list of common make targets.  
  
 +
== Finding and installing support software ==
  
This took some three hours on my machineYour mileage may vary.  Once done go back to
+
There are several ways to configure the kernel.  '''make config''' will prompt you line-by-line for each of the settings, very tedious, not recommendedTry
<pre>
 
cd ${OETREE}/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/linux-omap-2.6.29-r46
 
ls
 
</pre>
 
You should now see the '''git''' directorycd to it and look around.
 
  
You can now configure the kernel.
+
host$ '''make menuconfig'''
<pre>
+
  *** Unable to find the ncurses libraries or the
sudo apt-get install libqt3-mt-dev
+
  *** required header files.
make xconfig
+
  *** 'make menuconfig' requires the ncurses libraries.
</pre>
+
  ***
After saving the configuration changes to update the .config file, it is a simple matter of rerunning the forced compile step from above to rebuild the kernel:
+
  *** Install ncurses (ncurses-devel) and try again.
<pre>
+
  ***
$ bitbake -f -c compile linux-omap-2.6.29
+
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
$ bitbake -f -c deploy linux-omap-2.6.29
+
make: *** [menuconfig] Error 2
</pre>
+
If you get the error above, you need to install the ncurses library. [[ECE497_Tips_and_Tricks#On_the_host | Here]] are notes on how to discover what to install and installing it.
If your kernel configuration modifications happen to result in the generation of any loadable modules, then you will wind up with another file in the deployment images folder:
 
  
*What does the bitbake deploy command do?  See if you can find out
+
NOTE FOR UBUNTU USERS: 'sudo apt-get install libncurses5-dev' without quotes will install ncurses
  
<pre>
+
== Configuring the kernel ==
$ cd ${OETREE}/angstrom-dev/deploy/glibc/images/beagleboard
 
$ ls
 
</pre>
 
  
== Doing it yourself ==
+
Try the various interfaces for configuring the kernel.
If you would prefer to maintain your own kernel source tree outside of OE, see these directions:
 
[[BeagleBoardLinuxKernel]]
 
  
Alternatively it is possible to run the official omap branch of the linux kernel. Take a peek at this page.
+
  host$ '''make menuconfig'''
[[BeagleBoard#Linux_kernel]] (Please continue reading for the modifications I needed)
+
host$ '''make xconfig'''
 +
host$ '''make gconfig'''
  
*Since we are using OE, our paths are set up slightly different, I have made the relevant changes below that I needed to do it manuallyTake note on the second path command is arch specific (if you get an error about mkimage not being found, make sure you have the second path right)
+
I had to run the following to get these to work.
<pre>
+
  host$ '''sudo apt-get install libncurses5-dev'''
PATH=~/oe/angstrom-dev/cross/armv7a/bin:~/oe/angstrom-dev/staging/i686-linux/usr/bin:$PATH  # add cross tools to your path
+
host$ '''sudo apt-get install qt3-dev-tools'''
make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- distclean
+
  host$ '''sudo apt-get install libglade2-dev'''
make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- omap3_beagle_defconfig
 
make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- menuconfig # only needed if you want to change the default configuration
 
make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage
 
</pre>
 
  
* It is important to note that the kernel in the official branch will be newer then the ones that OE provides (2.6.33 at the time of this writing), and as such there are no OE related patches to apply. 
+
{{YoderFoot}}
 
 
* There is no reason why you can't steal the OE kernel config, and apply it to the newer kernel.  See if you can figure out how to do this.  (Hint: You will need to combine both above links directions)
 
 
 
* Alternatively if you've previously built the kernel, take a peek in your ${OETREE}/downloads.  This is where the old kernel source (pre-patches) was downloaded, and see if you can manually apply the OE patches.
 

Revision as of 12:44, 29 October 2012

thumb‎ Embedded Linux Class by Mark A. Yoder


In a previous exercise (EBC Exercise 22 Cross-Compiling and Finding the Right Kernel) you learned how to get and compile the kernel. Here we'll look at configuring it.

Finding the kernel sources

First set up the environment and go to the kernel directory

host$ source ~/.oe/crossCompileEnv.sh
host$ cd ~/BeagleBoard/kernel

Getting kernel make help

Once there try some of the make commands. Help is a good place to start.

host$ make help | less
Cleaning targets:
  clean           - Remove most generated files but keep the config and
                    enough build support to build external modules
  mrproper        - Remove all generated files + config + various backup files
  distclean       - mrproper + remove editor backup and patch files

Configuration targets:
  config          - Update current config utilising a line-oriented program
  menuconfig      - Update current config utilising a menu based program
  xconfig         - Update current config utilising a QT based front-end
  gconfig         - Update current config utilising a GTK based front-end
...

This produces a list of common make targets.

Finding and installing support software

There are several ways to configure the kernel. make config will prompt you line-by-line for each of the settings, very tedious, not recommended. Try

host$ make menuconfig
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2

If you get the error above, you need to install the ncurses library. Here are notes on how to discover what to install and installing it.

NOTE FOR UBUNTU USERS: 'sudo apt-get install libncurses5-dev' without quotes will install ncurses

Configuring the kernel

Try the various interfaces for configuring the kernel.

host$ make menuconfig
host$ make xconfig
host$ make gconfig

I had to run the following to get these to work.

host$ sudo apt-get install libncurses5-dev
host$ sudo apt-get install qt3-dev-tools
host$ sudo apt-get install libglade2-dev




thumb‎ Embedded Linux Class by Mark A. Yoder