CM-T54: Linux: Kernel
Contents
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
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.
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