Difference between revisions of "Linux Kernel 4.9.y"

From IGEP - ISEE Wiki

Jump to: navigation, search
(38 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[File:245px-Tux.svg.png|right]]
+
[[File:245px-Tux.svg.png|right|167x197px]] 
  
 
=What is Linux?=
 
=What is Linux?=
Linux is a clone of the operating system Unix, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX and Single UNIX Specification compliance.
+
Linux is the result of merging the computational Kernel made by Linux Torval and the scheme present in any Unix operative system, Kernel was written from scratch by Linus and a loosely-knit team of hackers across the Net. It aims towards POSIX standard and Single UNIX Specification compliance.
  
 
It has all the features you would expect in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6.
 
It has all the features you would expect in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6.
  
 
Although originally developed first for 32-bit x86-based PCs (386 or higher), today Linux also runs on a multitude of other processor architectures, in both 32- and 64-bit variants.
 
Although originally developed first for 32-bit x86-based PCs (386 or higher), today Linux also runs on a multitude of other processor architectures, in both 32- and 64-bit variants.
 
 
  
 
=<span id="Introduction" class="mw-headline">Introduction</span>=
 
=<span id="Introduction" class="mw-headline">Introduction</span>=
 
<span style="color: #000000;">In order to build the Linux Kernel for IGEP PROCESSOR BOARDS it is recommended to cross-compile the kernel, that means to build the kernel in your HOST machine for a target architecture.</span>
 
<span style="color: #000000;">In order to build the Linux Kernel for IGEP PROCESSOR BOARDS it is recommended to cross-compile the kernel, that means to build the kernel in your HOST machine for a target architecture.</span>
  
To [index.php/Ubuntu_16.04_LTS_Toolchain setup the cross-compiling] there are two fundamental variables that the kernel uses to select the target architecture. Normally these values are guessed based on your build environment, but of course that environment here does not match our target embedded system, so we'll need to override them. The variables in question are:
+
To [[Ubuntu 16.04 LTS Toolchain|Ubuntu_16.04]] there are two fundamental variables that the kernel uses to select the target architecture. Normally these values are guessed based on your build environment, but of course that environment here does not match our target embedded system, so we'll need to override them. The variables in question are:
  
 
* <u>''' ARCH'''</u>''':''' The ARCH variable is the architecture you're targeting as the kernel knows it. For IGEP PROCESSOR BOARDS you'll set to "arm" architecture.
 
* <u>''' ARCH'''</u>''':''' The ARCH variable is the architecture you're targeting as the kernel knows it. For IGEP PROCESSOR BOARDS you'll set to "arm" architecture.
Line 28: Line 26:
 
# Compile the Kernel Image, Device Tree and Modules of that configuration.
 
# Compile the Kernel Image, Device Tree and Modules of that configuration.
  
=<span id="How_to_cross_compile_the_linux_kernel" class="mw-headline">Prepare the environment<br data-attributes="%20/"></span>=
+
=<span id="How_to_cross_compile_the_linux_kernel" class="mw-headline">Prepare the environment<br/></span>=
<span class="mw-headline">In order to compile the Linux Kernel it is necessary to prepare a suitable work environment by checking the compiler and its version are the corresponding. </span>
+
{{Message/Information Message|message=The following steps has been tested using '''Ubuntu 16.04''' and the '''4.9 version''' of the '''arm-linux-'''<span class="mw-headline">'''gnueabihf''' compiler</span>}}
  
 +
First we have to set up the Cross Compiler correctly if it is necessary. In this [[Set Up the Cross Compiler|post]] there are some steps that can be followed in order to do it.
  
<span class="mw-headline">{{ Message/Information Message }}</span>
+
<span class="mw-headline">If it is necessary we can install this extra packages that could be necessaries: </span>
  
<span class="mw-headline">If we want to install a particular compiler, for example the 4.9 we can use the following commands to install it:<code></code></span>
+
<span class="mw-headline">sudo apt-get install libc6-armel-cross libc6-armhf-cross libc6-dev-armel-cross libncurses5-dev<br><br>sudo apt-get install lzop<br></span>
 +
<span class="mw-headline">The next step is to clone the corresponding git repository. There are different git repositories depending on the model of the processor of the board. The following table shows the steps for each of the <span style="color: #000000;">IGEP PROCESSOR BOARDS</span>:<br data-attributes="%20/"></span>
  
<span class="mw-headline">sudo apt-get install g++-4.9-arm-linux-gnueabihf<br data-attributes="%20/">sudo apt-get install cpp-4.9-arm-linux-gnueabihf<br data-attributes="%20/">sudo apt-get install gcc-4.9-arm-linux-gnueabihf<br data-attributes="%20/">sudo apt-get install gcc-4.9-arm-linux-gnueabihf-base<code></code></span>
+
{| class="contenttable sortable" style="width: 890px;"
<span class="mw-headline">We can change between compilers using the following commands:</span>
+
|-
 
+
! style="width: 97px;"|PROCESSOR
<span class="mw-headline">sudo update-alternatives --set arm-linux-gnueabihf-g++ "/usr/bin/arm-linux-gnueabihf-g++-4.9"<br data-attributes="%20/">sudo update-alternatives --set arm-linux-gnueabihf-cpp "/usr/bin/arm-linux-gnueabihf-cpp-4.9"<br data-attributes="%20/">sudo update-alternatives --set arm-linux-gnueabihf-gcc-ar "/usr/bin/arm-linux-gnueabihf-gcc-ar-4.9"<br data-attributes="%20/">sudo update-alternatives --set arm-linux-gnueabihf-gcc-nm "/usr/bin/arm-linux-gnueabihf-gcc-nm-4.9"<br data-attributes="%20/">sudo update-alternatives --set arm-linux-gnueabihf-gcc-ranlib "/usr/bin/arm-linux-gnueabihf-gcc-ranlib-4.9"<br data-attributes="%20/">sudo update-alternatives --set arm-linux-gnueabihf-gcov "/usr/bin/arm-linux-gnueabihf-gcov-4.9"</span>
+
! style="width: 324.217px;"|GIT REPOSITORY
<span class="mw-headline">In addition we can install this extra packages that could be necessaries: </span>
+
! style="width: 275.783px;"|BRANCH
 
 
<span class="mw-headline">sudo apt-get install libc6-armel-cross libc6-armhf-cross libc6-dev-armel-cross libc6-dev-armhf-crossbinutils-arm-linux-gnueabihf libncurses5-dev</span>
 
 
 
=<span id="How_to_cross_compile_the_linux_kernel" class="mw-headline">How to cross compile the linux kernel</span>=
 
<span style="color: #000000;">&nbsp;</span>
 
 
 
Para dar soporte a una nueva board basada en imx en el kernel es necesario tener un fichero de configuracion defconfig (.config) y&nbsp; una dtb.
 
 
 
Por defecto empezaremos con un defconfig ya creado por igep para procesadores imx
 
 
 
<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div id="highlighter_162759" class="syntaxhighlighter sh-confluence nogutter  java">
 
{| cellspacing="0" cellpadding="0" border="0"
 
 
|-
 
|-
| class="code"|<div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="java plain">imx6_igep0046_defconfig</code>
+
| style="width: 97px;"|DM3730
 
+
| style="width: 324.217px;"|https://git.isee.biz/linux-kernel/linux-omap-2.6.git
</div>
+
| style="width: 275.783px;"|isee-linux-v.4.9.y
</div>
 
|}</div>
 
</div>
 
</div>
 
Para que el kernel compile la dtb es necesario tener una dts con la configuración de los periféricos y los drivers que los gestionan,ademas de una anidación al dtsi del procesador correspondiente ( en este caso imx6 ya sea quad, dual, solo ...)
 
 
 
En el caso de igep con procesadores imx
 
 
 
<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div id="highlighter_265765" class="syntaxhighlighter sh-confluence nogutter  java">
 
{| cellspacing="0" cellpadding="0" border="0"
 
 
|-
 
|-
| class="code"|<div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="java plain">DUAL</code>
+
| style="width: 97px;"|AM335X
 
+
| style="width: 324.217px;"|https://git.isee.biz/linux-kernel/linux-omap-2.6.git
 
+
| style="width: 275.783px;"|isee-linux-v.4.9.y
<div class="line number2 index1 alt1"><code class="java plain">imx6dl-igep-base0040ra1.dts</code></div>
 
<div class="line number3 index2 alt2"><code class="java plain">imx6dl-igep-base0040rc2.dts</code></div>
 
<div class="line number4 index3 alt1"><code class="java plain">imx6dl-igep-base0040rd102.dts</code></div>
 
<div class="line number5 index4 alt2">&nbsp;</div>
 
<div class="line number6 index5 alt1"><code class="java plain">QUAD</code></div>
 
<div class="line number7 index6 alt2"><code class="java plain">imx6q-igep-base0040ra1.dts</code></div>
 
<div class="line number8 index7 alt1"><code class="java plain">imx6q-igep-base0040rc2.dts</code></div>
 
<div class="line number9 index8 alt2"><code class="java plain">imx6q-igep-base0040rd102.dts</code></div>
 
<div class="line number10 index9 alt1">&nbsp;</div>
 
<div class="line number11 index10 alt2"><code class="java plain">GENERICA</code></div>
 
<div class="line number12 index11 alt1"><code class="java plain">imx6qdl-igep-base0040ra.dtsi</code></div>
 
<div class="line number13 index12 alt2"><code class="java plain">imx6qdl-igep-base0040rb.dtsi</code></div>
 
<div class="line number14 index13 alt1"><code class="java plain">imx6qdl-igep-igep0046ra.dtsi</code></div>
 
<div class="line number15 index14 alt2"><code class="java plain">imx6qdl-igep-igep0046rc.dtsi</code></div>
 
</div>
 
</div>
 
|}</div>
 
</div>
 
</div>
 
Las DTS están anidadas, esto quiere decir que se cogerá la dtb generada a partir de la .dts dependiendo del procesador que monte igep en este caso.
 
 
 
Para que el kernel compile las .dts en dtb se ha de añadir en el Makefile de arch/arm/boot/dts/
 
 
 
<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div id="highlighter_599857" class="syntaxhighlighter sh-confluence nogutter  java">
 
{| cellspacing="0" cellpadding="0" border="0"
 
 
|-
 
|-
| class="code"|<div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="java plain">(dentro de dtb-$(CONFIG_SOC_IMX6Q) += \)</code>
+
| style="width: 97px;"|iMX6
 +
| style="width: 324.217px;"|https://git.isee.biz/linux-kernel/linux-imx.git
 +
| style="width: 275.783px;"|
 +
isee-imx_4.9.11_1.0.0_ga
  
 +
|}
  
<div class="line number2 index1 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;</code><code class="java plain">imx6dl-igep-base0040rc2.dtb \</code></div>
+
To get to desired branch we will use:
<div class="line number3 index2 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">imx6dl-igep-base0040rd102.dtb \</code></div>
 
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">imx6q-igep-base0040rc2.dtb \</code></div>
 
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">imx6q-igep-base0040rd102.dtb \</code></div>
 
</div>
 
</div>
 
|}</div>
 
</div>
 
</div>
 
=<span id="Setup_IGEP_SDK_Yocto_Toolchain_1.2.2-3" class="mw-headline">Setup IGEP SDK</span><span id="Setup_IGEP_SDK_Yocto_Toolchain_1.2.2-3" class="mw-headline" style="color: #808080;"> Yocto Toolchain 1.2.2-3</span>=
 
==<span id="Install" class="mw-headline">Install</span>==
 
<span style="color: #000000;">Download -&nbsp;[http://www.isee.biz/support/downloads/item/igep-sdk-yocto-toolchain-1-2-2-3 isee.biz]</span>
 
  
<span style="color: #000000;">follow the next steps:</span>
+
git checkout [your_branch]
  
* <span style="color: #000000;">Open a terminal</span>
+
=<span id="How_to_cross_compile_the_linux_kernel" class="mw-headline">Compile the Linux Kernel<br data-attributes="%20/"></span>=
* <span style="color: #000000;">Located your downloaded file, in my case is inside /home/jdoe/Downloads:</span>
+
<span style="color: #000000;">Once the development environment has been correctly set up, the following steps can be followed in order to compile the Linux Kernel using a Cross Compiler.<br data-attributes="%20/"></span>
  
<pre><span style="color: #000000;">jdoe@ubuntu ~ $ cd Downloads/</span></pre>
+
<span style="color: #000000;">First of all, the default configuration ''(defconfig)'' has to be loaded. It can be done by writing the following command:</span>
* <span style="color: #000000;">Extract binaries in root directory with root privileges</span>
 
  
<pre><span style="color: #000000;">jdoe@ubuntu ~/Downloads $ sudo tar jxf igep-sdk-yocto-toolchain-*.tar.bz2 -C /</span></pre>
+
<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- [your_defconfig]</code></span>
* <span style="color: #000000;">Make sure that binaries are installed correctly.</span>
+
In the following table it can be found the name of each default configuration associated to each IGEP PROCESSORS BOARDS:
  
<pre><span style="color: #808080;"><span style="color: #000000;">jdoe@ubuntu ~/Downloads $ ls /opt/poky/
+
{| class="contenttable sortable" style="width: 888px;"
1.2  1.2.1</span> </span></pre>
+
|-
==<span id="Configure" class="mw-headline" style="color: #000000;">Configure</span>==
+
! style="width: 160px;"|BOARD
<span style="color: #000000;">Open a terminal and type:</span>
+
! style="width: 163px;"|DEFCONFIG
 
+
! style="width: 527px;"|EXAMPLE
<pre><span style="color: #000000;"> export PATH=/opt/poky/1.2/sysroots/i686-pokysdk-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi:$PATH  </span></pre>
+
|-
=<span id="Compiled_binaries" class="mw-headline" style="color: #000000;">Compiled binaries</span>=
+
| style="width: 160px;"|IGEPv5 OMAP5432
<span class="mw-headline" style="color: #808080;">Binaries: latest stable kernel version IGEP OMAP3 devices is:&nbsp;'''2.6.37-12 (20161206)'''</span>
+
| style="width: 163px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/configs/omap2plus_defconfig omap2plus_defconfig]
 
+
| style="width: 527px;"|<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig  <br /></code></span>
{| border="1"
+
|-
 +
| style="width: 160px;"|IGEPv2 DM3730
 +
| style="width: 163px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/configs/omap2plus_defconfig omap2plus_defconfig]
 +
| style="width: 527px;"|<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig</code></span>
 +
|-
 +
| style="width: 160px;"|IGEP COM AQUILA AM335x
 +
| style="width: 163px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/configs/am335x_igep0034_defconfig am335x_igep0034_defconfig]
 +
| style="width: 527px;"|<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_igep0034_defconfig</code></span>
 +
|-
 +
| style="width: 160px;"|IGEP COM MODULE DM3730/AM3703
 +
| style="width: 163px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/configs/omap2plus_defconfig omap2plus_defconfig]
 +
| style="width: 527px;"|<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig</code></span>
 +
|-
 +
| style="width: 160px;"|IGEP SMARC AM335x
 +
| style="width: 163px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/configs/am335x_igep0034_defconfig am335x_igep0034_defconfig]
 +
| style="width: 527px;"|<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_igep0034_defconfig</code></span>
 
|-
 
|-
!|<span style="color: #808080;">'''Platform'''</span>
+
| style="width: 160px;"|IGEP SMARC iMX6S/DL/Q
!|<span style="color: #808080;">'''Kernel source'''</span>
+
| style="width: 163px;"|[https://git.isee.biz/linux-kernel/linux-imx/blob/isee-imx_4.9.11_1.0.0_ga/arch/arm/configs/imx6_igep0046_defconfig imx6_igep0046_defconfig]
!|<span style="color: #808080;">'''zImage binary (igep00x0_defconfig)'''</span>
+
| style="width: 527px;"|<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6_igep0046_defconfig</code></span>
!|<span style="color: #808080;">'''Modules binaries (igep00x0_defconfig)'''</span>
 
!|<span style="color: #808080;">'''zImage binary (igep00x0_wilink8_defconfig)'''</span>
 
!|<span style="color: #808080;">'''Modules binaries (igep00x0_wilink8_defconfig)'''</span>
 
!|<span style="color: #808080;">'''Compat Wireless source (only for igep00x0_wilink8_defconfig)'''</span>
 
!|<span style="color: #808080;">'''Firmware binaries (only for igep00x0_wilink8_defconfig)'''</span>
 
 
|-
 
|-
||<span style="color: #808080;">IGEP00x0</span>
+
| style="width: 160px;"|IGEP SMARC iMX6UL/ULL
||<span style="color: #808080;">[http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/linux-omap-2.6.37-12.tar.gz 2.6.37-12]([http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/linux-omap-2.6.37-12.tar.gz.md5 md5sum])</span>
+
||[https://git.isee.biz/linux-kernel/linux-imx/blob/isee-imx_4.9.11_1.0.0_ga/arch/arm/configs/imx6_igep0146_defconfig imx6_igep0146_defconfig]
||<span style="color: #808080;">[http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/zImage-2.6.37-12.bin zImage-2.6.37-12.bin]&nbsp;([http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/zImage-2.6.37-12.bin.md5 md5sum])</span>
+
| style="width: 527px;"|<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6_igep0146_defconfig</code></span>
||<span style="color: #808080;">[http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/modules-2.6.37-12.tar.gz modules-2.6.37-12]([http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/modules-2.6.37-12.tar.gz.md5 md5sum)]</span>
 
||<span style="color: #808080;">[http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/zImage-2.6.37-12-wilink8.bin zImage-2.6.37-12-wilink8.bin]([http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/zImage-2.6.37-12-wilink8.bin.md5 md5sum])</span>
 
||<span style="color: #808080;">[http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/modules-2.6.37-12-wilink8.tar.gz modules-2.6.37-12-wilink8]([http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/modules-2.6.37-12-wilink8.tar.gz.md5 md5sum)]</span>
 
||<span style="color: #808080;">[http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/compat-wireless-wilink8-0.tar.gz compat-wireless-wilink8-0]([http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/compat-wireless-wilink8-0.tar.gz.md5 md5sum])</span>
 
||<span style="color: #808080;">[http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/ti-connectivity-wilink8-0.tar.gz ti-connectivity-wilink8-0]([http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/ti-connectivity-wilink8-0.tar.gz.md5 md5sum)]</span>
 
 
|}
 
|}
=<span id="Build_kernel_from_sources" class="mw-headline" style="color: #000000;">Build kernel from sources</span>=
+
Once the default configuration has been loaded, it is time to compile the Linux Kernel. There are three important elements to compile:
<span style="color: #000000;">'''Download'''&nbsp;the latest stable version sources and follow next steps:</span>
 
  
<pre><span style="color: #808080;">wget <a class="external free" href="http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/linux-omap-2.6.37-12.tar.gz" target="_blank" rel="nofollow noreferrer noopener">http://downloads.isee.biz/pub/releases/linux_kernel/v2.6.37-12/linux-omap-2.6.37-12.tar.gz</a>
+
* '''Image: '''The kernel image. There are three several formats. Generally we will use the '''zImage''': a compressed version of the Linux kernel image that is self-extracting.
tar xzf linux-omap-2.6.37-12.tar.gz
+
* '''DTBs: '''Device tree binary, a low level device description, specific to your device.
cd linux-omap-2.6.37-12
+
* '''Modules: '''Kernel Modules, pieces of code that can be loaded and unloaded into the kernel upon demand. They extend the functionality of the kernel without the need to reboot the system. 
</span></pre>
 
<span style="color: #000000;">Also, it could download from GIT Repositories ([http://git.isee.biz/ http://git.isee.biz/]) and test the last unstable version at your own risk (see "''Linux mainline tree (development)''" chapter in&nbsp;[index.php/The_Linux_kernel The Linux kernel])</span>
 
  
==<span id="Important_procedures" class="mw-headline" style="color: #000000;">Important procedures</span>==
+
In order to compile this three elements we have to type:
* <span style="color: #808080;">Remove rootfs modules binaries from any previous Kernel</span>
 
* <span style="color: #808080;">If you switch to another configuration, clean kernel sources with command: make mrproper</span>
 
  
<pre><span style="color: #000000;">Para compilar el kernel se ha de seguir los siguientes pasos:</span></pre>
+
<span style="color: #000000;"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules</code></span>
1- Descargar la rama correspondiente con git
 
  
2- Configurar el kernel con la minima configuracion que nos ofrece
+
Finally we will find the resulting compiled Kernel in the '''''arch/arm/boot''''' folder:
  
<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div id="highlighter_902183" class="syntaxhighlighter sh-confluence nogutter  java">
+
* zImage: located in '''arch/arm/boot/zImage'''
{| cellspacing="0" cellpadding="0" border="0"
+
* DTB: located in arch/arm/boot/dts/.dtb. Depending of the board the dtb file will be different. In the following table it is detailed the corresponding dtb filename for each b''' <br />'''
|-
 
| class="code"|<div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6_igep0046_defconfi</code>
 
  
</div>
 
</div>
 
|}</div>
 
</div>
 
</div>
 
3- Ejecutar el menuconfig para optimizar la configuracion a traves del menú.
 
  
<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div id="highlighter_965738" class="syntaxhighlighter sh-confluence nogutter  java">
+
{| class="contenttable sortable" style="width: 890px;"
{| cellspacing="0" cellpadding="0" border="0"
+
|-
 +
! style="width: 281.467px;"|BOARD
 +
! style="width: 588.533px;"|DTB NAME
 +
|-
 +
| style="width: 281.467px;"|IGEPv2 DM3730
 +
| style="width: 588.533px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/boot/dts/omap3-igep0020-rev-f.dts omap3-igep0020-rev-f.dts]
 +
|-
 +
| style="width: 281.467px;"|IGEP COM MODULE DM3730/AM3703
 +
| style="width: 588.533px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/boot/dts/omap3-igep0030-rev-g.dts omap3-igep0030-rev-g.dts]
 +
|-
 +
| style="width: 281.467px;"|IGEP COM AQUILA AM335x
 +
| style="width: 588.533px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/boot/dts/am335x-base0033.dts am335x-base0033.dts]
 
|-
 
|-
| class="code"|<div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig</code>
+
| style="width: 281.467px;"|IGEPv5 OMAP5432
 
+
| style="width: 588.533px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/boot/dts/omap5-igep0050.dts omap5-igep0050.dts]
</div>
+
|-
</div>
+
| style="width: 281.467px;"|IGEP SMARC AM335x
|}</div>
+
| style="width: 588.533px;"|[https://git.isee.biz/linux-kernel/linux-omap-2.6/blob/isee-linux-v.4.9.y/arch/arm/boot/dts/am335x-igep-base0040.dts am335x-igep-base0040.dts]
</div>
+
|-
</div>
+
| style="width: 281.467px;"|IGEP SMARC iMX6 Quad
Guardar la configuracion del menuconfig en .config
+
| style="width: 588.533px;"|[https://git.isee.biz/linux-kernel/linux-imx/blob/isee-imx_4.9.11_1.0.0_ga/arch/arm/boot/dts/imx6q-igep-base0040rd102.dts imx6q-igep-base0040rd102.dts]
 
 
4- Compilar la imagen los modulos y las dtb
 
 
 
<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div id="highlighter_56426" class="syntaxhighlighter sh-confluence nogutter  java">
 
{| cellspacing="0" cellpadding="0" border="0"
 
 
|-
 
|-
| class="code"|<div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="java plain">make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs</code>
+
| style="width: 281.467px;"|IGEP SMARC iMX6 Dual Lite
 
+
| style="width: 588.533px;"|[https://git.isee.biz/linux-kernel/linux-imx/blob/isee-imx_4.9.11_1.0.0_ga/arch/arm/boot/dts/imx6dl-igep-base0040rd102.dts imx6dl-igep-base0040rd102.dts]
</div>
 
</div>
 
|}</div>
 
</div>
 
</div>
 
5- Instalar en el rootfs los modulos del kernel que son cargables ( es decir que no estan built-in)
 
 
 
<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"><div class="codeContent panelContent pdl"><div id="highlighter_785157" class="syntaxhighlighter sh-confluence nogutter  java">
 
{| cellspacing="0" cellpadding="0" border="0"
 
 
|-
 
|-
| class="code"|<div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="java plain">sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/opt/nfs-server/rootfs/ubuntu-xenial-armhf-base</code>
+
| style="width: 281.467px;"|IGEP SMARC iMX6 Ultra Lite
 
+
||[https://git.isee.biz/linux-kernel/linux-imx/blob/isee-imx_4.9.11_1.0.0_ga/arch/arm/boot/dts/imx6ul-igep-base0040rd102.dts imx6ul-igep-base0040rd102.dts], [https://git.isee.biz/linux-kernel/linux-imx/blob/isee-imx_4.9.11_1.0.0_ga/arch/arm/boot/dts/imx6ul-igep-base0040rd102-wifi.dts imx6ul-igep-base0040rd102-wifi.dts]
</div>
+
|}
</div>
 
|}</div>
 
</div>
 
</div>
 
'''Nota: Es muy importante que el INSTALL_MOD_PATH sea el correcto y de lugar justo al contenido que se esperaría en un sistema linux (usr, bin, etc, home, opt), este comando ademas se ha de ejecutar con sudo.'''
 
 
 
'''Si éste comando falla, es muy probable que instale los modulos en el Host PC pudiendo dejar inservible el actual SO.'''
 
 
 
==<span id="Scenarios" class="mw-headline" style="color: #000000;">Scenarios</span>==
 
<span style="color: #000000;">Consider the following situations:</span>
 
 
 
<span style="color: #000000;">'''Scenario A.'''&nbsp;You have and IGEP0020 board plus IGEP0022 expansion board, then you should add in your&nbsp;[index.php/How_do_I_edit_my_kernel_command_line kernel command line]</span>
 
 
 
<pre><span style="color: #000000;">buddy=igep0022
 
</span></pre>
 
<span style="color: #000000;">Optionally, to enable the IGEP0022 modem which is disabled by default you should add in your&nbsp;[index.php/How_do_I_edit_my_kernel_command_line kernel command line]</span>
 
 
 
<pre><span style="color: #000000;">buddy=igep0022 buddy.modem=yes
 
</span></pre>
 
<span style="color: #000000;">NOTE: UART2 can be used for bluetooth OR modem in expansion board but NOT at same time. They are INCOMPATIBLE.</span>
 
 
 
<span style="color: #000000;">'''Scenario B.'''&nbsp;You have and IGEP0030 board plus BASE0010 expansion board, then you should add in your&nbsp;[index.php/How_do_I_edit_my_kernel_command_line kernel command line]</span>
 
 
 
<pre><span style="color: #000000;">buddy=base0010
 
</span></pre>
 
<span style="color: #000000;">'''Scenario C.'''&nbsp;You have and IGEP0030 board plus BASE0010 Rev. B expansion board, then you should add in your&nbsp;[index.php/How_do_I_edit_my_kernel_command_line kernel command line]</span>
 
 
 
<pre><span style="color: #000000;">buddy=base0010 buddy.revision=B
 
</span></pre>
 
<span style="color: #000000;">'''Scenario D.'''&nbsp;You have and IGEP0032 board plus BASE0010 Rev. B expansion board, then you should add in your&nbsp;[index.php/How_do_I_edit_my_kernel_command_line kernel command line]</span>
 
 
 
<pre><span style="color: #000000;">buddy=base0010 buddy.revision=B
 
</span></pre>
 
<span style="color: #000000;">'''Scenario E.'''&nbsp;You have and IGEP0030 board plus ILMS0015 expansion board, then you should add in your&nbsp;[index.php/How_do_I_edit_my_kernel_command_line kernel command line]</span>
 
 
 
<pre><span style="color: #000000;">buddy=ilms0015
 
</span></pre>
 
=<span id="Layout" class="mw-headline" style="color: #000000;">Layout</span>=
 
<span style="color: #808080;">Machine specific files are located in&nbsp;'''arch/arm/mach-omap2/'''&nbsp;directory with name&nbsp;'''board-igep*.c'''&nbsp;:</span>
 
 
 
* <span style="color: #808080;">'''board-igep0020.c''': For IGEP0020 machine</span>
 
* <span style="color: #808080;">'''board-igep0030.c''': For IGEP0030 machine</span>
 
* <span style="color: #808080;">'''board-igep0032.c''': For IGEP0032 machine</span>
 
 
 
<span style="color: #808080;">Expansion board files, also are located in&nbsp;'''arch/arm/mach-omap2/'''&nbsp;directory with name&nbsp;'''exp-*.c'''&nbsp;:</span>
 
 
 
* <span style="color: #808080;">'''exp-igep0022.c''': For IGEP0022 expansion board</span>
 
* <span style="color: #808080;">'''exp-base0010.c''': For BASE0010 expansion board</span>
 
* <span style="color: #808080;">'''exp-ilms0015.c''': For ILMS0015 expansion board</span>
 
 
 
=<span id="Adding_New_Expansion_Boards" class="mw-headline" style="color: #000000;">Adding New Expansion Boards</span>=
 
<span style="color: #808080;">This chapter is meant to be a starting point for people to learn how to add your own expansion board in three steps.</span>
 
 
 
==<span id="Step_1:_Add_new_expansion_board_file" class="mw-headline" style="color: #808080;">Step 1: Add new expansion board file</span>==
 
<span style="color: #808080;">As you can see in Layout chapter, an expansion board is called exp-.c and should be located in arch/arm/mach-omap2 directory, so the first step will be add a new file for your new expansion board. Following example creates a new expansion board file called exp-dummy.c (arch/arm/mach-omap2/exp-dummy.c)</span>
 
  
<pre><span style="color: #808080;"> #include &lt;linux/kernel.h&gt;
+
Once you have to compile the Kernel, you have to copy de Zimage and dtb in /media/user/boot.'''<br />'''
#include &lt;linux/init.h&gt;
 
  
void __init dummy_init(void)
+
zImage example:
{
 
pr_info("Initializing expansion board ... \n");
 
}
 
</span></pre>
 
<span style="color: #808080;">next, add the new file to be built</span>
 
  
<pre><span style="color: #808080;">diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
+
<span style="color: #000000;"><code class="java plain">cp arch/arm/boot/zimage /media/user/boot</code></span>
index 7505be9..a6572f2 100644
 
--- a/arch/arm/mach-omap2/Makefile
 
+++ b/arch/arm/mach-omap2/Makefile
 
@@ -156,6 +156,7 @@ obj-$(CONFIG_MACH_IGEP0020)        += board-igep0020.o \
 
obj-$(CONFIG_MACH_IGEP0030)            += board-igep0030.o \
 
                                          board-igep00x0.o \
 
                                          exp-base0010.o \
 
+                                          exp-dummy.o \
 
                                          hsmmc.o
 
obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK)    += board-omap3touchbook.o \
 
                                          hsmmc.o
 
</span></pre>
 
==<span id="Step_2:_Register_new_expansion_board" class="mw-headline" style="color: #808080;">Step 2: Register new expansion board</span>==
 
<span style="color: #808080;">Now, edit board-igep00x0.h and add an identifier for the new expansion board, for example,</span>
 
  
<pre><span style="color: #808080;">diff --git a/arch/arm/mach-omap2/board-igep00x0.h b/arch/arm/mach-omap2/board-igep00x0.h
 
index 6b9b677..a2325d7 100644
 
--- a/arch/arm/mach-omap2/board-igep00x0.h
 
+++ b/arch/arm/mach-omap2/board-igep00x0.h
 
@@ -15,6 +15,7 @@
 
#define IGEP00X0_BUDDY_NONE            0x01
 
#define IGEP00X0_BUDDY_IGEP0022        0x01
 
#define IGEP00X0_BUDDY_BASE0010        0x02
 
+#define IGEP00X0_BUDDY_DUMMY          0x03
 
  
#define IGEP00X0_BUDDY_HWREV_A        (1 &lt;&lt; 0)
+
<span style="color: #000000;"><code class="java plain">cp arch/arm/boot/dts/omap3-igep0020-rev-f.dtb /media/user/boot</code></span>
#define IGEP00X0_BUDDY_HWREV_B        (1 &lt;&lt; 1)
 
</span></pre>
 
<span style="color: #808080;">also, edit in board-igep00x0.c the buddy_early_param to add the new expansion board,</span>
 
  
<pre><span style="color: #808080;">diff --git a/arch/arm/mach-omap2/board-igep00x0.c b/arch/arm/mach-omap2/board-igep00x0.c
 
index 2a2d8eb..f2b5b27 100644
 
--- a/arch/arm/mach-omap2/board-igep00x0.c
 
+++ b/arch/arm/mach-omap2/board-igep00x0.c
 
@@ -192,6 +192,9 @@ static int __init buddy_early_param(char *str)
 
                if (!strcmp(name, "base0010")) {
 
                        igep00x0_buddy_pdata.model = IGEP00X0_BUDDY_BASE0010;
 
                        pr_info("IGEP: IGEP0030 machine + BASE0010 (buddy)\n");
 
+              } else if (!strcmp(name, "dummy")) {
 
+                      igep00x0_buddy_pdata.model = IGEP00X0_BUDDY_DUMMY;
 
+                      pr_info("IGEP: IGEP0030 machine + DUMMY (buddy)\n");
 
                } else
 
                        pr_err("IGEP: Unknown buddy for IGEP0030 machine\n");
 
        }
 
</span></pre>
 
==<span id="Step_3:_Run_expansion_board_initialization" class="mw-headline" style="color: #808080;">Step 3: Run expansion board initialization</span>==
 
<span style="color: #808080;">Finally, modify the machine file and add support for the new expansion board, for example:</span>
 
  
<pre><span style="color: #808080;">diff --git a/arch/arm/mach-omap2/board-igep0030.c b/arch/arm/mach-omap2/board-igep0030.c
+
'''Before to install the modules, you need to choose a [[IGEP Firmware set-up|rootfs]] and copy in your SDCard or Nand/MMC rootfs parition.'''
index 2b97257..44b319d 100644
 
--- a/arch/arm/mach-omap2/board-igep0030.c
 
+++ b/arch/arm/mach-omap2/board-igep0030.c
 
@@ -204,6 +204,8 @@ static struct omap_board_mux board_mux[] __initdata = {
 
  
/* Expansion board: BASE0010 */
 
extern void __init base0010_init(struct twl4030_platform_data *pdata);
 
+/* Expansion board: DUMMY */
 
+extern void __init dummy_init(void);
 
  
static void __init igep0030_init(void)
+
'''Finally''', the last step is to''' install the modules inside the desired rootfs'''. For example, if the rootfs is located in a external storage device mounted on the /media folder:
{
 
@@ -223,6 +225,10 @@ static void __init igep0030_init(void)
 
        /* - BASE0010 (adds twl4030_pdata)  */
 
        if (igep00x0_buddy_pdata.model == IGEP00X0_BUDDY_BASE0010)
 
                base0010_init(&amp;twl4030_pdata);
 
+      /* - DUMMY  */
 
+      if (igep00x0_buddy_pdata.model == IGEP00X0_BUDDY_DUMMY)
 
+              dummy_init();
 
+
 
  
        /* Add twl4030 common data */
+
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/user/rootfs/ modules_install
        omap3_pmic_get_config(&amp;twl4030_pdata, TWL_COMMON_PDATA_USB |
+
==<span id="Linux_kernels" class="mw-headline">Linux kernels</span>==
</span></pre>
+
To get more information about our Kernel and their compatibilities
=<span id="Known_issues" class="mw-headline" style="color: #808080;">Known issues</span>=
 
<span style="color: #808080;">See&nbsp;[http://processors.wiki.ti.com/index.php/AM35x-OMAP35x-PSP_04.02.00.07_Release_Notes#Known_Issues_-_AM.2FDM37x http://processors.wiki.ti.com/index.php/AM35x-OMAP35x-PSP_04.02.00.07_Release_Notes#Known_Issues_-_AM.2FDM37x]</span>
 
  
==<span id="modules_are_not_installed_correctly" class="mw-headline" style="color: #808080;">modules are not installed correctly</span>==
+
* [[Linux Kernel 4.1.y|Linux Kernel 4.1]]
<span style="color: #808080;">Try to change rootfs owner from root to your username.</span>
+
* [[Linux Kernel 3.8.y|Linux Kernel 3.8]]
  
<pre><span style="color: #808080;"> sudo chown  -R /media/rootfs</span></pre>
 
==<span id="wlcore:_Unknown_symbol" class="mw-headline" style="color: #808080;">wlcore: Unknown symbol</span>==
 
<span style="color: #808080;">Probably, you didn't erase old module binaries from rootfs. Open IGEP terminal and type:</span>
 
  
<pre><span style="color: #808080;">depmod -a
+
[[Category:Linux]]
depmod -A </span></pre>
+
[[Category:Linux_Kernel]]
<span style="color: #808080;">Finally reboot the system</span>
 

Revision as of 10:28, 11 March 2019

245px-Tux.svg.png
 

What is Linux?

Linux is the result of merging the computational Kernel made by Linux Torval and the scheme present in any Unix operative system, Kernel was written from scratch by Linus and a loosely-knit team of hackers across the Net. It aims towards POSIX standard and Single UNIX Specification compliance.

It has all the features you would expect in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6.

Although originally developed first for 32-bit x86-based PCs (386 or higher), today Linux also runs on a multitude of other processor architectures, in both 32- and 64-bit variants.

Introduction

In order to build the Linux Kernel for IGEP PROCESSOR BOARDS it is recommended to cross-compile the kernel, that means to build the kernel in your HOST machine for a target architecture.

To Ubuntu_16.04 there are two fundamental variables that the kernel uses to select the target architecture. Normally these values are guessed based on your build environment, but of course that environment here does not match our target embedded system, so we'll need to override them. The variables in question are:

  • ARCH: The ARCH variable is the architecture you're targeting as the kernel knows it. For IGEP PROCESSOR BOARDS you'll set to "arm" architecture.
  • CROSS_COMPILE: Hopefully the CROSS_COMPILE variable is pretty self-explanatory. Set this to the prefix of your toolchain (including the trailing dash "-"). So if your toolchain is invoked as say arm-linux-gnueabihf-gcc, just chop off that trailing gcc and that's what you use: arm-linux-gnueabihf-

There is an additional variable, INSTALL_MOD_PATH, which defines where the /lib directory will be created, and all the modules stored. While you don't have to transfer the kernel sources to your target device, if you build any modules, you'll want this directory.

The general process that it has to be followed in order to compile your Linux Kernel is usually the same:

  1. Clone the git from ISEE git with the latest stable version of the corresponding Linux Kernel.
  2. Select the corresponding branch inside the git repository.
  3. Select the correct default configuration (defconfig)
  4. Compile the Kernel Image, Device Tree and Modules of that configuration.

Prepare the environment

Information.jpg The following steps has been tested using Ubuntu 16.04 and the 4.9 version of the arm-linux-gnueabihf compiler

First we have to set up the Cross Compiler correctly if it is necessary. In this post there are some steps that can be followed in order to do it.

If it is necessary we can install this extra packages that could be necessaries:

sudo apt-get install libc6-armel-cross libc6-armhf-cross libc6-dev-armel-cross libncurses5-dev

sudo apt-get install lzop

The next step is to clone the corresponding git repository. There are different git repositories depending on the model of the processor of the board. The following table shows the steps for each of the IGEP PROCESSOR BOARDS:

PROCESSOR GIT REPOSITORY BRANCH
DM3730 https://git.isee.biz/linux-kernel/linux-omap-2.6.git isee-linux-v.4.9.y
AM335X https://git.isee.biz/linux-kernel/linux-omap-2.6.git isee-linux-v.4.9.y
iMX6 https://git.isee.biz/linux-kernel/linux-imx.git

isee-imx_4.9.11_1.0.0_ga

To get to desired branch we will use:

git checkout [your_branch]

Compile the Linux Kernel

Once the development environment has been correctly set up, the following steps can be followed in order to compile the Linux Kernel using a Cross Compiler.

First of all, the default configuration (defconfig) has to be loaded. It can be done by writing the following command:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- [your_defconfig]

In the following table it can be found the name of each default configuration associated to each IGEP PROCESSORS BOARDS:

BOARD DEFCONFIG EXAMPLE
IGEPv5 OMAP5432 omap2plus_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig 
IGEPv2 DM3730 omap2plus_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig
IGEP COM AQUILA AM335x am335x_igep0034_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_igep0034_defconfig
IGEP COM MODULE DM3730/AM3703 omap2plus_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig
IGEP SMARC AM335x am335x_igep0034_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_igep0034_defconfig
IGEP SMARC iMX6S/DL/Q imx6_igep0046_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6_igep0046_defconfig
IGEP SMARC iMX6UL/ULL imx6_igep0146_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6_igep0146_defconfig

Once the default configuration has been loaded, it is time to compile the Linux Kernel. There are three important elements to compile:

  • Image: The kernel image. There are three several formats. Generally we will use the zImage: a compressed version of the Linux kernel image that is self-extracting.
  • DTBs: Device tree binary, a low level device description, specific to your device.
  • Modules: Kernel Modules, pieces of code that can be loaded and unloaded into the kernel upon demand. They extend the functionality of the kernel without the need to reboot the system. 

In order to compile this three elements we have to type:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules

Finally we will find the resulting compiled Kernel in the arch/arm/boot folder:

  • zImage: located in arch/arm/boot/zImage
  • DTB: located in arch/arm/boot/dts/.dtb. Depending of the board the dtb file will be different. In the following table it is detailed the corresponding dtb filename for each b


BOARD DTB NAME
IGEPv2 DM3730 omap3-igep0020-rev-f.dts
IGEP COM MODULE DM3730/AM3703 omap3-igep0030-rev-g.dts
IGEP COM AQUILA AM335x am335x-base0033.dts
IGEPv5 OMAP5432 omap5-igep0050.dts
IGEP SMARC AM335x am335x-igep-base0040.dts
IGEP SMARC iMX6 Quad imx6q-igep-base0040rd102.dts
IGEP SMARC iMX6 Dual Lite imx6dl-igep-base0040rd102.dts
IGEP SMARC iMX6 Ultra Lite imx6ul-igep-base0040rd102.dts, imx6ul-igep-base0040rd102-wifi.dts

Once you have to compile the Kernel, you have to copy de Zimage and dtb in /media/user/boot.

zImage example:

cp arch/arm/boot/zimage /media/user/boot


cp arch/arm/boot/dts/omap3-igep0020-rev-f.dtb /media/user/boot


Before to install the modules, you need to choose a rootfs and copy in your SDCard or Nand/MMC rootfs parition.


Finally, the last step is to install the modules inside the desired rootfs. For example, if the rootfs is located in a external storage device mounted on the /media folder:

sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/user/rootfs/ modules_install

Linux kernels

To get more information about our Kernel and their compatibilities