Difference between revisions of "Linux Kernel 4.9.y"
From IGEP - ISEE Wiki
Line 2: | Line 2: | ||
<span style="color: #808080;">This article is for specific 2.6.37.y Linux kernel branch series. All the steps has been tested with [http://releases.ubuntu.com/12.04/ubuntu-12.04.5-desktop-amd64.iso Ubuntu 12.04 64b] and [http://labs.isee.biz/index.php/How_to_setup_a_cross_compiler#IGEP_OMAP3 IGEP SDK Yocto Toolchain 1.2.2-3].</span> | <span style="color: #808080;">This article is for specific 2.6.37.y Linux kernel branch series. All the steps has been tested with [http://releases.ubuntu.com/12.04/ubuntu-12.04.5-desktop-amd64.iso Ubuntu 12.04 64b] and [http://labs.isee.biz/index.php/How_to_setup_a_cross_compiler#IGEP_OMAP3 IGEP SDK Yocto Toolchain 1.2.2-3].</span> | ||
− | |||
− | + | <span style="color: #808080;">---- </span> | |
− | |||
− | |||
− | + | Para dar soporte a una nueva board basada en imx en el kernel es necesario tener un fichero de configuracion defconfig (.config) y 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"> | |
− | + | {| border="0" cellspacing="0" cellpadding="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> | ||
+ | |||
+ | |||
+ | </div> | ||
+ | |}</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"> | ||
+ | {| border="0" cellspacing="0" cellpadding="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> | ||
+ | |||
+ | |||
+ | <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"> </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"> </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"> |
+ | {| border="0" cellspacing="0" cellpadding="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> | ||
− | |||
− | |||
+ | <div class="line number2 index1 alt1"><code class="java spaces"> </code><code class="java plain">imx6dl-igep-base0040rc2.dtb \</code></div> | ||
+ | <div class="line number3 index2 alt2"><code class="java spaces"> </code><code class="java plain">imx6dl-igep-base0040rd102.dtb \</code></div> | ||
+ | <div class="line number4 index3 alt1"><code class="java spaces"> </code><code class="java plain">imx6q-igep-base0040rc2.dtb \</code></div> | ||
+ | <div class="line number5 index4 alt2"><code class="java spaces"> </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="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 id="Install" class="mw-headline">Install</span>== | ||
Line 81: | Line 128: | ||
* <span style="color: #808080;">If you switch to another configuration, clean kernel sources with command: make mrproper</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> |
− | < | + | 1- Descargar la rama correspondiente con git |
+ | |||
+ | 2- Configurar el kernel con la minima configuracion que nos ofrece | ||
+ | |||
+ | <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"> | ||
+ | {| border="0" cellspacing="0" cellpadding="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- 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"> | ||
+ | {| border="0" cellspacing="0" cellpadding="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- menuconfig</code> | ||
+ | |||
− | < | + | </div> |
− | </ | + | |}</div> |
− | + | </div> | |
+ | </div> | ||
+ | </div> | ||
+ | Guardar la configuracion del menuconfig en .config | ||
− | + | 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"> | |
− | + | {| border="0" cellspacing="0" cellpadding="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> | ||
− | |||
− | |||
− | |||
− | < | + | </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"> | ||
+ | {| border="0" cellspacing="0" cellpadding="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> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | < | + | </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 id="Scenarios" class="mw-headline" style="color: #000000;">Scenarios</span>== | ||
<span style="color: #000000;">Consider the following situations:</span> | <span style="color: #000000;">Consider the following situations:</span> |
Revision as of 10:20, 7 May 2018
Contents
Introduction
This article is for specific 2.6.37.y Linux kernel branch series. All the steps has been tested with Ubuntu 12.04 64b and IGEP SDK Yocto Toolchain 1.2.2-3.
----
Para dar soporte a una nueva board basada en imx en el kernel es necesario tener un fichero de configuracion defconfig (.config) y una dtb.
Por defecto empezaremos con un defconfig ya creado por igep para procesadores imx
imx6_igep0046_defconfig
|
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
DUAL
imx6dl-igep-base0040ra1.dts imx6dl-igep-base0040rc2.dts imx6dl-igep-base0040rd102.dts QUAD imx6q-igep-base0040ra1.dts imx6q-igep-base0040rc2.dts imx6q-igep-base0040rd102.dts GENERICA imx6qdl-igep-base0040ra.dtsi imx6qdl-igep-base0040rb.dtsi imx6qdl-igep-igep0046ra.dtsi imx6qdl-igep-igep0046rc.dtsi |
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/
(dentro de dtb-$(CONFIG_SOC_IMX6Q) += \)
imx6dl-igep-base0040rc2.dtb \ imx6dl-igep-base0040rd102.dtb \ imx6q-igep-base0040rc2.dtb \ imx6q-igep-base0040rd102.dtb \ |
Setup IGEP SDK Yocto Toolchain 1.2.2-3
Install
Download - isee.biz
follow the next steps:
- Open a terminal
- Located your downloaded file, in my case is inside /home/jdoe/Downloads:
<span style="color: #000000;">jdoe@ubuntu ~ $ cd Downloads/</span>
- Extract binaries in root directory with root privileges
<span style="color: #000000;">jdoe@ubuntu ~/Downloads $ sudo tar jxf igep-sdk-yocto-toolchain-*.tar.bz2 -C /</span>
- Make sure that binaries are installed correctly.
<span style="color: #808080;"><span style="color: #000000;">jdoe@ubuntu ~/Downloads $ ls /opt/poky/ 1.2 1.2.1</span> </span>
Configure
Open a terminal and type:
<span style="color: #000000;"> export PATH=/opt/poky/1.2/sysroots/i686-pokysdk-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi:$PATH </span>
Compiled binaries
Binaries: latest stable kernel version IGEP OMAP3 devices is: 2.6.37-12 (20161206)
Platform | Kernel source | zImage binary (igep00x0_defconfig) | Modules binaries (igep00x0_defconfig) | zImage binary (igep00x0_wilink8_defconfig) | Modules binaries (igep00x0_wilink8_defconfig) | Compat Wireless source (only for igep00x0_wilink8_defconfig) | Firmware binaries (only for igep00x0_wilink8_defconfig) |
---|---|---|---|---|---|---|---|
IGEP00x0 | 2.6.37-12(md5sum) | zImage-2.6.37-12.bin (md5sum) | modules-2.6.37-12(md5sum) | zImage-2.6.37-12-wilink8.bin(md5sum) | modules-2.6.37-12-wilink8(md5sum) | compat-wireless-wilink8-0(md5sum) | ti-connectivity-wilink8-0(md5sum) |
Build kernel from sources
Download the latest stable version sources and follow next steps:
<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> tar xzf linux-omap-2.6.37-12.tar.gz cd linux-omap-2.6.37-12 </span>
Also, it could download from GIT Repositories (http://git.isee.biz/) and test the last unstable version at your own risk (see "Linux mainline tree (development)" chapter in [index.php/The_Linux_kernel The Linux kernel])
Important procedures
- Remove rootfs modules binaries from any previous Kernel
- If you switch to another configuration, clean kernel sources with command: make mrproper
<span style="color: #000000;">Para compilar el kernel se ha de seguir los siguientes pasos:</span>
1- Descargar la rama correspondiente con git
2- Configurar el kernel con la minima configuracion que nos ofrece
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6_igep0046_defconfi
|