Difference between revisions of "CM-T3530: Linux: Kernel"
(→Building the kernel) |
(→Git clone) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== Overview == | == Overview == | ||
− | Linux kernel for CM-T3530 modules provides support for on-board peripherals and abstracts the functionality provided by the hardware. Current support coverage is specified at [http:// | + | Linux kernel for CM-T3530 modules provides support for on-board peripherals and abstracts the functionality provided by the hardware. |
+ | Current support coverage is specified at [http://compulab.co.il/products/availability-of-os-and-drivers-for-cm-t3530-sbc-t3530/ 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-T3530 modules. | ||
Most of the CM-T3530 functionality is merged into the mainline kernel starting from 2.6.33 release. | Most of the CM-T3530 functionality is merged into the mainline kernel starting from 2.6.33 release. | ||
== Kernel command line == | == Kernel command line == | ||
The Linux kernel for CM-T3530 is shipped with built-in command line parameters: | The Linux kernel for CM-T3530 is shipped with built-in command line parameters: | ||
− | + | <pre> | |
− | + | root=/dev/mmcblk0p2 rootwait console=ttyO2,115200 omapfb.mode=dvi:1024x768-24@60 omapfb.vram=1:4M vram=8M | |
+ | </pre> | ||
− | The default kernel command line defines primary console, default display settings, root device and root filesystem type. | + | The default kernel command line defines primary console, default display settings, root device and root filesystem type.<br> |
+ | Setting U-Boot {{parameter|bootargs}} environment variable overrides default kernel command line and can be used to set desired kernel parameters. | ||
− | + | {{Note|If the MMC/SD Card is used as your root filesystem device, Linux kernel command line must have the following parameter appended: {{parameter|mmc_core.removable=0}} }} | |
== Building kernel for CM-T3530 == | == Building kernel for CM-T3530 == | ||
=== Cross-Compiler === | === 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 ("[http://en.wikipedia.org/wiki/Application_binary_interface#EABI EABI]") | 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 ("[http://en.wikipedia.org/wiki/Application_binary_interface#EABI EABI]") | ||
− | * Pre-built toolchain: | + | * Pre-built toolchain (recommended): |
− | ** [http://www. | + | ** [http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ Sourcery CodeBench Lite] |
* Tools for creating cross-compilers: | * Tools for creating cross-compilers: | ||
− | ** [http:// | + | ** [http://crosstool-ng.org/ Crosstool-ng]: Builds a cross-compiler from source. Non-distribution specific. |
** [http://www.gentoo.org/proj/en/base/embedded/handbook/index.xml?part=1&chap=4 Crossdev]: Gentoo's cross-compiler builder. Needs Gentoo. | ** [http://www.gentoo.org/proj/en/base/embedded/handbook/index.xml?part=1&chap=4 Crossdev]: Gentoo's cross-compiler builder. Needs Gentoo. | ||
Line 29: | Line 33: | ||
wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 | wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 | ||
tar -xjvf u-boot-latest.tar.bz2 | tar -xjvf u-boot-latest.tar.bz2 | ||
− | cd u-boot- | + | cd u-boot-<version> |
touch include/config.{h,mk} | touch include/config.{h,mk} | ||
make tools | make tools | ||
Line 36: | Line 40: | ||
=== Getting kernel sources === | === Getting kernel sources === | ||
− | There are two ways to get Linux kernel sources that can be used as a baseline for CM-T3530 kernel. You can create a copy of linux- | + | There are two ways to get Linux kernel sources that can be used as a baseline for CM-T3530 kernel. You can create a copy of linux-stable git tree or download a snapshot and extract it. We assume that you have created {{filename|/home/development/cm-t3530/kernel}} directory for CM-T3530 kernel development. |
==== Snapshot download ==== | ==== Snapshot download ==== | ||
− | * Download [http:// | + | * Download [http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.87.tar.bz2 v3.0.87] snapshot with your web browser. |
− | * Extract the downloaded archive {{filename|linux- | + | * Extract the downloaded archive {{filename|linux-3.0.87.tar.bz2}} |
<pre> | <pre> | ||
− | cd /home/development/cm- | + | cd /home/development/cm-t3530/kernel |
− | tar | + | tar xvf /path/to/downloaded/linux-3.0.87.tar.bz2 |
+ | mv linux-3.0.87 linux-cm-t3530 | ||
</pre> | </pre> | ||
− | : This will create {{filename|/home/development/cm- | + | : This will create {{filename|/home/development/cm-t3530/kernel/linux-cm-t3530}} directory containing linux kernel tree. |
* Apply the CM-T3530 patch | * Apply the CM-T3530 patch | ||
<pre> | <pre> | ||
− | cd /home/development/cm- | + | cd /home/development/cm-t3530/kernel/linux-cm-t3530 |
− | patch -p1 < /path/to/t3530-linux/kernel/linux- | + | patch -p1 < /path/to/cm-t3530-linux/kernel/linux-3.0.87-cm-t35-4.patch |
</pre> | </pre> | ||
==== Git clone ==== | ==== Git clone ==== | ||
* Install [http://git-scm.com/ git] version control system. | * Install [http://git-scm.com/ git] version control system. | ||
− | * Create a clone of linux | + | * Create a clone of linux kernel tree |
<pre> | <pre> | ||
− | cd /home/development/cm- | + | cd /home/development/cm-t3530/kernel |
− | git clone git://git.kernel.org/pub/scm/linux/kernel/git/ | + | git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-cm-t3530 |
</pre> | </pre> | ||
− | * Create a branch for CM-T3530 development. The CM-T3530 patches are generated vs. commit | + | * Create a branch for CM-T3530 development. The CM-T3530 patches are generated vs. v3.0.87 tag (61bfa77de71ef9d84614d3a7f0a3ca1c7af82058 commit) in the Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts. |
<pre> | <pre> | ||
− | git checkout -b cm- | + | git checkout -b cm-t3530-dev v3.0.87 |
</pre> | </pre> | ||
* Apply the CM-T3530 patch | * Apply the CM-T3530 patch | ||
<pre> | <pre> | ||
− | cd /home/development/cm- | + | cd /home/development/cm-t3530/kernel/linux-cm-t3530 |
− | git apply /path/to/t3530-linux/kernel/linux- | + | git apply /path/to/cm-t3530-linux/kernel/linux-3.0.87-cm-t35-4.patch |
</pre> | </pre> | ||
+ | |||
+ | {{Note|Future stable kernel versions of 3.0 can also be used by checking out any later tag of v3.0.y stable kernel tree and applying the {{filename|linux-3.0.87-cm-t35-4.patch}}.}} | ||
=== Building the kernel === | === Building the kernel === | ||
Line 72: | Line 79: | ||
export ARCH=arm | export ARCH=arm | ||
export CROSS_COMPILE=arm-none-linux-eabi- | export CROSS_COMPILE=arm-none-linux-eabi- | ||
− | make | + | make cm_t3x30_defconfig |
make menuconfig | make menuconfig | ||
make && make uImage && \ | make && make uImage && \ | ||
− | INSTALL_MOD_PATH=/home/development/cm- | + | INSTALL_MOD_PATH=/home/development/cm-t3530/rootfs make modules_install |
</pre> | </pre> | ||
− | In the example above, the Linux kernel image ({{filename|uImage}}) will be created in {{filename|/home/development/cm- | + | In the example above, the Linux kernel image ({{filename|uImage}}) will be created in {{filename|/home/development/cm-t3530/kernel/linux-cm-t3530/arch/arm/boot}}, and the loadable kernel modules will be installed into the {{filename|/home/development/cm-t3530/rootfs/lib/modules}} directory.<br> |
− | + | When the CM-T3530 is booted with the kernel image created as described above and with networked root filesystem at {{filename|/home/development/cm-t3530/rootfs/}}, the system will be able to load the kernel modules properly, thus avoiding module version problems. | |
− | |||
− | |||
− | |||
− | |||
== See also == | == See also == | ||
* [[CM-T3530: Linux: Getting started]] | * [[CM-T3530: Linux: Getting started]] | ||
* [[CM-T3530: Linux: Angstrom]] | * [[CM-T3530: Linux: Angstrom]] | ||
− | * [[CM- | + | * [[CM-T3730: Linux: Camera]] |
* [[U-Boot for CM-T3530]] | * [[U-Boot for CM-T3530]] | ||
[[Category:Linux]] | [[Category:Linux]] | ||
[[Category:CM-T3530]] | [[Category:CM-T3530]] |
Latest revision as of 13:07, 28 October 2013
Contents
Overview
Linux kernel for CM-T3530 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-T3530 modules. Most of the CM-T3530 functionality is merged into the mainline kernel starting from 2.6.33 release.
Kernel command line
The Linux kernel for CM-T3530 is shipped with built-in command line parameters:
root=/dev/mmcblk0p2 rootwait console=ttyO2,115200 omapfb.mode=dvi:1024x768-24@60 omapfb.vram=1:4M vram=8M
The default kernel command line defines primary console, default display settings, root device and root filesystem type.
Setting U-Boot bootargs environment variable overrides default kernel command line and can be used to set desired kernel parameters.
If the MMC/SD Card is used as your root filesystem device, Linux kernel command line must have the following parameter appended: mmc_core.removable=0 |
Building kernel for CM-T3530
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.
U-Boot mkimage tool
U-Boot mkimage utility is required in order to create kernel images that can be loaded by the CM-T3530 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-<version> 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-T3530 kernel. You can create a copy of linux-stable git tree or download a snapshot and extract it. We assume that you have created /home/development/cm-t3530/kernel directory for CM-T3530 kernel development.
Snapshot download
- Download v3.0.87 snapshot with your web browser.
- Extract the downloaded archive linux-3.0.87.tar.bz2
cd /home/development/cm-t3530/kernel tar xvf /path/to/downloaded/linux-3.0.87.tar.bz2 mv linux-3.0.87 linux-cm-t3530
- This will create /home/development/cm-t3530/kernel/linux-cm-t3530 directory containing linux kernel tree.
- Apply the CM-T3530 patch
cd /home/development/cm-t3530/kernel/linux-cm-t3530 patch -p1 < /path/to/cm-t3530-linux/kernel/linux-3.0.87-cm-t35-4.patch
Git clone
- Install git version control system.
- Create a clone of linux kernel tree
cd /home/development/cm-t3530/kernel git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-cm-t3530
- Create a branch for CM-T3530 development. The CM-T3530 patches are generated vs. v3.0.87 tag (61bfa77de71ef9d84614d3a7f0a3ca1c7af82058 commit) in the Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts.
git checkout -b cm-t3530-dev v3.0.87
- Apply the CM-T3530 patch
cd /home/development/cm-t3530/kernel/linux-cm-t3530 git apply /path/to/cm-t3530-linux/kernel/linux-3.0.87-cm-t35-4.patch
Future stable kernel versions of 3.0 can also be used by checking out any later tag of v3.0.y stable kernel tree and applying the linux-3.0.87-cm-t35-4.patch. |
Building the kernel
export ARCH=arm export CROSS_COMPILE=arm-none-linux-eabi- make cm_t3x30_defconfig make menuconfig make && make uImage && \ INSTALL_MOD_PATH=/home/development/cm-t3530/rootfs make modules_install
In the example above, the Linux kernel image (uImage) will be created in /home/development/cm-t3530/kernel/linux-cm-t3530/arch/arm/boot, and the loadable kernel modules will be installed into the /home/development/cm-t3530/rootfs/lib/modules directory.
When the CM-T3530 is booted with the kernel image created as described above and with networked root filesystem at /home/development/cm-t3530/rootfs/, the system will be able to load the kernel modules properly, thus avoiding module version problems.