EBC Exercise 23 Configuring the Kernel
Embedded Linux Class by Mark A. Yoder
These instructions are for the 3.8 kernel. See EBC Exercise 23 Configuring the Kernel - bitbake for the 3.2 kernel.
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: *** [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: `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 ../../kernel/beagle_install_kernel.sh ../../kernel/remote_install_kernel.sh .
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:
host$ ./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. 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.
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
If your Beagle fails to boot, follow the EBC_Exercise_22_Recovering instructions to recover.
Embedded Linux Class by Mark A. Yoder