Building linux kernel
Posted: Wed Aug 17, 2011 4:36 pm
We are going to build the latest version of linux kernel (2.6.37 in this case) for cs-e9302 target platform. However our machine configuration couldn't be found at OpenEmbedded linux recipes for latest kernel version
Next few steps demonstrate process of configuring and building latest linux kernel in Angstrom distribution. First build the kernel normally with bitbake by running this command:
This will create a source directory in /angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/. In this case it will be /angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/linux-2.6.24-r46/
Add the following file in your build configuration directory
and add preferred version of linux kernel
Now we have to configure linux kernel. Run the following command
This will create a source directory in
In this case it will be
Next step is to modify the kernel configuration based on the existing configuration. Please ensure you have ncurses development package installed
Copy default configuration file from linux kernel sources.
Let’s modify linux kernel configuration. Do this by passing a command argument to bitbake.
This invokes one of the standard kernel configuration tools menuconfig which provides a minimalist GUI based on the ncurses library.
NOTE: If this command does not launch an ncurses window, you are likely missing some tools on your workstation. For Ubuntu users, I have a check-installed.py script you can use to check your system. You can find it here - oe-build-essentials-project.
We are going to change some options in kernel configuration:
When you are done, the new kernel configuration file can be found here
We have to add linux recipe in our repository. Create directory
First let's copy the bbfile recipe of linux kernel from OpenEmbedded repository:
Now edit file
and change line
to
Then we have to create linux configuration file directory
Copy configuration file to local repository
Finally build the kernel
After building the image file could be found at
- Code: Select all
user@ubuntu:~$ ls -al /angstrom/sources/openembedded/recipes/linux/linux-2.6.37/
total 1648
drwxr-xr-x 16 user user 4096 2011-03-27 20:07 .
drwxr-xr-x 205 user user 20480 2011-08-12 07:31 ..
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 om-gta01
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 om-gta02
-rw-r--r-- 1 user user 1564402 2011-03-20 10:35 openmoko.patch
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 openrd-base
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 openrd-client
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 qemuarm
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 qemumips
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 qemumips64
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 qemumipsel
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 qemuppc
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 qemush4
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 qemux86
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 sheevaplug
-rw-r--r-- 1 user user 34985 2011-03-20 10:35 shr.patch
drwxr-xr-x 2 user user 4096 2011-03-20 10:36 spitz
drwxr-xr-x 2 user user 4096 2011-03-20 10:35 visstrim_m10
Next few steps demonstrate process of configuring and building latest linux kernel in Angstrom distribution. First build the kernel normally with bitbake by running this command:
- Code: Select all
bitbake virtual/kernel
This will create a source directory in /angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/. In this case it will be /angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/linux-2.6.24-r46/
Add the following file in your build configuration directory
- Code: Select all
nano /angstrom/build/conf/site.conf
and add preferred version of linux kernel
- Code: Select all
PREFERRED_VERSION_linux ?= "2.6.37"
Now we have to configure linux kernel. Run the following command
- Code: Select all
bitbake -c configure virtual/kernel
This will create a source directory in
- Code: Select all
/angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/
In this case it will be
- Code: Select all
/angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/linux-2.6.37-r4/
Next step is to modify the kernel configuration based on the existing configuration. Please ensure you have ncurses development package installed
- Code: Select all
apt-get install libncurses5-dev
Copy default configuration file from linux kernel sources.
- Code: Select all
cp /angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/linux-2.6.37-r4/linux-2.6.37/arch/arm/configs/ep93xx_defconfig /angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/linux-2.6.37-r4/linux-2.6.37/.config
Let’s modify linux kernel configuration. Do this by passing a command argument to bitbake.
- Code: Select all
bitbake –c menuconfig virtual/kernel
This invokes one of the standard kernel configuration tools menuconfig which provides a minimalist GUI based on the ncurses library.
NOTE: If this command does not launch an ncurses window, you are likely missing some tools on your workstation. For Ubuntu users, I have a check-installed.py script you can use to check your system. You can find it here - oe-build-essentials-project.
We are going to change some options in kernel configuration:
- Code: Select all
System type:
[Enter] Cirrus EP93XX Implementation Options
[Disable] Support ADC Sphere
[Disable] Support Cirrus Logic EDB9301
[Disable] Support Cirrus Logic EDB9307
[Disable] Support Cirrus Logic EDB9312
[Disable] Support Cirrus Logic EDB9315
[Disable] Support Glomation GESBC-9312-sx
[Disable] Support Contec Micro9-High
[Disable] Support Contec Micro9-Lite
[Disable] Support Technologic Systems TS-72xx SBC
Device drivers:
[Enter] Memory Technology Device:
[Disable] NAND Device Support
[Enter] Block Devices:
[Module] Loopback device support
[Module] Network block device support
[Enter] Network device support:
[Disable] Ethernet (1000 Mbit)
[Disable] Ethernet (10000 Mbit)
[Disable] Wireless LAN
[Enter] USB Network Adapters
[Module] USB KLSI KL5USB101-based ethernet device support
[Module] USB Pegasus/Pegasus-II based ethernet device support
[Module] USB RTL8150 based ethernet device support
[Module] Multi-purpose USB Networking Framework
[Module] Davicom DM9601 based 1.1 10/100 ethernet devices
[Module] SMSC LAN75XX based USB 2.0 gigabit ethernet devices
[Module] SMSC LAN75XX based USB 2.0 10/100 ethernet devices
[Module] GeneSys GL620USB-A based cables
[Module] Profilic PL-2301/2302 based cables
[Module] MosChip MCS7830 based Ethernet adapters
[Module] Host for RNDIS and ActiveSync devices
[Disable] eTEK based host-to-host cables (Advance, Belkin, …)
[Disable] Embedded Arm Linux links (iPaq, …)
[Disable] Sharp Zaurus (stock ROMs) and compatible
[Enter] I2C support:
[Disable] I2C Core Debugging Messages
[Disable] I2C Algorithm Debugging Messages
[Disable] I2C Bus Debugging Messages
[Enable] SPI support
[Enter] SPI support:
[Enable] Cirrus Logic EP93XX SPI controller
[Enable] User mode SPI device driver support
[Enter] GPIO support:
[Enable] /sys/class/gpio…(sysfs interface)
[Disable] Multifunction Device Drivers
[Enter] USB support:
[Enable] USB Modem (CDC ACM) support
[Enable] USB Atached SCSI
[Enter] USB Serial Converter Support
[Enable] USB Generic Serial Driver
[Module] USB AIRCable Bluetooth Dongle Driver
[Module] USB ARK Micro 3116 USB Serial Driver
[Module] USB Belkin and Peracom Single Port Serial Driver
[Module] USB Winchiphead CH341 Single Port Serial Driver
[Module] USB Digi International AccelePort USB Serial Driver
[Module] USB CP210x family of UART Bridge Controllers
[Module] USB Cypress M8 USB Serial Driver
[Module] USB Empeg empeg-car MARK I/II Driver
[Module] USB FTDI Single Port Serial Driver
[Module] USB Fundamental Software Dongle Driver
[Module] USB Handspring Visor / Palm m50x / Sony Clie Driver
[Module] USB IR Dongle Serial Driver
[Module] USB Garmin GPS Driver
[Module] USB IPWirelless (3G UMTS TDD) Driver
[Module] USB Infinity USB Unlimited Phoenix Driver
[Module] USB Moschip 7720 Serial Driver
[Module] USB Moschip 7840/7820 USB Serial Driver
[Module] USB Prolific 2303 Single Port Serial Driver
[Module] USB Ours Technology Inc. OTi-6858 USB To RS232 Bridge Controller
[Module] USB Qualcomm Auxiliary Serial Port Driver
[Module] USB Qualcomm Serial Modem
[Module] USB SPCP8x5 USB To Serial Driver
[Enable] USB Gadget support
[Enter] USB Gadget support
[Module] Gadget Zero (DEVELOPMENT)
[Module] Ethernet Gadget (with CDC Ethernet support)
[Module] Mass Storage Gadget
[Module] Serial Gadget (with CDC ACM and CDC OBEX support)
[Module] CDC Composite Device (Ethernet and ACM)
[Module] HID Gadget
[Enter] Real time clock:
[Disable] Dallas/Maxim DS1307/37/38/39/40, ST M4T00, EPSON RX-8025
[Disable] ST M48T86/Dallas DS12887
[Enable] MMC/SD/SDIO card support
File systems
[Enter] Miscellaneous filesystems
[Enable] JFFS2 summary support
[Enable] Advanced compression options for JFFS2
[Enter] DOS/FAT/NT Filesystems
[Module] MSDOS fs support
[Module] VFAT (Windows-95) fs support
[Module] NTFS file system support
Kernel hacking:
[Disable] Kernel debugging
When you are done, the new kernel configuration file can be found here
- Code: Select all
/angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/linux-2.6.37-r4/linux-2.6.37/.config
We have to add linux recipe in our repository. Create directory
- Code: Select all
mkdir -p /angstrom/sources/local/recipes/linux
First let's copy the bbfile recipe of linux kernel from OpenEmbedded repository:
- Code: Select all
cp /angstrom/sources/openembedded/recipes/linux/linux_2.6.37.bb /angstrom/sources/local/recipes/linux/linux_2.6.37.bb
Now edit file
- Code: Select all
nano /angstrom/sources/local/recipes/linux/linux_2.6.37.bb
and change line
- Code: Select all
require linux.inc
to
- Code: Select all
require ${BBFILE_PATTERN_oe}/recipes/linux/linux.inc
Then we have to create linux configuration file directory
- Code: Select all
mkdir -p /angstrom/sources/local/recipes/linux/linux-2.6.37/cs-e9302/
Copy configuration file to local repository
- Code: Select all
cp /angstrom/build/tmp-angstrom_2008_1/work/cs-e9302-angstrom-linux-gnueabi/linux-2.6.37-r4/linux-2.6.37/.config /angstrom/sources/local/recipes/linux/linux-2.6.37/cs-e9302/defconfig
Finally build the kernel
- Code: Select all
bitbake virtual/kernel
After building the image file could be found at
- Code: Select all
/angstrom/build/tmp-angstrom_2008_1/deploy/glibc/images/cs-e9302/