Difference between revisions of "CM-T54: Linux: Kernel"
(→Git clone) |
(→Getting kernel sources) |
||
Line 3: | Line 3: | ||
Current support coverage is specified at [http://compulab.co.il/operating-systems-and-drivers-for-cm-t54-and-sbc-t54/ O/S support coverage map] page. | Current support coverage is specified at [http://compulab.co.il/operating-systems-and-drivers-for-cm-t54-and-sbc-t54/ 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. | 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 : | ||
+ | |||
+ | * {{filename | arch/arm/boot/dts/omap5-cm-t54.dts }} - CM-T54 core CoM Device Tree | ||
+ | * {{filename | arch/arm/boot/dts/omap5-sbc-t54.dts }} - SBC-T54 single board computer (eval board) Device Tree | ||
+ | |||
+ | For more details visit official [http://devicetree.org/Device_Tree_Usage Device Tree WiKi] pages and make an overview of a [http://events.linuxfoundation.org/sites/events/files/slides/petazzoni-device-tree-dummies.pdf Device Tree tutorial] | ||
== Building kernel for CM-T54 == | == Building kernel for CM-T54 == | ||
Line 14: | Line 27: | ||
=== Getting kernel sources === | === Getting kernel sources === | ||
− | + | 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 {{filename|/home/development/cm-t54/kernel}} directory structure has been created for CM-T54 kernel development. | ||
+ | |||
+ | ==== Snapshot download ==== | ||
+ | * Download [https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.2.tar.gz v3.16.2] snapshot with a web browser. | ||
+ | * Extract the downloaded archive {{filename|linux-3.16.2.tar.gz}} | ||
+ | <pre> | ||
+ | cd /home/development/cm-t54/kernel | ||
+ | tar xvf /path/to/downloaded/linux-3.16.2.tar.gz | ||
+ | mv linux-3.16.2 linux-cm-t54 | ||
+ | </pre> | ||
+ | : This will create {{filename|/home/development/cm-t54/kernel/linux-cm-t54}} directory containing linux kernel tree. | ||
+ | * Apply the CM-T54 patch | ||
+ | <pre> | ||
+ | cd /home/development/cm-t54/kernel/linux-cm-t54 | ||
+ | patch -p1 < /path/to/cm-t54-linux/kernel/linux-3.16.2-cm-t54-3.patch | ||
+ | </pre> | ||
==== Git clone ==== | ==== Git clone ==== | ||
Line 23: | Line 54: | ||
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-cm-t54 | git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-cm-t54 | ||
</pre> | </pre> | ||
− | * Create a branch for CM-T54 development. The CM-T54 patches are generated vs. v3. | + | * Create a branch for CM-T54 development. The CM-T54 patches are generated vs. v3.16.2 tag (62de88e8e65811010deac5375f8f0d8b14dc4d94 commit) in the Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts. |
<pre> | <pre> | ||
cd /home/development/cm-t54/kernel/linux-cm-t54 | cd /home/development/cm-t54/kernel/linux-cm-t54 | ||
− | git checkout -b cm-t54-dev v3. | + | git checkout -b cm-t54-dev v3.16.2 |
</pre> | </pre> | ||
* Apply the CM-T54 patch | * Apply the CM-T54 patch | ||
<pre> | <pre> | ||
− | git apply /path/to/cm-t54-linux/kernel/linux-3. | + | git apply /path/to/cm-t54-linux/kernel/linux-3.16.2-cm-t54-3.patch |
</pre> | </pre> | ||
− | {{Note|Future stable kernel versions of 3. | + | {{Note|Future stable kernel versions of 3.16 can also be used by checking out any later tag of the v3.16.y stable kernel branch.}} |
=== Building the kernel === | === Building the kernel === |
Revision as of 07:46, 17 September 2014
Contents
Overview
Linux kernel for CM-T54 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-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
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 v3.16.2 snapshot with a web browser.
- Extract the downloaded archive linux-3.16.2.tar.gz
cd /home/development/cm-t54/kernel tar xvf /path/to/downloaded/linux-3.16.2.tar.gz mv linux-3.16.2 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/linux-3.16.2-cm-t54-3.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. v3.16.2 tag (62de88e8e65811010deac5375f8f0d8b14dc4d94 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 v3.16.2
- Apply the CM-T54 patch
git apply /path/to/cm-t54-linux/kernel/linux-3.16.2-cm-t54-3.patch
Future stable kernel versions of 3.16 can also be used by checking out any later tag of the v3.16.y stable kernel branch. |
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.