Difference between revisions of "Linux Kernel 2.6.37.y"

From IGEP - ISEE Wiki

Jump to: navigation, search
(Changelog)
Line 30: Line 30:
 
= Build kernel from sources =
 
= Build kernel from sources =
  
Download the latest stable version sources and follow next steps:  
+
'''Download''' the latest stable version sources and follow next steps:  
  
 
  wget http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-4/linux-omap-2.6.37-4.tar.gz
 
  wget http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-4/linux-omap-2.6.37-4.tar.gz
Line 36: Line 36:
 
  cd [kernel version]
 
  cd [kernel version]
  
A generic configuration is provided for all IGEP machines, and can be used as
+
'''Configure''' Linux kernel for IGEP devices. IGEP is ARM architecture based device. A generic configuration is provided for all IGEP machines, and can be used as the default by
the default by
 
  
 
  make ARCH=arm CROSS_COMPILE=[your cross compiler] igep00x0_defconfig
 
  make ARCH=arm CROSS_COMPILE=[your cross compiler] igep00x0_defconfig
  
Then build the kernel with:
+
For example, if you are using IGEP SDK Toolchain ([[How_to_setup_a_cross_compiler]]) then you should execute following cmdline:
 +
 +
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- igep00x0_defconfig
 +
 
 +
 
 +
Then '''build''' the kernel and kernel modules. The result will be an ''zImage'' file in arch/arm/boot directory. Execute:
  
 
  make ARCH=arm CROSS_COMPILE=[your cross compiler] zImage modules
 
  make ARCH=arm CROSS_COMPILE=[your cross compiler] zImage modules
  
The result will be an uImage file in arch/arm/boot directory. You can install the kernel modules to your target rootfs  
+
You can '''install''' the kernel modules to your target rootfs  
  
  make ARCH=arm CROSS_COMPILE=[your cross compiler] modules_install INSTALL_MOD_PATH=[path to your target rootfs]
+
  make ARCH=arm CROSS_COMPILE=[your cross compiler] INSTALL_MOD_PATH=[path to your target rootfs] modules_install
  
 
= Kernel Parameters =
 
= Kernel Parameters =

Revision as of 18:04, 2 October 2012

Introduction

The currently supported machines are as follows:

  • IGEP v2 (IGEP0020)
  • IGEP COM MODULE (IGEP0030)
  • IGEP COM PROTON (IGEP0032)

The currently supported expansion boards are as follows:

  • IGEP v2 EXPANSION (IGEP0022)
  • IGEP PARIS/BERLIN (BASE0010 -Rev. A & Rev. B)
  • IGEP NEW YORK (ILMS0015)

Binaries: latest stable kernel version is: 2.6.37-4 (20120719)

Platform Sources zImage binary Modules binaries
 IGEP00x0  2.6.37-4 (md5sum) zImage-2.6.37-4.bin (md5sum) modules-2.6.37-4 (md5sum)

Build kernel from sources

Download the latest stable version sources and follow next steps:

wget http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-4/linux-omap-2.6.37-4.tar.gz
tar xzf linux-omap-2.6.37-4.tar.gz
cd [kernel version]

Configure Linux kernel for IGEP devices. IGEP is ARM architecture based device. A generic configuration is provided for all IGEP machines, and can be used as the default by

make ARCH=arm CROSS_COMPILE=[your cross compiler] igep00x0_defconfig

For example, if you are using IGEP SDK Toolchain (How_to_setup_a_cross_compiler) then you should execute following cmdline:

make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- igep00x0_defconfig


Then build the kernel and kernel modules. The result will be an zImage file in arch/arm/boot directory. Execute:

make ARCH=arm CROSS_COMPILE=[your cross compiler] zImage modules

You can install the kernel modules to your target rootfs

make ARCH=arm CROSS_COMPILE=[your cross compiler] INSTALL_MOD_PATH=[path to your target rootfs] modules_install 

Kernel Parameters

This chapter describes some kernel command line parameters you can pass to the kernel during system startup. They also depend on the presence of the hardware with which they are associated.

The board.ei485 parameter allows to use UART1 as RS232 port instead of EI485

 board.ei485=  [yes, no]
               Format: <string>
               no: disable ei485, use UART1 as RS232, supported by igep0020
               default: yes

The buddy parameter allows enable or disable expansion boards

 buddy=   [igep0022, base0010]
          Format: <string>
          igep0022: enable expansion board, supported by igep0020
                    board
          base0010: enable expansion board, supported by igep0030
                    board and igep0032 (only rev. B)
          ilms0015: enable expansion board, supported by igep0030
                    board
          default: none

The buddy.revision parameter allows to pass hardware revision for buddy boards

 buddy.revision= [A, B]
          Format: <string>
          A: enable hardware buddy revision A, only available for base0010
          B: enable hardware buddy revision B, only available for base0010
          default: A

The buddy.modem parameter allows enable or disable modem

 buddy.modem=  [yes]
               Format: <string>
               yes: enable modem on buddy board, supported by igep0022 expansion board.
               default: none

Scenarios

Consider the following situations:

Scenario A. You have and IGEP0020 board plus IGEP0022 expansion board, then you should add in your kernel command line

buddy=igep0022

Optionally, to enable the IGEP0022 modem which is disabled by default you should add in your kernel command line

buddy=igep0022 buddy.modem=yes

NOTE: UART2 can be used for bluetooth OR modem in expansion board but NOT at same time. They are INCOMPATIBLE.

Scenario B. You have and IGEP0030 board plus BASE0010 expansion board, then you should add in your kernel command line

buddy=base0010

Scenario C. You have and IGEP0030 board plus BASE0010 Rev. B expansion board, then you should add in your kernel command line

buddy=base0010 buddy.revision=B

Scenario D. You have and IGEP0032 board plus BASE0010 Rev. B expansion board, then you should add in your kernel command line

buddy=base0010 buddy.revision=B

Scenario E. You have and IGEP0030 board plus ILMS0015 expansion board, then you should add in your kernel command line

buddy=ilms0015

Layout

Machine specific files are located in arch/arm/mach-omap2/ directory with name board-igep*.c. Like :

  • board-igep0020.c : For IGEP0020 machine
  • board-igep0030.c : For IGEP0030 machine
  • board-igep0032.c : For IGEP0032 machine

Expansion board files, also are located in arch/arm/mach-omap2/ directory with name exp-*.c. Like :

  • exp-igep0022.c : For IGEP0022 expansion board
  • exp-base0010.c : For BASE0010 expansion board
  • exp-ilms0015.c : For ILMS0015 expansion board

Adding New Expansion Boards

This chapter is meant to be a starting point for people to learn how to add your own expansion board in three steps.

Step 1: Add new expansion board file

As you can see in Layout chapter, an expansion board is called exp-<your board name>.c and should be located in arch/arm/mach-omap2 directory, so the first step will be add a new file for your new expansion board. Following example creates a new expansion board file called exp-dummy.c (arch/arm/mach-omap2/exp-dummy.c)

 #include <linux/kernel.h>
 #include <linux/init.h>

 void __init dummy_init(void)
 {
 	pr_info("Initializing expansion board ... \n");
 }

next, add the new file to be built

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 7505be9..a6572f2 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -156,6 +156,7 @@ obj-$(CONFIG_MACH_IGEP0020)         += board-igep0020.o \
 obj-$(CONFIG_MACH_IGEP0030)            += board-igep0030.o \
                                           board-igep00x0.o \
                                           exp-base0010.o \
+                                          exp-dummy.o \
                                           hsmmc.o
 obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK)     += board-omap3touchbook.o \
                                           hsmmc.o

Step 2: Register new expansion board

Now, edit board-igep00x0.h and add an identifier for the new expansion board, for example,

diff --git a/arch/arm/mach-omap2/board-igep00x0.h b/arch/arm/mach-omap2/board-igep00x0.h
index 6b9b677..a2325d7 100644
--- a/arch/arm/mach-omap2/board-igep00x0.h
+++ b/arch/arm/mach-omap2/board-igep00x0.h
@@ -15,6 +15,7 @@
 #define IGEP00X0_BUDDY_NONE            0x01
 #define IGEP00X0_BUDDY_IGEP0022        0x01
 #define IGEP00X0_BUDDY_BASE0010        0x02
+#define IGEP00X0_BUDDY_DUMMY           0x03

 #define IGEP00X0_BUDDY_HWREV_A         (1 << 0)
 #define IGEP00X0_BUDDY_HWREV_B         (1 << 1)

also, edit in board-igep00x0.c the buddy_early_param to add the new expansion board,

diff --git a/arch/arm/mach-omap2/board-igep00x0.c b/arch/arm/mach-omap2/board-igep00x0.c
index 2a2d8eb..f2b5b27 100644
--- a/arch/arm/mach-omap2/board-igep00x0.c
+++ b/arch/arm/mach-omap2/board-igep00x0.c
@@ -192,6 +192,9 @@ static int __init buddy_early_param(char *str)
                if (!strcmp(name, "base0010")) {
                        igep00x0_buddy_pdata.model = IGEP00X0_BUDDY_BASE0010;
                        pr_info("IGEP: IGEP0030 machine + BASE0010 (buddy)\n");
+               } else if (!strcmp(name, "dummy")) {
+                       igep00x0_buddy_pdata.model = IGEP00X0_BUDDY_DUMMY;
+                       pr_info("IGEP: IGEP0030 machine + DUMMY (buddy)\n");
                } else
                        pr_err("IGEP: Unknown buddy for IGEP0030 machine\n");
        }

Step 3: Run expansion board initialization

Finally, modify the machine file and add support for the new expansion board, for example:

diff --git a/arch/arm/mach-omap2/board-igep0030.c b/arch/arm/mach-omap2/board-igep0030.c
index 2b97257..44b319d 100644
--- a/arch/arm/mach-omap2/board-igep0030.c
+++ b/arch/arm/mach-omap2/board-igep0030.c
@@ -204,6 +204,8 @@ static struct omap_board_mux board_mux[] __initdata = {

 /* Expansion board: BASE0010 */
 extern void __init base0010_init(struct twl4030_platform_data *pdata);
+/* Expansion board: DUMMY */
+extern void __init dummy_init(void);

 static void __init igep0030_init(void)
 {
@@ -223,6 +225,10 @@ static void __init igep0030_init(void)
        /* - BASE0010 (adds twl4030_pdata)  */
        if (igep00x0_buddy_pdata.model == IGEP00X0_BUDDY_BASE0010)
                base0010_init(&twl4030_pdata);
+       /* - DUMMY  */
+       if (igep00x0_buddy_pdata.model == IGEP00X0_BUDDY_DUMMY)
+               dummy_init();
+

        /* Add twl4030 common data */
        omap3_pmic_get_config(&twl4030_pdata, TWL_COMMON_PDATA_USB |

Changelog

  • 2012-07-19 Release 2.6.37-4
    • Fix #026: Add bridging network support.
    • Fix #019: omapdss DISPC error: GFX_FIFO_UNDERFLOW, disabling GFX.
    • Fix #021: Linux kernel doesn't detect Ethernet link after boot on OMAP3530 and IGEP0020-RC2.
    • Fix #027: HDMI standard resolution 720P or 480P it's not working correctly.
  • 2012-05-23 Release 2.6.37-3
    • Fix PM features.
    • Return ENODEV if touchscreen device is not found.
    • Fix SMSC911x issue, wait for the chip to be ready.
    • Fix MCP251X requesting NRESET gpio.
  • 2012-02-29 Release 2.6.37-2
    • base0010: Fix mux for GPIO53
    • Update defconfig (disable JFFS2 SUMMARY SUPPORT)
  • 2012-01-19 Release 2.6.37-1
    • Fix NFS root mount option
    • Add MADC support
    • Add support for Battery Backup
    • Fix RS485 bug when transmitting more than 16 bytes
  • Release 2.6.37-0
    • First release for 2.6.37 series