Difference between revisions of "CL-SOM-iMX7: Linux: Kernel"

From Compulab Mediawiki
Jump to: navigation, search
(Basic platform support)
(NFS Boot Parameters)
Line 1: Line 1:
 
== Overview ==
 
== Overview ==
The Linux kernel for CL-SOM-iMX7 provides support for on-board peripherals/interfaces of CL-SOM-iMX7 system-on-module (SoM) and following derived devices built around the CL-SOM-iMX7 SoM:
+
The Linux kernel for CL-SOM-iMX7 provides support for on-board peripherals/interfaces of CL-SOM-iMX7 and UCM-iMX7 system-on-module devices (SoM) and following derived devices built around them:
 
* SBC-iMX7 Single Board Computer
 
* SBC-iMX7 Single Board Computer
 
* SBC-IOT-iMX7 Internet of Things Single Board Computer
 
* SBC-IOT-iMX7 Internet of Things Single Board Computer
 
* IOT-GATE-iMX7 Internet of Things Gateway
 
* IOT-GATE-iMX7 Internet of Things Gateway
 +
* SBC-UCM-iMX7 Single Board Computer
 
Though Linux packages released for different devices may differ from each other. It is recommended to use the most recent Linux package released for specific device used. It can be downloaded from the corresponding product web page:
 
Though Linux packages released for different devices may differ from each other. It is recommended to use the most recent Linux package released for specific device used. It can be downloaded from the corresponding product web page:
 
* SBC-iMX7 Single Board Computer [http://www.compulab.com/products/sbcs/sbc-imx7-freescale-i-mx-7-single-board-computer/#devres Linux package]
 
* SBC-iMX7 Single Board Computer [http://www.compulab.com/products/sbcs/sbc-imx7-freescale-i-mx-7-single-board-computer/#devres Linux package]
 
* SBC-IOT-iMX7 Internet of Things Single Board Computer [http://www.compulab.com/products/sbcs/sbc-iot-imx7-nxp-i-mx-7-internet-of-things-single-board-computer/#devres Linux package]
 
* SBC-IOT-iMX7 Internet of Things Single Board Computer [http://www.compulab.com/products/sbcs/sbc-iot-imx7-nxp-i-mx-7-internet-of-things-single-board-computer/#devres Linux package]
 
* IOT-GATE-iMX7 Internet of Things Gateway [http://www.compulab.com/products/iot-gateways/iot-gate-imx7-nxp-i-mx-7-internet-of-things-gateway/#devres Linux package]
 
* IOT-GATE-iMX7 Internet of Things Gateway [http://www.compulab.com/products/iot-gateways/iot-gate-imx7-nxp-i-mx-7-internet-of-things-gateway/#devres Linux package]
 +
* SBC-UCM-iMX7 Single Board Computer [http://www.compulab.com/products/computer-on-modules/ucm-imx7-nxp-i-mx-7-ultra-miniature-system-on-module/#devres Linux package]
 
Unzip the downloaded Linux package to a directory on your host workstation. The following discussion uses {{filename|/path/to/cl-som-imx7-linux/}} template for this location. Please use the real path to the Linux package instead.
 
Unzip the downloaded Linux package to a directory on your host workstation. The following discussion uses {{filename|/path/to/cl-som-imx7-linux/}} template for this location. Please use the real path to the Linux package instead.
  
Line 17: Line 19:
 
The instructions below assume that the {{filename|/home/development/cl-som-imx7/kernel}} directory has been created for CL-SOM-iMX7 kernel development.
 
The instructions below assume that the {{filename|/home/development/cl-som-imx7/kernel}} directory has been created for CL-SOM-iMX7 kernel development.
 
==== Snapshot download ====
 
==== Snapshot download ====
* Download [http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/snapshot/linux-2.6-imx-deb84cde0da96c5ccccb7e4c1204ad89ee801eca.tar.gz deb84cde0da96c5ccccb7e4c1204ad89ee801eca] snapshot with your web browser.
+
* Download [http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/snapshot/linux-2.6-imx-rel_imx_4.1.15_1.2.0_ga.tar.gz rel_imx_4.1.15_1.2.0_ga] snapshot with your web browser.
 
+
* Extract the downloaded archive {{filename|linux-2.6-imx-rel_imx_4.1.15_1.2.0_ga.tar.gz}}
* Extract the downloaded archive {{filename|linux-2.6-imx-deb84cde0da96c5ccccb7e4c1204ad89ee801eca.tar.gz}}
 
 
<pre>
 
<pre>
 
cd /home/development/cl-som-imx7/kernel
 
cd /home/development/cl-som-imx7/kernel
tar xpf /path/to/downloaded/linux-2.6-imx-deb84cde0da96c5ccccb7e4c1204ad89ee801eca.tar.gz
+
tar xpf /path/to/downloaded/linux-2.6-imx-rel_imx_4.1.15_1.2.0_ga.tar.gz
mv linux-2.6-imx-deb84cde0da96c5ccccb7e4c1204ad89ee801eca linux-cl-som-imx7
+
mv inux-2.6-imx-rel_imx_4.1.15_1.2.0_ga linux-cl-som-imx7
 
</pre>
 
</pre>
 
* Apply the CL-SOM-iMX7 patch
 
* Apply the CL-SOM-iMX7 patch
Line 38: Line 39:
 
git clone git://git.freescale.com/imx/linux-2.6-imx.git linux-cl-som-imx7
 
git clone git://git.freescale.com/imx/linux-2.6-imx.git linux-cl-som-imx7
 
</pre>
 
</pre>
* Create a branch for CL-SOM-iMX7 development. The CL-SOM-iMX7 patches are generated vs. deb84cde0da96c5ccccb7e4c1204ad89ee801eca commit in the Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts.  
+
* Create a branch for CL-SOM-iMX7 development. The CL-SOM-iMX7 patches are generated vs. [http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/commit/?id=77f61547834c4f127b44b13e43c59133a35880dc rel_imx_4.1.15_1.2.0_ga] tag in the Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts.  
 
<pre>
 
<pre>
 
cd /home/development/cl-som-imx7/kernel/linux-cl-som-imx7
 
cd /home/development/cl-som-imx7/kernel/linux-cl-som-imx7
git checkout -b development deb84cde0da96c5ccccb7e4c1204ad89ee801eca
+
git checkout -b development rel_imx_4.1.15_1.2.0_ga
 
</pre>
 
</pre>
 
* Apply the CL-SOM-iMX7 patch
 
* Apply the CL-SOM-iMX7 patch
Line 53: Line 54:
 
export ARCH=arm
 
export ARCH=arm
 
export CROSS_COMPILE=arm-none-linux-eabi-
 
export CROSS_COMPILE=arm-none-linux-eabi-
export DTB="imx7d-sbc-*imx7.dtb imx7d-cl-som-imx7.dtb"
+
export DTB="imx7d-*imx7*.dtb"
make cl_som_imx7_defconfig
+
make compulab_imx7_defconfig
 
make menuconfig
 
make menuconfig
 
make zImage modules ${DTB} && INSTALL_MOD_PATH=/home/development/cl-som-imx7/rootfs make modules_install
 
make zImage modules ${DTB} && INSTALL_MOD_PATH=/home/development/cl-som-imx7/rootfs make modules_install
Line 92: Line 93:
 
==== Prepare kernel and modules tarball  ====
 
==== Prepare kernel and modules tarball  ====
  
* In the example below, the Linux kernel and modules are packed into the tar archive for deploying onto the CL-SOM-iMX7.
+
* In the example below, the Linux kernel and modules are packed into the tar archive for deploying onto the CL-SOM-iMX7 internal storage eMMC.
 
<pre>
 
<pre>
 
# mkdir -p /home/development/cl-som-imx7/rootfs/boot
 
# mkdir -p /home/development/cl-som-imx7/rootfs/boot
Line 107: Line 108:
 
The extended interface support depends on carrier board used and thus is implemented in the Single Board Computer device tree files:
 
The extended interface support depends on carrier board used and thus is implemented in the Single Board Computer device tree files:
 
* {{filename|imx7d-sbc-imx7.dtb}} - for SBC-iMX7 Single Board Computer
 
* {{filename|imx7d-sbc-imx7.dtb}} - for SBC-iMX7 Single Board Computer
 +
** {{filename|imx7d-sbc-imx7-csi.dtb}} - for SBC-iMX7 Single Board Computer with MIPI CSI camera support
 +
** {{filename|imx7d-sbc-imx7-lvds.dtb}} - for SBC-iMX7 Single Board Computer with LVDS support
 +
** {{filename|imx7d-sbc-imx7-m4.dtb}} - for SBC-iMX7 Single Board Computer with Cortex-M4 core support
 
* {{filename|imx7d-sbc-iot-imx7.dtb}} - for IOT-GATE-iMX7 Internet of Things Gateway and SBC-IOT-iMX7 Internet of Things Single Board Computer
 
* {{filename|imx7d-sbc-iot-imx7.dtb}} - for IOT-GATE-iMX7 Internet of Things Gateway and SBC-IOT-iMX7 Internet of Things Single Board Computer
 
+
** {{filename|imx7d-sbc-iot-imx7-can.dtb}} - for IOT-GATE-iMX7 and SBC-IOT-iMX7 with CAN bus support
 +
The UCM-iMX7 basic platform support is implemented in the {{filename|imx7d-ucm-imx7.dtb}} file of the Linux kernel source tree.
 +
The extended interface support depends on carrier board used and thus is implemented in the Single Board Computer device tree files:
 +
* {{filename|imx7d-sbc-ucm-imx7.dtb}} - for SBC-UCM-iMX7 Single Board Computer
 
These files contain:
 
These files contain:
 
* default setup of multi-functional pins;
 
* default setup of multi-functional pins;
Line 114: Line 121:
 
* definitions of platform-specific configuration for these devices.
 
* definitions of platform-specific configuration for these devices.
  
== Deploying the CL-SOM-iMX7 kernel and modules ==
+
== Deploying the CL-SOM-iMX7 kernel and modules onto eMMC ==
  
 
* Boot up the CL-SOM-iMX7 computer.
 
* Boot up the CL-SOM-iMX7 computer.
Line 160: Line 167:
 
* For SBC-iMX7 type:
 
* For SBC-iMX7 type:
 
<pre>
 
<pre>
setenv fdt_file imx7d-sbc-imx7.dtb
+
setenv fdtfile imx7d-sbc-imx7.dtb
 
</pre>
 
</pre>
 
* For IOT-GATE-iMX7 and SBC-IOT-iMX7 type:
 
* For IOT-GATE-iMX7 and SBC-IOT-iMX7 type:
 
<pre>
 
<pre>
setenv fdt_file imx7d-sbc-iot-imx7.dtb
+
setenv fdtfile imx7d-sbc-iot-imx7.dtb
 +
</pre>
 +
* For SBC-UCM-iMX7 type:
 +
<pre>
 +
setenv fdtfile imx7d-sbc-ucm-imx7.dtb
 
</pre>
 
</pre>
  
Line 171: Line 182:
 
<pre>
 
<pre>
 
setenv loadaddr 0x80800000
 
setenv loadaddr 0x80800000
setenv fdt_addr 0x83000000
+
setenv fdtaddr 0x83000000
setenv image zImage
+
setenv kernel zImage
 
setenv bootargs console=ttymxc0,115200 root=/dev/${mmcblk} rw rootwait
 
setenv bootargs console=ttymxc0,115200 root=/dev/${mmcblk} rw rootwait
 
mmc dev ${mmcdev}
 
mmc dev ${mmcdev}
load mmc ${mmcdev} ${loadaddr} ${image}
+
load mmc ${mmcdev} ${loadaddr} ${kernel}
load mmc ${mmcdev} ${fdt_addr} ${fdt_file}
+
load mmc ${mmcdev} ${fdtaddr} ${fdtfile}
bootz ${loadaddr} - ${fdt_addr}
+
bootz ${loadaddr} - ${fdtaddr}
 
</pre>
 
</pre>
  
Line 185: Line 196:
 
dhcp
 
dhcp
 
setenv loadaddr 0x80800000
 
setenv loadaddr 0x80800000
setenv fdt_addr 0x83000000
+
setenv fdtaddr 0x83000000
setenv image zImage
+
setenv kernel zImage
 
setenv nfsserver <nfs server ip address>
 
setenv nfsserver <nfs server ip address>
 
setenv tftpserver <tftp server ip address>
 
setenv tftpserver <tftp server ip address>
 
setenv bootargs console=ttymxc0,115200 root=/dev/nfs rw ip=dhcp nfsroot=${nfsserver}:${nfsroot}
 
setenv bootargs console=ttymxc0,115200 root=/dev/nfs rw ip=dhcp nfsroot=${nfsserver}:${nfsroot}
tftpboot ${loadaddr} ${tftpserver}:${image}
+
tftpboot ${loadaddr} ${tftpserver}:${kernel}
tftpboot ${fdt_addr} ${tftpserver}:${fdt_file}
+
tftpboot ${fdtaddr} ${tftpserver}:${fdtfile}
bootz ${loadaddr} - ${fdt_addr}
+
bootz ${loadaddr} - ${fdtaddr}
 
</pre>
 
</pre>
 +
 +
=== NAND Boot Parameters ===
 +
{{:Transclusion: CL-SOM-iMX7: U-Boot: Boot from NAND}}
  
 
== See also ==
 
== See also ==

Revision as of 11:09, 22 August 2017

Overview

The Linux kernel for CL-SOM-iMX7 provides support for on-board peripherals/interfaces of CL-SOM-iMX7 and UCM-iMX7 system-on-module devices (SoM) and following derived devices built around them:

  • SBC-iMX7 Single Board Computer
  • SBC-IOT-iMX7 Internet of Things Single Board Computer
  • IOT-GATE-iMX7 Internet of Things Gateway
  • SBC-UCM-iMX7 Single Board Computer

Though Linux packages released for different devices may differ from each other. It is recommended to use the most recent Linux package released for specific device used. It can be downloaded from the corresponding product web page:

Unzip the downloaded Linux package to a directory on your host workstation. The following discussion uses /path/to/cl-som-imx7-linux/ template for this location. Please use the real path to the Linux package instead.

Building kernel for CL-SOM-iMX7

Getting kernel sources

Linux git tree can be cloned or downloaded as a tarball from Freescale public git repository. The instructions below assume that the /home/development/cl-som-imx7/kernel directory has been created for CL-SOM-iMX7 kernel development.

Snapshot download

  • Download rel_imx_4.1.15_1.2.0_ga snapshot with your web browser.
  • Extract the downloaded archive linux-2.6-imx-rel_imx_4.1.15_1.2.0_ga.tar.gz
cd /home/development/cl-som-imx7/kernel
tar xpf /path/to/downloaded/linux-2.6-imx-rel_imx_4.1.15_1.2.0_ga.tar.gz
mv inux-2.6-imx-rel_imx_4.1.15_1.2.0_ga linux-cl-som-imx7
  • Apply the CL-SOM-iMX7 patch
cd /home/development/cl-som-imx7/kernel/linux-cl-som-imx7
patch -p1 < /path/to/cl-som-imx7-linux/kernel/linux-4.1.15-cl-som-imx7-*.patch

Git clone

  • Install git version control system.
  • Create a clone of the FreeScale Linux kernel tree
cd /home/development/cl-som-imx7/kernel
git clone git://git.freescale.com/imx/linux-2.6-imx.git linux-cl-som-imx7
  • Create a branch for CL-SOM-iMX7 development. The CL-SOM-iMX7 patches are generated vs. rel_imx_4.1.15_1.2.0_ga tag in the Linux tree. It is recommended to use exactly the same baseline to avoid merge conflicts.
cd /home/development/cl-som-imx7/kernel/linux-cl-som-imx7
git checkout -b development rel_imx_4.1.15_1.2.0_ga
  • Apply the CL-SOM-iMX7 patch
git am /path/to/cl-som-imx7-linux/kernel/patches/*.patch

Building the kernel

cd /home/development/cl-som-imx7/kernel/linux-cl-som-imx7
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-eabi-
export DTB="imx7d-*imx7*.dtb"
make compulab_imx7_defconfig
make menuconfig
make zImage modules ${DTB} && INSTALL_MOD_PATH=/home/development/cl-som-imx7/rootfs make modules_install

In the example above:

  • Linux kernel image (zImage) will be created in /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/arch/arm/boot
  • device tree blobs will be created in /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/arch/arm/boot/dts
  • loadable kernel modules will be installed into the /home/development/cl-som-imx7/rootfs/lib/modules directory.


When the CL-SOM-iMX7 is booted with the kernel image created as described above and with networked root filesystem at /home/development/cl-som-imx7/rootfs/, the system will be able to load the kernel modules properly, thus avoiding module version problems.

zImage, DTB files and modules locations

  • In the example above, the Linux kernel image (zImage) will be created in the /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/arch/arm/boot directory.
# ls -al /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/arch/arm/boot/zImage
  • DTB files
# cd /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/arch/arm/boot/dts/
# ls -al ${DTB}
# cd -
  • The loadable kernel modules will be installed into the /home/development/cl-som-imx7/rootfs/lib/modules directory.
# ls -al /home/development/cl-som-imx7/rootfs/lib/modules

Kernel Version

  • In the example above, the Linux kernel release version number will be saved in /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/include/config/kernel.release
# cat /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/include/config/kernel.release

Prepare kernel and modules tarball

  • In the example below, the Linux kernel and modules are packed into the tar archive for deploying onto the CL-SOM-iMX7 internal storage eMMC.
# mkdir -p /home/development/cl-som-imx7/rootfs/boot
# cp -v /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/arch/arm/boot/zImage /home/development/cl-som-imx7/rootfs/boot/
# cd /home/development/cl-som-imx7/kernel/linux-cl-som-imx7/arch/arm/boot/dts/
# cp -v ${DTB} /home/development/cl-som-imx7/rootfs/boot/ 
# cd -
# tar -C /home/development/cl-som-imx7/rootfs -czvf /home/development/cl-som-imx7/linux-image-cl-som-imx7.tar.gz .

Basic platform support

The CL-SOM-iMX7 basic platform support is implemented in the imx7d-cl-som-imx7.dtb file of the Linux kernel source tree. The extended interface support depends on carrier board used and thus is implemented in the Single Board Computer device tree files:

  • imx7d-sbc-imx7.dtb - for SBC-iMX7 Single Board Computer
    • imx7d-sbc-imx7-csi.dtb - for SBC-iMX7 Single Board Computer with MIPI CSI camera support
    • imx7d-sbc-imx7-lvds.dtb - for SBC-iMX7 Single Board Computer with LVDS support
    • imx7d-sbc-imx7-m4.dtb - for SBC-iMX7 Single Board Computer with Cortex-M4 core support
  • imx7d-sbc-iot-imx7.dtb - for IOT-GATE-iMX7 Internet of Things Gateway and SBC-IOT-iMX7 Internet of Things Single Board Computer
    • imx7d-sbc-iot-imx7-can.dtb - for IOT-GATE-iMX7 and SBC-IOT-iMX7 with CAN bus support

The UCM-iMX7 basic platform support is implemented in the imx7d-ucm-imx7.dtb file of the Linux kernel source tree. The extended interface support depends on carrier board used and thus is implemented in the Single Board Computer device tree files:

  • imx7d-sbc-ucm-imx7.dtb - for SBC-UCM-iMX7 Single Board Computer

These files contain:

  • default setup of multi-functional pins;
  • registration of the devices integrated in the CL-SOM-iMX7 module;
  • definitions of platform-specific configuration for these devices.

Deploying the CL-SOM-iMX7 kernel and modules onto eMMC

  • Boot up the CL-SOM-iMX7 computer.
  • Copy the previously created linux-image-cl-som-imx7.tar.gz to /root directory of the CL-SOM-iMX7.

Mount boot partition

  • Use the below command to mount the boot partition for installing the CL-SOM-iMX7 Linux kernel binary:
# boot_partition=`cat /proc/cmdline | awk '{ for (i=1;i<=NF;i++) { if($i~/^root=/) { print substr($i,6,length($i)-6)"1" } } }'`
# mount $boot_partition /boot

Back up old kernel

  • It is essential to backup the old (known to work) kernel binary.
# mkdir /boot/`uname -r`
# mv /boot/zImage* /boot/*.dtb /boot/`uname -r`/

Installing kernel and modules

Assuming that the linux-image-cl-som-imx7.tar.gz tar ball has been copied to the CL-SOM-iMX7 /root directory.

  • Extract and install the Linux kernel binary:
# tar -C / -xvf /root/linux-image-cl-som-imx7.tar.gz

U-Boot Environment

MMC Boot Parameters

To boot from MMC/SD card type:

setenv mmcdev 0
setenv mmcblk mmcblk0p2

Continue to the Common Boot Parameters.

eMMC Boot Parameters

To boot from internal eMMC storage type:

setenv mmcdev 2
setenv mmcblk mmcblk2p2

Continue to the Common Boot Parameters.

Device Tree Blob

  • For SBC-iMX7 type:
setenv fdtfile imx7d-sbc-imx7.dtb
  • For IOT-GATE-iMX7 and SBC-IOT-iMX7 type:
setenv fdtfile imx7d-sbc-iot-imx7.dtb
  • For SBC-UCM-iMX7 type:
setenv fdtfile imx7d-sbc-ucm-imx7.dtb

Common Boot Parameters

To boot Linux type:

setenv loadaddr 0x80800000
setenv fdtaddr 0x83000000
setenv kernel zImage
setenv bootargs console=ttymxc0,115200 root=/dev/${mmcblk} rw rootwait
mmc dev ${mmcdev}
load mmc ${mmcdev} ${loadaddr} ${kernel}
load mmc ${mmcdev} ${fdtaddr} ${fdtfile}
bootz ${loadaddr} - ${fdtaddr}

NFS Boot Parameters

To boot via network interface type:

dhcp
setenv loadaddr 0x80800000
setenv fdtaddr 0x83000000
setenv kernel zImage
setenv nfsserver <nfs server ip address>
setenv tftpserver <tftp server ip address>
setenv bootargs console=ttymxc0,115200 root=/dev/nfs rw ip=dhcp nfsroot=${nfsserver}:${nfsroot}
tftpboot ${loadaddr} ${tftpserver}:${kernel}
tftpboot ${fdtaddr} ${tftpserver}:${fdtfile}
bootz ${loadaddr} - ${fdtaddr}

NAND Boot Parameters

  • Use the following U-Boot command to configure NAND as the main storage for both Linux kernel and root filesystem images:
setenv bootcmd 'run nandboot'
  • To save this configuration:
saveenv
  • To boot Linux type:
run bootcmd

See also