Difference between revisions of "CM-FX6: Linux: Kernel"

From Compulab Mediawiki
Jump to: navigation, search
(USB On-The-Go (OTG))
(LCD, DVI, HDMI and LVDS support)
Line 58: Line 58:
 
<pre>
 
<pre>
 
cd /home/development/cm-fx6/kernel/linux-cm-fx6
 
cd /home/development/cm-fx6/kernel/linux-cm-fx6
patch -p1 < /path/to/cm-fx6-linux/kernel/linux-3.0.35-cm-fx6-2.patch
+
patch -p1 < /path/to/cm-fx6-linux/kernel/linux-3.0.35-cm-fx6-3.patch
 
</pre>
 
</pre>
  
Line 75: Line 75:
 
<pre>
 
<pre>
 
cd /home/development/cm-fx6/kernel/linux-cm-fx6
 
cd /home/development/cm-fx6/kernel/linux-cm-fx6
git apply /path/to/cm-fx6-linux/kernel/linux-3.0.35-cm-fx6-2.patch
+
git apply /path/to/cm-fx6-linux/kernel/linux-3.0.35-cm-fx6-3.patch
 
</pre>
 
</pre>
  
Line 96: Line 96:
 
This file includes default setup of multi-functional pins, registration of the devices integrated in the CM-FX6 module and definitions of platform-specific configuration for these devices.
 
This file includes default setup of multi-functional pins, registration of the devices integrated in the CM-FX6 module and definitions of platform-specific configuration for these devices.
  
=== LCD, DVI and HDMI support ===
+
=== LCD, DVI, HDMI and LVDS support ===
  
CM-FX6 module can be used with at least three display interfaces: LCD, DVI, and HDMI.
+
CM-FX6 module can be used with four display interfaces: LCD or DVI, HDMI and LVDS.
CM-FX6 Evaluation Kit is equipped with the DataImage SCF0403852GGU04 LCD touch panel and it is used as the default video output device.
+
CM-FX6 Evaluation Kit is equipped with the DataImage SCF0403 LCD touch panel and it is used as the default video output device.
 
Both LCD and DVI are sharing the same display interface (DI0) and therefore only one of them can be used at the same time.
 
Both LCD and DVI are sharing the same display interface (DI0) and therefore only one of them can be used at the same time.
HDMI uses another display interface and therefore can be used at the same time with either DVI or LCD interfaces.
+
HDMI and LVDS use other display interfaces and therefore can be used at the same time with each other and with either DVI or LCD interfaces.
  
 
==== Image Processing Unit (IPU) ====
 
==== Image Processing Unit (IPU) ====
Line 146: Line 146:
 
</pre>
 
</pre>
  
===== DataImage SCF0403852GGU04 LCD output =====
+
===== DataImage SCF0403 LCD output =====
  
 
In the kernel configuration menu choose '''Device Drivers ---> Graphics support ---> Backlight & LCD device support''' submenu and enable:
 
In the kernel configuration menu choose '''Device Drivers ---> Graphics support ---> Backlight & LCD device support''' submenu and enable:
  
* DataImage SCF0403852GGU04 LCD Panels support
+
* DataImage SCF0403 LCD Panels support
  
 
<pre>
 
<pre>
Line 157: Line 157:
 
│ │    < >    ILI Technology ILI9320 controller support                      │ │
 
│ │    < >    ILI Technology ILI9320 controller support                      │ │
 
│ │    < >    Toppoly TDO24M  and TDO35S LCD Panels support                  │ │
 
│ │    < >    Toppoly TDO24M  and TDO35S LCD Panels support                  │ │
│ │    <*>    DataImage SCF0403852GGU04 LCD Panels support                   │ │
+
│ │    <*>    DataImage SCF0403 LCD Panels support                           │ │
 
│ │    < >    VGG2432A4 LCM device support                                    │ │
 
│ │    < >    VGG2432A4 LCM device support                                    │ │
 
│ └────v(+)────────────────────────────────────────────────────────────────────┘ │
 
│ └────v(+)────────────────────────────────────────────────────────────────────┘ │
Line 172: Line 172:
 
The following kernel parameter must be appended to the kernel command line:
 
The following kernel parameter must be appended to the kernel command line:
 
<pre>
 
<pre>
video=mxcfb0:dev=dvi,1280x800-24M@50,if=RGB24
+
video=mxcfb0:dev=dvi,1280x800M-24@50,if=RGB24
 
</pre>
 
</pre>
  
Line 199: Line 199:
 
For routing the first frame buffer to the HDMI interface, the following kernel parameter must be appended to the kernel command line:
 
For routing the first frame buffer to the HDMI interface, the following kernel parameter must be appended to the kernel command line:
 
<pre>
 
<pre>
video=mxcfb0:dev=hdmi,1280x720-24M@50,if=RGB24
+
video=mxcfb0:dev=hdmi,1920x1080M-24@50,if=RGB24
 +
</pre>
 +
 
 +
==== LVDS ====
 +
 
 +
In the kernel configuration menu choose '''Device Drivers ---> Graphics support''' submenu and enable:
 +
 
 +
* MXC LDB
 +
 
 +
<pre>
 +
┌──────────────────────────────── Graphics support ──────────────────────────────┐
 +
│ ┌────^(-)────────────────────────────────────────────────────────────────────┐ │
 +
│ │............................................................................│ │
 +
│ │    <*> MXC Framebuffer support                                            │ │
 +
│ │    <*>  MXC EDID support                                                │ │
 +
│ │    <*>  Synchronous Panel Framebuffer                                    │ │
 +
│ │    < >    Epson VGA Panel                                                │ │
 +
│ │    <*>    MXC LDB                                                        │ │
 +
│ │    < >    MXC MIPI_DSI                                                  │ │
 +
│ │............................................................................│ │
 +
│ │    [*] Bootup logo  --->                                                  │ │
 +
│ └────────────────────────────────────────────────────────────────────────────┘ │
 +
├────────────────────────────────────────────────────────────────────────────────┤
 +
│                        <Select>    < Exit >    < Help >                      │
 +
└────────────────────────────────────────────────────────────────────────────────┘
 +
</pre>
 +
 
 +
In the default configuration the third frame buffer is routed to the LVDS interface. Therefore to use the LVDS on the third frame buffer, no special kernel arguments are required.
 +
For routing the first frame buffer to the LVDS interface, the following kernel parameter must be appended to the kernel command line:
 +
<pre>
 +
video=mxcfb0:dev=ldb,1366x768M-18@60,if=RGB666
 
</pre>
 
</pre>
  

Revision as of 14:03, 4 July 2013

Overview

The Linux kernel for CM-FX6 modules provides support for on-board peripherals and abstracts the functionality provided by the hardware. Current support coverage is specified at O/S support coverage map page. CompuLab provides ready-to-run binary kernel images, and source code of the modifications and additions made to the Linux kernel to work properly with CM-FX6 modules.

Kernel command line

The Linux kernel for CM-FX6 is shipped with built-in command line parameters:

console=ttymxc3,115200 root=/dev/mmcblk0p1 rootwait

The default kernel command line defines primary console and root device.

Setting U-Boot bootargs environment variable overrides default kernel command line and can be used to set desired kernel parameters.

Building kernel for CM-FX6

Cross-Compiler

There are several options for cross-compilation toolchain setup. You can either compile your cross-compiler or use an already built cross-compiler. The cross-compiler should support the ARM embedded-application binary interface ("EABI")

  • Pre-built toolchain:
  • Tools for creating cross-compilers:
    • Crosstool-ng: Builds a cross-compiler from source. Non-distribution specific.
    • Crossdev: Gentoo's cross-compiler builder. Needs Gentoo.

U-Boot mkimage tool

U-Boot mkimage utility is required in order to create kernel images that can be loaded by the CM-FX6 bootloader. You can download prebuilt mkimage binary or build it yourself:

mkdir ~/tmp
cd tmp
wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2
tar -xjvf u-boot-latest.tar.bz2
cd u-boot-20xx.xx
touch include/config.{h,mk}
make tools
sudo install tools/mkimage /usr/local/bin

Getting kernel sources

There are two ways to get Linux kernel sources that can be used as a baseline for CM-FX6 kernel. You can create a copy of Linux git tree or download a snapshot and extract it. We assume that you have created /home/development/cm-fx6/kernel directory for CM-FX6 kernel development.

Snapshot download

  • Download v3.0.35 snapshot with your web browser.
  • Extract the downloaded archive linux-3.0.35.tar.bz2
cd /home/development/cm-fx6/kernel
tar xvf /path/to/downloaded/linux-3.0.35.tar.bz2
mv linux-3.0.35 linux-cm-fx6
This will create /home/development/cm-fx6/kernel/linux-cm-fx6 directory containing Linux kernel tree.
  • Apply the CM-FX6 patch
cd /home/development/cm-fx6/kernel/linux-cm-fx6
patch -p1 < /path/to/cm-fx6-linux/kernel/linux-3.0.35-cm-fx6-3.patch

Git clone

  • Install git version control system.
  • Create a clone of Linux kernel tree
cd /home/development/cm-fx6/kernel
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-cm-fx6
  • Create a branch for CM-FX6 development. The CM-FX6 patches are generated vs. v3.0.35 tag (839cf7a236278ae358ff12141a168c0982fa0cd9 commit) in the linux-stable tree. It is recommended to use exactly the same baseline to avoid merge conflicts.
git checkout -b cm-fx6-dev v3.0.35
  • Apply the CM-FX6 patch
cd /home/development/cm-fx6/kernel/linux-cm-fx6
git apply /path/to/cm-fx6-linux/kernel/linux-3.0.35-cm-fx6-3.patch

Building the kernel

export ARCH=arm
export CROSS_COMPILE=arm-none-linux-eabi-
make cm_fx6_defconfig
make menuconfig
make && make uImage && \
     INSTALL_MOD_PATH=/home/development/cm-fx6/rootfs make modules_install

In the example above, the Linux kernel image (uImage) will be created in /home/development/cm-fx6/kernel/linux-cm-fx6/arch/arm/boot, and the loadable kernel modules will be installed into the /home/development/cm-fx6/rootfs/lib/modules directory.

When the CM-FX6 is booted with the kernel image created as described above and with networked root filesystem at /home/development/cm-fx6/rootfs/, the system will be able to load the kernel modules properly, thus avoiding module version problems.

Basic platform support

The CM-FX6 basic platform support is implemented in the arch/arm/mach-mx6/board-cm-fx6.c file of Linux kernel source tree. This file includes default setup of multi-functional pins, registration of the devices integrated in the CM-FX6 module and definitions of platform-specific configuration for these devices.

LCD, DVI, HDMI and LVDS support

CM-FX6 module can be used with four display interfaces: LCD or DVI, HDMI and LVDS. CM-FX6 Evaluation Kit is equipped with the DataImage SCF0403 LCD touch panel and it is used as the default video output device. Both LCD and DVI are sharing the same display interface (DI0) and therefore only one of them can be used at the same time. HDMI and LVDS use other display interfaces and therefore can be used at the same time with each other and with either DVI or LCD interfaces.

Image Processing Unit (IPU)

In the kernel configuration menu choose Device Drivers ---> MXC support drivers submenu and enable:

  • Image Processing Unit Driver
┌──────────────────────────────── Graphics support ──────────────────────────────┐
│ ┌────^(-)────────────────────────────────────────────────────────────────────┐ │
│ │    [*] Image Processing Unit Driver                                        │ │
│ │        MXC SSI support  --->                                               │ │
│ │        MXC Digital Audio Multiplexer support  --->                         │ │
│ │        MXC PMIC support  --->                                              │ │
│ └────v(+)────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

Parallel LCD interface

In the kernel configuration menu choose Device Drivers ---> Graphics support submenu and enable:

  • MXC Framebuffer support
    • MXC EDID support
    • Synchronous Panel Framebuffer
┌──────────────────────────────── Graphics support ──────────────────────────────┐
│ ┌────^(-)────────────────────────────────────────────────────────────────────┐ │
│ │    <*> Lowlevel video output switch controls                               │ │
│ │    <*> Support for frame buffer devices  --->                              │ │
│ │    [*] Backlight & LCD device support  --->                                │ │
│ │        Display device support  --->                                        │ │
│ │    <*> MXC Framebuffer support                                             │ │
│ │    <*>   MXC EDID support                                                  │ │
│ │    <*>   Synchronous Panel Framebuffer                                     │ │
│ └────v(+)────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘
DataImage SCF0403 LCD output

In the kernel configuration menu choose Device Drivers ---> Graphics support ---> Backlight & LCD device support submenu and enable:

  • DataImage SCF0403 LCD Panels support
┌──────────────────────── Backlight & LCD device support ────────────────────────┐
│ ┌────^(-)────────────────────────────────────────────────────────────────────┐ │
│ │    < >     ILI Technology ILI9320 controller support                       │ │
│ │    < >     Toppoly TDO24M  and TDO35S LCD Panels support                   │ │
│ │    <*>     DataImage SCF0403 LCD Panels support                            │ │
│ │    < >     VGG2432A4 LCM device support                                    │ │
│ └────v(+)────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

Since the DataImage is the default video output device, there is no special kernel command line argument required.

DVI

For the DVI interface to function properly, either LCD or DVI should be attached at the same time.
The following kernel parameter must be appended to the kernel command line:

video=mxcfb0:dev=dvi,1280x800M-24@50,if=RGB24

HDMI

In the kernel configuration menu choose Device Drivers ---> Graphics support submenu and enable:

  • MXC HDMI driver support
┌──────────────────────────────── Graphics support ──────────────────────────────┐
│ ┌────^(-)────────────────────────────────────────────────────────────────────┐ │
│ │    < >   E-Ink Panel Framebuffer                                           │ │
│ │    < >   SIPIX Panel Framebuffer                                           │ │
│ │    < > Support MXC ELCDIF framebuffer                                      │ │
│ │    <*> MXC HDMI driver support                                             │ │
│ │        Console display driver support  --->                                │ │
│ │    [*] Bootup logo  --->                                                   │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

In the default configuration the second frame buffer is routed to the HDMI interface. Therefore to use the HDMI on the second frame buffer, no special kernel arguments are required. For routing the first frame buffer to the HDMI interface, the following kernel parameter must be appended to the kernel command line:

video=mxcfb0:dev=hdmi,1920x1080M-24@50,if=RGB24

LVDS

In the kernel configuration menu choose Device Drivers ---> Graphics support submenu and enable:

  • MXC LDB
┌──────────────────────────────── Graphics support ──────────────────────────────┐
│ ┌────^(-)────────────────────────────────────────────────────────────────────┐ │
│ │............................................................................│ │
│ │    <*> MXC Framebuffer support                                             │ │
│ │     <*>   MXC EDID support                                                 │ │
│ │     <*>   Synchronous Panel Framebuffer                                    │ │
│ │     < >     Epson VGA Panel                                                │ │
│ │     <*>     MXC LDB                                                        │ │
│ │     < >     MXC MIPI_DSI                                                   │ │
│ │............................................................................│ │
│ │    [*] Bootup logo  --->                                                   │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

In the default configuration the third frame buffer is routed to the LVDS interface. Therefore to use the LVDS on the third frame buffer, no special kernel arguments are required. For routing the first frame buffer to the LVDS interface, the following kernel parameter must be appended to the kernel command line:

video=mxcfb0:dev=ldb,1366x768M-18@60,if=RGB666

Touchscreen controllers support

CM-FX6 Evaluation Kit has two separate touch screen controllers: Himax HX8520-C (assembled on the DataImage LCD) and TI TSC2046 (on-board of the CM-FX6 module). The Himax HX8520-C is a dual touch capacitive touchscreen connected to the I2C1 bus of the CM-FX6 module. The TI TSC2046 is a resistive touchscreen controller conneted to the SPI1 bus of the CM-FX6 module. To use the TI TSC2046 controller, the resistive touchscreen must be connected to one of the interfaces on the SB-FX6 base board.

Himax HX8520-C touchscreen controller

In the kernel configuration menu choose Device Drivers ---> Input device support ---> Touchscreens submenu and enable:

  • HX8520-C touchscreen support
┌───────────────────────────────── Touchscreens ─────────────────────────────────┐
│ ┌────^(-)────────────────────────────────────────────────────────────────────┐ │
│ │    < >   TSC2007 based touchscreens                                        │ │
│ │    < >   W90P910 touchscreen driver                                        │ │
│ │    <M>   HX8520-C touchscreen support                                      │ │
│ │    < >   Sitronix ST1232 touchscreen controllers                           │ │
│ └────v(+)────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                        <Select>    < Exit >    < Help >                        │
└────────────────────────────────────────────────────────────────────────────────┘

TI TSC2046 touchscreen controller

In the kernel configuration menu choose Device Drivers ---> Input device support ---> Touchscreens submenu and enable:

  • ADS7846/TSC2046/AD7873 and AD(S)7843 based touchscreens
┌───────────────────────────────── Touchscreens ─────────────────────────────────┐
│ ┌────────────────────────────────────────────────────────────────────────────┐ │  
│ │    --- Touchscreens                                                        │ │  
│ │    <M>   ADS7846/TSC2046/AD7873 and AD(S)7843 based touchscreens           │ │  
│ │    < >   AD7877 based touchscreens                                         │ │  
│ │    < >   Analog Devices AD7879-1/AD7889-1 touchscreen interface            │ │  
│ └────v(+)────────────────────────────────────────────────────────────────────┘ │  
├────────────────────────────────────────────────────────────────────────────────┤  
│                        <Select>    < Exit >    < Help >                        │  
└────────────────────────────────────────────────────────────────────────────────┘  

Analog Audio Support

In the kernel configuration menu choose Device Drivers ---> Sound card support ---> Advanced Linux Sound Architecture ---> ALSA for SoC audio support ---> SoC Audio for Freescale i.MX CPUs submenu and enable:

  • SoC Audio support for CM-FX6 boards
┌────────────────── SoC Audio for Freescale i.MX CPUs ───────────────────────────┐
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │   --- SoC Audio for Freescale i.MX CPUs                                    │ │
│ │   < >   SoC Audio support for IMX boards with WM8958                       │ │
│ │   < >   SoC Audio support for IMX boards with WM8962                       │ │
│ │   <*>   SoC Audio support for CM-FX6 boards                                │ │
│ │   < >   SoC Audio support for IMX SI4763                                   │ │
│ │   <*>   SoC Audio support for IMX - S/PDIF                                 │ │
│ │   <*>   SoC Audio support for IMX - HDMI                                   │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

WiFi and Bluetooth

CM-FX6 has WiFi and Bluetooth support based on Marvell 88W8787.

WiFi

In the kernel configuration menu choose Device Drivers ---> Network device support ---> Wireless LAN submenue and enable:

  • Marvell WiFi-Ex Driver
  • Marvell WiFi-Ex Driver for SD8787
┌──────────────────────────────── Wireless LAN ──────────────────────────────────┐
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │   < >   ZyDAS ZD1211/ZD1211B USB-wireless support                          │ │
│ │   <M>   Marvell WiFi-Ex Driver                                             │ │
│ │   <M>     Marvell WiFi-Ex Driver for SD8787                                │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

Bluetooth

In the kernel configuration menu choose Networking support ---> Bluetooth subsystem support ---> Bluetooth device drivers submenue and enable:

  • Marvell Bluetooth driver support
  • Marvell BT-over-SDIO driver
┌─────────────────────── Bluetooth device drivers ───────────────────────────────┐
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │   < >   HCI VHCI (Virtual HCI device) driver                               │ │
│ │   <M>   Marvell Bluetooth driver support                                   │ │
│ │   <M>     Marvell BT-over-SDIO driver                                      │ │
│ │   < >   Atheros firmware download driver                                   │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

USB On-The-Go (OTG)

In the kernel configuration menu choose System Type ---> Freescale MXC Implementations submenu and enable:

  • FSL USB OTG support
┌────────────────────────────────────────────────────────────────────────────────┐
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │   [*] Support CompuLab CM-FX6 module                                       │ │
│ │              *** MX6 Options: ***                                          │ │
│ │   [*] PCI Express support                                                  │ │
│ │   <*>   USB Host 1 support                                                 │ │
│ │   <*>   FSL USB OTG support                                                │ │
│ │   [ ] Internal LDO in MX6Q/DL bypass                                       │ │
│ │   [ ] MX6 clk setting for smooth UI transtion from bootloader to kernel    │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

In the kernel configuration menu choose Device Drivers ---> USB support submenu and enable:

  • Support for Host-side USB
  • EHCI HCD (USB 2.0) support
    • Support for Freescale controller
  • USB OTG pin detect support
┌───────────────────────────── USB support ──────────────────────────────────────┐
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │   --- USB support                                                          │ │  
│ │   <*>   Support for Host-side USB                                          │ │  
│ │   [ ]     USB verbose debug messages                                       │ │  
│ │   [ ]     USB announce new devices                                         │ │  
│ │           *** Miscellaneous USB options ***                                │ │  
│ │   [ ]     USB device filesystem (DEPRECATED)                               │ │  
│ │   [ ]     USB device class-devices (DEPRECATED)                            │ │  
│ │   [ ]     Dynamic USB minor allocation                                     │ │  
│ │   [*]     USB runtime power management (autosuspend) and wakeup            │ │  
│ │   -*-       OTG support                                                    │ │  
│ │   .......................................................................  │ │
│ │   <*>   EHCI HCD (USB 2.0) support                                         │ │  
│ │   [*]     Support for Freescale controller                                 │ │  
│ │   .......................................................................  │ │
│ │   <*>     USB Gadget Support  --->                                         │ │
│ │        *** OTG and related infrastructure ***                              │ │
│ │   .......................................................................  │ │
│ │   <*>   USB OTG pin detect support                                         │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────┤
│                         <Select>    < Exit >    < Help >                       │
└────────────────────────────────────────────────────────────────────────────────┘

See also