CM-T54: Linux: Kernel

From Compulab Mediawiki
Jump to: navigation, search

Overview

Linux kernel for the CompuLab CM-T54 System-on-Module / Computer-on-Module 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-T54 modules.

Device Tree

Device Tree (DT), is a data structure and language for describing hardware. More specifically, it is a description of hardware that is readable by an operating system so that the operating system doesn't need to hard code details of the machine.

A device tree file, named *.dts, is a text file that describes the hardware platform. It is compiled into a device tree blob, *.dtb, which is loaded into memory before the Linux kernel is started. The Linux kernel then uses that device tree blob to initialize itself at runtime.

CM-T54 DT related files are :

  • arch/arm/boot/dts/omap5-cm-t54.dts - CM-T54 core CoM Device Tree
  • arch/arm/boot/dts/omap5-sbc-t54.dts - SBC-T54 single board computer (eval board) Device Tree

For more details visit official Device Tree WiKi pages and make an overview of a Device Tree tutorial

Building kernel for CM-T54

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 (recommended):
  • Tools for creating cross-compilers:
    • Crosstool-ng: Builds a cross-compiler from source. Non-distribution specific.
    • Crossdev: Gentoo's cross-compiler builder. Needs Gentoo.

Getting kernel sources

Kernel v4.0.5

There are various ways to get Linux kernel sources that can be used as a baseline for CM-T54 kernel. For instance, a copy of linux-stable git tree can be created or a Linux kernel sources snapshot can be downloaded.

Assuming that the /home/development/cm-t54/kernel directory structure has been created for CM-T54 kernel development.

Snapshot download
  • Download v4.0.5 snapshot with a web browser.
  • Extract the downloaded archive linux-4.0.5.tar.gz
cd /home/development/cm-t54/kernel
tar xvf /path/to/downloaded/linux-4.0.5.tar.gz
mv linux-4.0.5 linux-cm-t54
This will create /home/development/cm-t54/kernel/linux-cm-t54 directory containing linux kernel tree.
  • Apply the CM-T54 patch
cd /home/development/cm-t54/kernel/linux-cm-t54
patch -p1 < /path/to/cm-t54-linux/kernel/v4.0.5-cm-t54-5/linux-4.0.5-cm-t54-5.patch
Git clone
  • Install git version control system.
  • Create a clone of linux kernel tree
cd /home/development/cm-t54/kernel
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-cm-t54
  • Create a branch for CM-T54 development. The CM-T54 patches are generated vs. v4.0.5 tag (be4cb235441a691ee63ba5e00843a9c210be5b8a commit) in the Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts.
cd /home/development/cm-t54/kernel/linux-cm-t54
git checkout -b cm-t54-dev v4.0.5
  • Apply the CM-T54 patch
git apply /path/to/cm-t54-linux/kernel/v4.0.5-cm-t54-5/linux-4.0.5-cm-t54-5.patch


Admolition note.png Future stable kernel versions of 4.0 can also be used by adding the Linux kernel stable repository as a remote and checking out any later tag of the v4.0.y stable kernel branch.

Kernel v3.8.13

TI GLSDK kernel v3.8.13 for OMAP5 System-On-Chip is used as a baseline for CM-T54 Linux kernel. This kernel incorporate various IPU/GPU features support which are not available in the mainline Linux kernel. TI kernel repository is located at omapzoom.org. The sources of the kernel can be obtained by creating a copy of the git tree.

Assuming that the /home/development/cm-t54/kernel directory structure has been created for CM-T54 kernel development.

Git clone
  • Install git version control system.
  • Create a clone of linux kernel tree
cd /home/development/cm-t54/kernel
git clone git://git.omapzoom.org/kernel/omap.git linux-cm-t54
  • Create a branch for CM-T54 development. The CM-T54 patches are generated vs. commit 89927f5573872cada07d07c714e24a71ed6c29c3 in the OMAP5 GLSDK Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts.
cd /home/development/cm-t54/kernel/linux-cm-t54
git checkout -b cm-t54-dev 89927f5573872cada07d07c714e24a71ed6c29c3
  • Apply the CM-T54 patch
git apply /path/to/cm-t54-linux/kernel/v3.8.13-cm-t54-5/linux-3.8.13-cm-t54-5.patch

Building the kernel

export ARCH=arm
export CROSS_COMPILE=arm-none-linux-eabi-
make cm_t54_defconfig
make menuconfig
make && make zImage && make omap5-sbc-t54.dtb \
     INSTALL_MOD_PATH=/home/development/cm-t54/rootfs make modules_install

In the example above:

  • The Linux kernel image zImage will be created in /home/development/cm-t54/kernel/linux-cm-t54/arch/arm/boot
  • The Device Tree binary omap5-sbc-t54.dtb will be created in /home/development/cm-t54/kernel/linux-cm-t54/arch/arm/boot/dts
  • The loadable kernel modules will be installed into the /home/development/cm-t54/rootfs/lib/modules directory.

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

Building SGX DDK

OMAP5 SGX driver development kit (DDK) is a part of the official TI OMAP5 GLSDK 6.03.00.01.

SGX kernel driver (omapdrm_pvr) is required to support a hardware accelerated 2D graphics, 3D graphics, vector graphics, and programmable GPU functions.


Admolition note.png SGX kernel driver is compatible with kernel release based on v3.8.13 and user space libraries shipped with Arago Project Linux image.

The driver sources can be obtained by creating a copy of the git tree:

cd /home/development/cm-t54/
git clone git://git.ti.com/graphics/omap5-sgx-ddk-linux omap5-sgx-ddk-linux

Create a branch for CM-T54 development.

cd /home/development/cm-t54/omap5-sgx-ddk-linux
git checkout -b cm-t54-dev 7e084e0452bfaa495d2a9c06c7a420bac35d8d99

Set the environment variables

export ARCH=arm
export CROSS_COMPILE=arm-none-linux-eabi-
export KERNELDIR=/home/development/cm-t54/kernel/linux-cm-t54
export DISCIMAGE=/home/development/cm-t54/rootfs

Build and install the driver

cd /home/development/cm-t54/omap5-sgx-ddk-linux/eurasia_km/eurasiacon/build/linux2/omap5430_linux
make
sudo -E make kbuild_install

See also