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

From eLinux.org
Jump to: navigation, search
(adding a check at the end for the newly installed kernel)
(Making and Installing the kernel)
(9 intermediate revisions by 3 users not shown)
Line 65: Line 65:
 
  host$ '''cd linux-dev'''
 
  host$ '''cd linux-dev'''
 
  host$ '''tools/rebuild.sh'''
 
  host$ '''tools/rebuild.sh'''
You'll be given a chance to configure, you can exit without saving if you don't want to change anything.
+
'''rebuild.sh''' sets up some things and the does a make on the kernel. It handles things like using the right cross compiler and the right number of cores. You'll be given a chance to configure, you can exit without saving if you don't want to change anything.
  
 
After a while (depending on the number of cores) you will see.
 
After a while (depending on the number of cores) you will see.
Line 81: Line 81:
 
Now you are ready to install. Have your Bone running and on the network. On your host run:
 
Now you are ready to install. Have your Bone running and on the network. On your host run:
 
  host$ '''cd linux-dev/tools'''
 
  host$ '''cd linux-dev/tools'''
  host$ '''ln -s ../../exercises/setup/beagle_install_kernel.sh ../../exercises/setup/remote_install_kernel.sh .'''
+
  host$ '''ln -s ''path to exercises''/kernel/beagle_install_kernel.sh .'''
 +
host$ '''ln -s ''path to exercises''/kernel/remote_install_kernel.sh .'''
 +
host$ '''cd ..'''
  
This will link in two files from the git repository that we'll use.  Edit '''remote_install_kernel.sh''' and change '''BeagleAddr''' to the address of your beagle. Then run:
+
This will link two files from the git repository to files of the same name in the tools directory.  Edit '''remote_install_kernel.sh''' and change '''BeagleAddr''' to the address of your beagle. Then run from '''linux-dev'''
  host$ '''./remote_install_kernel.sh'''
+
  host$ '''tools/remote_install_kernel.sh'''
 
  Image Name:  3.8.13-bone26.1
 
  Image Name:  3.8.13-bone26.1
 
  Created:      Tue Sep  3 13:33:35 2013
 
  Created:      Tue Sep  3 13:33:35 2013
Line 101: Line 103:
 
  3.8.13-bone26.1.zImage                        100% 3263KB  1.1MB/s  00:03     
 
  3.8.13-bone26.1.zImage                        100% 3263KB  1.1MB/s  00:03     
 
  3.8.13-bone26.1-modules.tar.gz                100%  11MB  5.7MB/s  00:02  
 
  3.8.13-bone26.1-modules.tar.gz                100%  11MB  5.7MB/s  00:02  
 +
(If you get mkimage not found try running apt-get install uboot-mkimage)
  
This copies several files to your Bone. Then, on the Bone run:
+
 
 +
This copies several files to your Bone. Make sure that the date and time on your Bone are set correctly, otherwise the Bone may ignore the proper files (plus you'll get a bunch of garbage output telling you that the files were made in the future). Then, on the Bone run:
 
  beagle$ '''cd linux-dev'''
 
  beagle$ '''cd linux-dev'''
  beagle$ '''tools/beagle_install.sh'''
+
  beagle$ '''tools/beagle_install_kernel.sh'''
 
  No manual entry for git-pull
 
  No manual entry for git-pull
 
  Installing 3.8.13-bone26.1-modules.tar.gz
 
  Installing 3.8.13-bone26.1-modules.tar.gz

Revision as of 19:17, 22 October 2013

thumb‎ Embedded Linux Class by Mark A. Yoder


3.8 Kernel

These instructions are for the 3.8 kernel. See EBC Exercise 23 Configuring the Kernel - bitbake for the 3.2 kernel.

In a previous exercises (EBC Exercise 08a Cross-Compiling and EBC Exercise 08 Installing Development Tools) 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 ~/crossCompileEnv.sh  (set up in EBC Exercise 08a Cross-Compiling)
host$ cd ~/BeagleBoard/linux-dev/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

Making and Installing the kernel

Once you have the kernel configured it's easy to make and install it on the bone.

host$ cd linux-dev
host$ tools/rebuild.sh

rebuild.sh sets up some things and the does a make on the kernel. It handles things like using the right cross compiler and the right number of cores. You'll be given a chance to configure, you can exit without saving if you don't want to change anything.

After a while (depending on the number of cores) you will see.

 CHK     include/generated/uapi/linux/version.h
 CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
 CALL    scripts/checksyscalls.sh
...
 LD [M]  sound/usb/caiaq/snd-usb-caiaq.ko
 LD [M]  sound/usb/misc/snd-ua101.ko
 LD [M]  sound/usb/snd-usb-audio.ko
 LD [M]  sound/usb/snd-usbmidi-lib.ko

Now you are ready to install. Have your Bone running and on the network. On your host run:

host$ cd linux-dev/tools
host$ ln -s path to exercises/kernel/beagle_install_kernel.sh .
host$ ln -s path to exercises/kernel/remote_install_kernel.sh .
host$ cd ..

This will link two files from the git repository to files of the same name in the tools directory. Edit remote_install_kernel.sh and change BeagleAddr to the address of your beagle. Then run from linux-dev

host$ tools/remote_install_kernel.sh
Image Name:   3.8.13-bone26.1
Created:      Tue Sep  3 13:33:35 2013
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3340904 Bytes = 3262.60 kB = 3.19 MB
Load Address: 80008000
Entry Point:  80008000
utsrelease.h                                  100%   38     0.0KB/s   00:00    
beagle_install_kernel.sh                      100% 3043     3.0KB/s   00:00    
version.sh                                    100%  915     0.9KB/s   00:00    
system.sh                                     100% 1446     1.4KB/s   00:00    
3.8.13-bone26.1.config                        100%  107KB 106.5KB/s   00:00    
uImage-3.8.13-bone26.1                        100% 3263KB   1.6MB/s   00:02    
3.8.13-bone26.1-firmware.tar.gz               100% 1198KB   1.2MB/s   00:00    
3.8.13-bone26.1-dtbs.tar.gz                   100%   33KB  32.7KB/s   00:00    
3.8.13-bone26.1.zImage                        100% 3263KB   1.1MB/s   00:03    
3.8.13-bone26.1-modules.tar.gz                100%   11MB   5.7MB/s   00:02 

(If you get mkimage not found try running apt-get install uboot-mkimage)


This copies several files to your Bone. Make sure that the date and time on your Bone are set correctly, otherwise the Bone may ignore the proper files (plus you'll get a bunch of garbage output telling you that the files were made in the future). Then, on the Bone run:

beagle$ cd linux-dev
beagle$ tools/beagle_install_kernel.sh
No manual entry for git-pull
Installing 3.8.13-bone26.1-modules.tar.gz
Installing 3.8.13-bone26.1-firmware.tar.gz
`/home/root/linux-dev/deploy/tmp/BB-ADC-00A0.dtbo' -> `/home/root/linux-dev/deploy/disk/lib/firmware/BB-ADC-00A0.dtbo'
...
`/home/root/linux-dev/deploy/tmp/cape-bone-weather-00A0.dtbo' -> `/home/root/linux-dev/deploy/disk/lib/firmware/cape-bone-weather-00A0.dtbo'
`/home/root/linux-dev/deploy/tmp/cape-boneblack-hdmi-00A0.dtbo' -> `/home/root/linux-dev/deploy/disk/lib/firmware/cape-boneblack-hdmi-00A0.dtbo'
`/home/root/linux-dev/deploy/tmp/cape-boneblack-hdmin-00A0.dtbo' -> `/home/root/linux-dev/deploy/disk/lib/firmware/cape-boneblack-hdmin-00A0.dtbo'

This uncompresses and installs the modules and firmware. You are now ready to reboot.

beagle$ reboot

If you Bone boots up and you can reconnect to it, you can verify that you are running the new kernel by running:

beagle$ uname -a

Recovering

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




thumb‎ Embedded Linux Class by Mark A. Yoder