“MY-IMX6-EK140P L4115 编译手册”的版本间的差异

来自明远智睿的wiki
跳转至: 导航搜索
第1行: 第1行:
 
<div>
 
<div>
  
= '''文档说明(document instruction)''' =
+
= '''文档说明''' =
 
----
 
----
== '''系统环境说明(system environment instruction)''' ==
+
== '''系统环境说明''' ==
 
* 编译主机CPU架构:64位 <br>
 
* 编译主机CPU架构:64位 <br>
<span style="background:#CCCCCC">CUP architeture of host used for compilation:64bit</span><br>
 
  
 
* 编译主机系统:Linux <br>
 
* 编译主机系统:Linux <br>
<span style="background:#CCCCCC">system of host:Linux</span><br>
 
  
 
* Linux发行版:Ubuntu <br>
 
* Linux发行版:Ubuntu <br>
<span style="background:#CCCCCC">Linux release version:Ubuntu</span><br>
 
  
 
* Ubuntu版本类型:服务器版 <br>
 
* Ubuntu版本类型:服务器版 <br>
<span style="background:#CCCCCC">Ubuntu version type:server version</span><br>
 
  
 
* Ubuntu版本号:12.04.5 <br>
 
* Ubuntu版本号:12.04.5 <br>
<span style="background:#CCCCCC">Ubuntu version no.:12.04.5</span><br>
 
  
 
* Ubuntu系统类型:x86-64 <br>
 
* Ubuntu系统类型:x86-64 <br>
<span style="background:#CCCCCC">Ubuntu system type:x86-64</span><br>
+
  <span style="color:red">注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。</span><br>
  <span style="color:red">注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。 <br>
 
  <span style="background:#CCCCCC"><span style="color:red">Note: The development host should use ubuntu 12.04.5 x86-64(desktop and server version are available),Using other distribution of Linux and other versions of
 
Ubuntu may encounter unnecessary problems </span></span><br>
 
  
  
== '''操作说明 (operation instruction)''' ==
+
== '''操作说明''' ==
 
1)文档中以“$”开头的行,其后是Linux命令。 <br>
 
1)文档中以“$”开头的行,其后是Linux命令。 <br>
<span style="background:#CCCCCC">The line in the document which begins with “$”,which is followed by the Linux command.。 </span><br>
 
  
 
2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。 <br>
 
2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。 <br>
<span style="background:#CCCCCC">All the Linux commands in the document are recommended to be entered into the host manually for execution.(Copying ,pasting to the host directly to execute may fail)。</span><br>
 
  
 
3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。 <br>
 
3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。 <br>
<span style="background:#CCCCCC">In all the Linux execution commands of the document,if the next character after the space is "-",(example:sudo apt-get –y install),please enter into Linux host to execute manually.(Copying ,pasting to the host directly to execute may fail ).)。</span><br>
 
  
 
4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。 <br>
 
4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。 <br>
<span style="background:#CCCCCC">any line of Linux commands whichi is not finished is recommended to be entered into the host for execution. (Because copy or paste commands cannot contain special character such as "line breaks")。)。</span><br>
 
  
 
5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。 <br>
 
5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。 <br>
<span style="background:#CCCCCC">Note whether the execution result is  consistent with the document image when you enter and execute the command. check the command was entered incorrectly or failed to execute.。</span><br>
 
  
 
6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。<br>
 
6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。<br>
<span style="background:#CCCCCC">Please follow the document strictly to compile for the first time.Otherwise ,there may be unexpected error。</span><br>
 
  
  
== '''截图说明(screenshots instruction)''' ==
+
== '''截图说明''' ==
 
为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。<br>
 
为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。<br>
<span style="background:#CCCCCC">To make the view look neat and tidy , the command prompt in the screenshot should use myzr$ uniformly。</span><br>
 
  
 
+
== '''图片中的Linux命令''' ==
== '''图片中的Linux命令(Linux command in the image)''' ==
 
 
在文档的图片中观察“myzr$”开头的行可以直观的看到输入的Linux命令。<br>
 
在文档的图片中观察“myzr$”开头的行可以直观的看到输入的Linux命令。<br>
<span style="background:#CCCCCC">In the image of the document, you can see the input Linux command visually from the lines that start with “myzr$”。</span><br>
 
  
  
== <span style="color:red">'''重要信息说明(important information instruction)'''</span> ==
+
== <span style="color:red">'''重要信息说明'''</span> ==
 
<span style="color:red">为避免各位客户在搭建开发环境及编译过程中遇到不必要的问题浪费时间和精力,推荐使用明远智睿发布的“vb43-u12045-serv-amd64”虚拟机系统。<br></span>
 
<span style="color:red">为避免各位客户在搭建开发环境及编译过程中遇到不必要的问题浪费时间和精力,推荐使用明远智睿发布的“vb43-u12045-serv-amd64”虚拟机系统。<br></span>
<span style="background:#CCCCCC">To avoid our customers wasting time and energy when they encounter unnecessary problems in building development environment and compiling process,it is recommended to use “vb43-u12045-serv-amd64” virtual machine system released by MYZR。</span><br>
 
  
  
'''具体参见 [[MYZR虚拟机系统指导]](details refered to [[MYZR virtual machine system guidance]])'''
+
'''具体参见 [[MYZR虚拟机系统指导]]'''
  
= '''准备源码及相关文件(prepare source code and relevant file)''' =
+
= '''准备源码及相关文件''' =
 
----
 
----
== '''源码文件(source code)''' ==
+
== '''源码文件''' ==
 
评估板对应的Linux版本及对应的源码文件见下表:<br>
 
评估板对应的Linux版本及对应的源码文件见下表:<br>
<span style="background:#CCCCCC">The corresponding Linux version of the evaluation board and the corresponding source code files are shown in the table below:</span><br>
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!评估板型号<br>(evaluation board model) || u-boot源码文件<br>(u-boot source code) || linux源码文件<br>(linux source code)
+
!评估板型号 || u-boot源码文件 || linux源码文件
 
|-
 
|-
 
|MY-IMX6-EK200 || rowspan=4|u-boot-2016.03__svn121.tar.xz || rowspan=4|linux-4.1.15__svn189.tar.xz
 
|MY-IMX6-EK200 || rowspan=4|u-boot-2016.03__svn121.tar.xz || rowspan=4|linux-4.1.15__svn189.tar.xz
第83行: 第64行:
  
  
== '''交叉编译工具文件(cross compiler tool file)''' ==
+
== '''交叉编译工具文件''' ==
 
Linux程序交叉编译工具:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz<br>
 
Linux程序交叉编译工具:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz<br>
<span style="background:#CCCCCC">Linux program cross compiler tool:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar</span><br>
 
  
 
Linux交叉编译工具配置文件:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
Linux交叉编译工具配置文件:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
<span style="background:#CCCCCC">Linux cross compiler tool configuration file:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env</span><br>
 
  
  
  
 
+
== '''创建工作目录''' ==
== '''创建工作目录(creat working directory)''' ==
 
 
1)源码目录<br>
 
1)源码目录<br>
<span style="background:#CCCCCC">source code directory</span><br>
 
 
$ mkdir ~/my-imx6/02_source –p <br>
 
$ mkdir ~/my-imx6/02_source –p <br>
 
[[文件:myimx6linux3.14_build_2.3.0.1.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.1.png]]<br>
  
 
2)工具目录<br>
 
2)工具目录<br>
<span style="background:#CCCCCC">tool directory</span><br>
 
 
$ mkdir ~/my-imx6/03_tools –p<br>
 
$ mkdir ~/my-imx6/03_tools –p<br>
 
[[文件:myimx6linux3.14_build_2.3.0.2.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.2.png]]<br>
  
 
3)镜像目录<br>
 
3)镜像目录<br>
<span style="background:#CCCCCC">image directory</span><br>
 
 
$ mkdir ~/my-imx6/04_image –p<br>
 
$ mkdir ~/my-imx6/04_image –p<br>
 
[[文件:myimx6linux3.14_build_2.3.0.3.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.3.png]]<br>
第112行: 第87行:
  
 
4)应用程序目录<br>
 
4)应用程序目录<br>
<span style="background:#CCCCCC">application diretory</span><br>
 
 
$ mkdir ~/my-demo<br>
 
$ mkdir ~/my-demo<br>
 
[[文件:myimx6linux3.14_build_2.3.0.5.png]]<br>
 
[[文件:myimx6linux3.14_build_2.3.0.5.png]]<br>
  
  
= '''安装交叉编译工具链(install cross compiler tool chain)''' =
+
= '''安装交叉编译工具链''' =
 
----
 
----
== '''安装Linux交叉编译工具链(install Linux cross compiler tool chain)''' ==
+
== '''安装Linux交叉编译工具链''' ==
 
1)进入交叉编译工具链目录<br>
 
1)进入交叉编译工具链目录<br>
<span style="background:#CCCCCC">enter cross compiler tool chain diretory</span><br>
 
 
$ cd ~/my-imx6/03_tools/<br>
 
$ cd ~/my-imx6/03_tools/<br>
  
 
2)复制Linux交叉编译工具到目录<br>
 
2)复制Linux交叉编译工具到目录<br>
<span style="background:#CCCCCC">copy Linux cross compiler tool to directory</span><br>
 
 
将gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。<br>
 
将gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。<br>
 
<span style="background:#CCCCCC"></span><br>
 
<span style="background:#CCCCCC"></span><br>
  
 
3)解压Linux交叉编译工具<br>
 
3)解压Linux交叉编译工具<br>
<span style="background:#CCCCCC">copy gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar to“~/my-imx6/03_tools”,complete this step by yourself in a proper way。</span><br>
 
 
$ tar xf gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar<br>
 
$ tar xf gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar<br>
 
[[文件:myimx6linux3.14_build_4.1.0.1.png]]<br>
 
[[文件:myimx6linux3.14_build_4.1.0.1.png]]<br>
  
 
4)复制交叉编译工具配置文件<br>
 
4)复制交叉编译工具配置文件<br>
<span style="background:#CCCCCC">copy cross compiler tool configuration file</span><br>
 
 
将gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。<br>
 
将gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。<br>
<span style="background:#CCCCCC">copy gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env to“~/my-imx6/03_tools”,complete this step by yourself in a proper way。</span><br>
 
  
 
5)检查安装<br>
 
5)检查安装<br>
<span style="background:#CCCCCC">check installation</span><br>
 
 
$ source gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
$ source gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
$ ${CROSS_COMPILE}gcc –v<br>
 
$ ${CROSS_COMPILE}gcc –v<br>
第146行: 第114行:
  
  
= '''U-Boot编译(U-Boot compilation)''' =
+
= '''U-Boot编译''' =
 
----
 
----
== '''准备编译(prepare compilation)''' ==
+
== '''准备编译''' ==
  
=== 复制源码包到开发主机中(copy source code package to development host) ===
+
=== 复制源码包到开发主机中 ===
 
将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
 
将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
<span style="background:#CCCCCC">copy“u-boot source code”downloaded to “~/my-imx6/02_source”of Linux development host。</span><br>
 
 
这一步自己采取相应的方式完成。<br>
 
这一步自己采取相应的方式完成。<br>
<span style="background:#CCCCCC">complete this step by yourself in a proper way。</span><br>
 
  
  
=== 解压u-boot源码包(decompress u-boot source code package) ===
+
=== 解压u-boot源码包 ===
 
$ cd ~/my-imx6/02_source/<br>
 
$ cd ~/my-imx6/02_source/<br>
 
$ tar xf u-boot-2016.03__svn121.tar.xz<br>
 
$ tar xf u-boot-2016.03__svn121.tar.xz<br>
第163行: 第129行:
  
  
== '''编译(compilation)''' ==
+
== '''编译''' ==
=== 使编译配置文件生效(validate compiler configuration file) ===
+
=== 使编译配置文件生效===
 
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
[[文件:myimx6linux3.14_build_5.2.1.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.1.1.png]]<br>
  
  
=== 进入u-boot源码目录(enter u-boot source code directory) ===
+
=== 进入u-boot源码目录 ===
 
$ cd ~/my-imx6/02_source/u-boot-2016.03<br>
 
$ cd ~/my-imx6/02_source/u-boot-2016.03<br>
 
[[文件:myimx6linux3.14_build_5.2.2.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.2.1.png]]<br>
  
  
=== 清除u-boot临时文件 (remove u-boot temporary files)===
+
=== 清除u-boot临时文件 ===
 
$ make distclean <br>
 
$ make distclean <br>
 
[[文件:myimx6linux3.14_build_5.2.3.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.3.1.png]]<br>
第181行: 第147行:
 
=== 配置u-boot(configure u-boot) ===
 
=== 配置u-boot(configure u-boot) ===
 
* 评估板及对应的 u-boot 编译配置:<br>
 
* 评估板及对应的 u-boot 编译配置:<br>
<span style="background:#CCCCCC">configuration of development and its corresponding compiler:</span><br>
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!评估板主型号<br>(development board main model) || CPU类型-内存容量<br>(CPU type-memory capacity ) || 处理器架构<br>(architeture of processor) || 对应的u-boot配置<br>(corresponding u-boot configuration)
+
!评估板主型号<br>(development board main model) || CPU类型-内存容量 || 处理器架构 || 对应的u-boot配置
 
|-
 
|-
 
|rowspan=7|MY-IMX6-EK200  
 
|rowspan=7|MY-IMX6-EK200  
第237行: 第202行:
  
 
*MYIMX6EK200-6Q-1G配置示例:<br>
 
*MYIMX6EK200-6Q-1G配置示例:<br>
<span style="background:#CCCCCC">MYIMX6EK200-6Q-1G configuration example:</span><br>
 
 
$ make myimx6ek200-6q_defconfig <br>
 
$ make myimx6ek200-6q_defconfig <br>
 
[[文件:myimx6linux3.14_build_5.2.4.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.4.1.png]]<br>
  
=== 执行编译(execute compilation) ===
+
=== 执行编译 ===
 
$ make <br>
 
$ make <br>
 
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。<br>
 
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。<br>
<span style="background:#CCCCCC">Tips:To speed up the compilation,add "-j4" after make.The Linux host used to compile is dual-core ,4 threads .So "-j" is followed by 4, which takes 4 threads to compile. The number behind "-j" is allocated based on system resources,but It should not exceed the maximum threads the host support.</span><br>
 
 
[[文件:myimx6linux3.14_build_5.2.5.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.5.1.png]]<br>
  
 
* 编译完成<br>
 
* 编译完成<br>
<span style="background:#CCCCCC">complete compilation</span><br>
 
 
提示:u-boot编译过程大概需要一、两分钟时间。<br>
 
提示:u-boot编译过程大概需要一、两分钟时间。<br>
<span style="background:#CCCCCC">Tips: u-boot compiling process may take one or two minutes。</span><br>
 
 
[[文件:myimx6linux3.14_build_5.2.5.2.png]]<br>
 
[[文件:myimx6linux3.14_build_5.2.5.2.png]]<br>
  
  
== '''目标文件(target file)''' ==
+
== '''目标文件''' ==
 
* 编译文件<br>
 
* 编译文件<br>
<span style="background:#CCCCCC">compile file</span><br>
 
 
编译完成后通过ls命令即可看到编译得到的文件u-boot.imx<br>
 
编译完成后通过ls命令即可看到编译得到的文件u-boot.imx<br>
<span style="background:#CCCCCC">you can get the compiled file u-boot .imx  with ls command after compilation.</span><br>
 
 
$ ls <br>
 
$ ls <br>
 
[[文件:myimx6linux3.14_build_5.3.0.1.png]]<br>
 
[[文件:myimx6linux3.14_build_5.3.0.1.png]]<br>
  
 
* 目标文件<br>
 
* 目标文件<br>
<span style="background:#CCCCCC">target file</span><br>
 
 
MY-IMX6系列评估板的u-boot配置对应的目标文件名见下表:<br>
 
MY-IMX6系列评估板的u-boot配置对应的目标文件名见下表:<br>
<span style="background:#CCCCCC">The corresponding target file name for u-boot configuration of MY-IMX6 series evaluation board is shown in the table below:</span><br>
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!u-boot配置<br>(u-boot configuration) || 目标文件<br>(target file)
+
!u-boot配置 || 目标文件
 
|-
 
|-
 
|myimx6ek200-6qp_defconfig || uboot-myimx6ek200-6qp.imx
 
|myimx6ek200-6qp_defconfig || uboot-myimx6ek200-6qp.imx
第322行: 第279行:
  
 
我们需要将编译得到的u-boot.imx复制为我们的目标文件名。<br>
 
我们需要将编译得到的u-boot.imx复制为我们的目标文件名。<br>
<span style="background:#CCCCCC">We need to copy the compilied file u-boot.imx as our target file name.:</span><br>
 
 
这里以MY-IMX6-EK200-6Q为例(把配置myimx6ek200-6q_defconfig编译生成的u-boot.imx复制为目标文件):<br>
 
这里以MY-IMX6-EK200-6Q为例(把配置myimx6ek200-6q_defconfig编译生成的u-boot.imx复制为目标文件):<br>
<span style="background:#CCCCCC">Copy  the generated file u-boot.imx from the compilation  of  myimx6ek200-6q_defconfig as target file.):</span><br>
 
 
$ cp u-boot.imx ~/my-imx6/04_image/image-linux-4115/uboot-myimx6ek200-6q.imx<br>
 
$ cp u-boot.imx ~/my-imx6/04_image/image-linux-4115/uboot-myimx6ek200-6q.imx<br>
 
[[文件:myimx6linux3.14_build_5.3.0.2.png]]<br>
 
[[文件:myimx6linux3.14_build_5.3.0.2.png]]<br>
  
= '''编译内核(compile kernel)''' =
+
= '''编译内核''' =
 
----
 
----
== '''准备编译(prepare compilation)''' ==
+
== '''准备编译''' ==
=== 复制源码包到开发主机中(copy source code package to development host) ===
+
=== 复制源码包到开发主机中 ===
 
将下载的“linux源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
 
将下载的“linux源码”复制到Linux开发主机的“~/my-imx6/02_source”。<br>
<span style="background:#CCCCCC">copy “linux source code”downloaded to “~/my-imx6/02_source”of Linux development host。</span><br>
 
 
这一步自己采取相应的方式完成。<br>
 
这一步自己采取相应的方式完成。<br>
<span style="background:#CCCCCC">complete this step by yourself in a proper way。</span><br>
 
  
  
=== 解压linux源码包(decompress linux source code package) ===
+
=== 解压linux源码包===
 
$ cd ~/my-imx6/02_source/<br>
 
$ cd ~/my-imx6/02_source/<br>
 
$ tar xf linux-4.1.15__svn189.tar.xz<br>
 
$ tar xf linux-4.1.15__svn189.tar.xz<br>
第344行: 第297行:
  
  
== '''内核编译配置(kernel compilation configuration)''' ==
+
== '''内核编译配置''' ==
=== 使编译配置文件生效(validate compilfer configuration file) ===
+
=== 使编译配置文件生效 ===
 
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
[[文件:myimx6linux3.14_build_6.2.1.1.png]]<br>
 
[[文件:myimx6linux3.14_build_6.2.1.1.png]]<br>
  
  
=== 清除内核临时文件(remove kernel temporary file) ===
+
=== 清除内核临时文件 ===
 
* 进入linux源码目录<br>
 
* 进入linux源码目录<br>
<span style="background:#CCCCCC">enter linux source code directory</span><br>
 
 
$ cd ~/my-imx6/02_source/linux-4.1.15<br>
 
$ cd ~/my-imx6/02_source/linux-4.1.15<br>
 
[[文件:myimx6linux3.14_build_6.2.2.1.png]]<br>
 
[[文件:myimx6linux3.14_build_6.2.2.1.png]]<br>
  
 
* 清除临时文件<br>
 
* 清除临时文件<br>
<span style="background:#CCCCCC">remove temporary file</span><br>
 
 
$ make distclean <br>
 
$ make distclean <br>
 
[[文件:myimx6linux3.14_build_6.2.2.2.png]]<br>
 
[[文件:myimx6linux3.14_build_6.2.2.2.png]]<br>
  
  
=== 内核配置(kernel configuration) ===
+
=== 内核配置===
 
*内核配置文件
 
*内核配置文件
<span style="background:#CCCCCC">kernel configuration file</span><br>
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!评估板型号<br>(evaluation board model) || 配置文件<br>(configuration file)
+
!评估板型号 || 配置文件
 
|-
 
|-
 
|MY-IMX6-EK200 || rowspan=3|myimx6a9_defconfig
 
|MY-IMX6-EK200 || rowspan=3|myimx6a9_defconfig
第379行: 第329行:
 
$ make myimx6a9_defconfig <br>
 
$ make myimx6a9_defconfig <br>
 
如果是编译 MY-IMX6-EK140 的内核,请使用 $ make myimx6a7_defconfig <br>
 
如果是编译 MY-IMX6-EK140 的内核,请使用 $ make myimx6a7_defconfig <br>
<span style="background:#CCCCCC">if what compified is kernel of MY-IMX6-EK140,please use $ make myimx6a7_defconfig</span><br>
 
 
这里以 myimx6a9_defconfig 为例。<br>
 
这里以 myimx6a9_defconfig 为例。<br>
<span style="background:#CCCCCC">take myimx6a9_defconfig as an example。</span><br>
 
 
[[文件:myimx6linux3.14_build_6.2.3.1.png]]<br>
 
[[文件:myimx6linux3.14_build_6.2.3.1.png]]<br>
  
  
== '''编译内核(compife kernel)''' ==
+
== '''编译内核''' ==
 
* 执行编译 <br>
 
* 执行编译 <br>
<span style="background:#CCCCCC">execute compilation</span><br>
 
 
$ make zImage <br>
 
$ make zImage <br>
 
[[文件:Myimx6linux3.14_build_6.3.0.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.1.png]]<br>
  
 
* 编译完成<br>
 
* 编译完成<br>
<span style="background:#CCCCCC">complete compilation</span><br>
 
 
[[文件:Myimx6linux3.14_build_6.3.0.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.2.png]]<br>
  
 
* 目标文件 <br>
 
* 目标文件 <br>
<span style="background:#CCCCCC">target file</span><br>
 
 
arch/arm/boot/zImage即为编译得到的内核文件,使用ls命令可查看文件信息。<br>
 
arch/arm/boot/zImage即为编译得到的内核文件,使用ls命令可查看文件信息。<br>
<span style="background:#CCCCCC">arch/arm/boot/zImage is the kernel file compifed,you can check file information with ls command。</span><br>
 
 
$ ls arch/arm/boot/zImage -la <br>
 
$ ls arch/arm/boot/zImage -la <br>
 
[[文件:Myimx6linux3.14_build_6.3.0.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.3.0.3.png]]<br>
  
 
注意:我们烧录及启动的内核文件名为“zImage-myimx6a9”或“zImage-myimx6a7”,所以我们需要把zImage复制为zImage-myimx6a9或zImage-myimx6a7。<br>
 
注意:我们烧录及启动的内核文件名为“zImage-myimx6a9”或“zImage-myimx6a7”,所以我们需要把zImage复制为zImage-myimx6a9或zImage-myimx6a7。<br>
<span style="background:#CCCCCC">Note: The kernel file name which is going to be programed and started is “zImage-myimx6” or “zImage-myimx6a7”, So we should copy zImage as zImage-myimx6a9 or zImage-myimx6a7<br>
 
 
$ cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-4115/zImage-myimx6a9  (A9)<br>
 
$ cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-4115/zImage-myimx6a9  (A9)<br>
 
或<br>
 
或<br>
第410行: 第353行:
  
  
== '''编译设备树(compife device tree)''' ==
+
== '''编译设备树''' ==
 
评估板型号规格与设备树文件对应关系见下表:<br>
 
评估板型号规格与设备树文件对应关系见下表:<br>
<span style="background:#CCCCCC">The correspondence between the type of evaluation board and device tree is shown below:</span><br>
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! 评估板主型号<br>(development main model) || CPU类型-内存容量<br>(CPU type-memory capacity) || 对应的设备树文件<br>(corresponding device tree file)
+
! 评估板主型号 || CPU类型-内存容量 || 对应的设备树文件
 
|-
 
|-
 
|rowspan=7|MY-IMX6-EK200  
 
|rowspan=7|MY-IMX6-EK200  
第476行: 第418行:
  
 
*以MY-IMX6-EK200-6Q-1G为例<br>
 
*以MY-IMX6-EK200-6Q-1G为例<br>
<span style="background:#CCCCCC">take MY-IMX6-EK200-6Q-1G as example</span><br>
 
 
$ make myimx6ek200-6q.dtb<br>
 
$ make myimx6ek200-6q.dtb<br>
 
[[文件:Myimx6linux3.14_build_6.4.0.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.4.0.1.png]]<br>
  
 
*目标文件  <br>
 
*目标文件  <br>
<span style="background:#CCCCCC">target file</span><br>
 
 
使用ls命令可查看编译得到的目标设备树文件信息: <br>
 
使用ls命令可查看编译得到的目标设备树文件信息: <br>
<span style="background:#CCCCCC">You can browse the target device tree file information from compilation with ls command:</span><br>
 
 
$ ls arch/arm/boot/dts/myimx6ek*.dtb <br>
 
$ ls arch/arm/boot/dts/myimx6ek*.dtb <br>
 
[[文件:Myimx6linux3.14_build_6.4.0.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.4.0.2.png]]<br>
  
 
复制设备树文件到镜像目录 <br>
 
复制设备树文件到镜像目录 <br>
<span style="background:#CCCCCC">Copy device tree file to image directory</span><br>
 
 
$ cp arch/arm/boot/dts/myimx6ek*.dtb ~/my-imx6/04_image/image-linux-4115/  <br>
 
$ cp arch/arm/boot/dts/myimx6ek*.dtb ~/my-imx6/04_image/image-linux-4115/  <br>
 
[[文件:Myimx6linux3.14_build_6.4.0.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.4.0.3.png]]<br>
  
== '''编译模块 (compife module)''' ==
+
== '''编译模块 ''' ==
 
* 编译模块命令 <br>
 
* 编译模块命令 <br>
<span style="background:#CCCCCC">compile module command</span><br>
 
 
$ make modules<br>
 
$ make modules<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.1.png]]<br>
  
 
* 安装模块到指定目录<br>
 
* 安装模块到指定目录<br>
<span style="background:#CCCCCC">Install module to the specified directory</span><br>
 
 
$ make modules_install INSTALL_MOD_PATH=./modules<br>
 
$ make modules_install INSTALL_MOD_PATH=./modules<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_6.5.0.2.png]]<br>
  
 
* 打包模块文件<br>
 
* 打包模块文件<br>
<span style="background:#CCCCCC">package the module file</span><br>
 
 
$ cd modules<br>
 
$ cd modules<br>
 
$ tar cjf ../modules.tar.bz2 *<br>
 
$ tar cjf ../modules.tar.bz2 *<br>
第510行: 第445行:
  
 
* 复制模块包到镜像目录<br>
 
* 复制模块包到镜像目录<br>
<span style="background:#CCCCCC">Copy module package to image directory</span><br>
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!评估板型号<br>(development board model) || 目标模块包<br>(target module package)
+
!评估板型号 || 目标模块包
 
|-
 
|-
 
|MY-IMX6-EK200 || rowspan=3|kernel-modules-myimx6a9.tar.bz2
 
|MY-IMX6-EK200 || rowspan=3|kernel-modules-myimx6a9.tar.bz2
第526行: 第460行:
 
$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-4115/kernel-modules-myimx6a9.tar.bz2<br>
 
$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-4115/kernel-modules-myimx6a9.tar.bz2<br>
 
注意:如果是编译内核时配置文件使用的是 myimx6a9_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6a9.tar.bz2;如果是编译内核时配置文件使用的是 myimx6a7_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6a7.tar.bz2<br>
 
注意:如果是编译内核时配置文件使用的是 myimx6a9_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6a9.tar.bz2;如果是编译内核时配置文件使用的是 myimx6a7_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6a7.tar.bz2<br>
<span style="background:#CCCCCC">Note:when you compile the Kernel If the configuration file you use is myimx6a9_defconfig, here you should Copy modules.tar.bz2 as kernel-modules-myimx6a9.tar.bz2.If the configuration file is myimx6a7_defconfig,you should Copy modules.tar.bz2 as kernel-modules-myimx6a7.tar.bz2.</span><br>
 
  
  
= '''应用程序编译(application compilation)''' =
+
= '''应用程序编译''' =
 
----
 
----
== '''Linux应用程序编译(Linux application compilation)''' ==
+
== '''Linux应用程序编译''' ==
  
=== 编写应用程序(write an application) ===
+
=== 编写应用程序  ===
 
* 创建应用程序的源码目录和Linux-4.1.15的可执行程序目录<br>
 
* 创建应用程序的源码目录和Linux-4.1.15的可执行程序目录<br>
<span style="background:#CCCCCC">Create application source code directory and Linux-4.1.15 executable program directory</span><br>
 
 
$ mkdir ~/my-demo/source_code -p<br>
 
$ mkdir ~/my-demo/source_code -p<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.1.png]]<br>
第543行: 第475行:
  
 
* 编写源代码<br>
 
* 编写源代码<br>
<span style="background:#CCCCCC">write source code</span><br>
 
 
$ cd ~/my-demo/source_code<br>
 
$ cd ~/my-demo/source_code<br>
 
$ vi hello.c<br>
 
$ vi hello.c<br>
  
 
写入以下代码并保存 <br>
 
写入以下代码并保存 <br>
<span style="background:#CCCCCC">write following code and save</span><br>
 
 
#include <stdio.h> <br>
 
#include <stdio.h> <br>
 
<br>
 
<br>
第558行: 第488行:
 
} <br>
 
} <br>
 
* 查看代码 <br>
 
* 查看代码 <br>
<span style="background:#CCCCCC">view code</span><br>
 
 
[[文件:Myimx6linux3.14_build_8.1.1.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.1.3.png]]<br>
  
 
$ cat hello.c<br>
 
$ cat hello.c<br>
  
=== 编译应用程序(compife application) ===
+
=== 编译应用程序  ===
 
* 配置环境变量<br>
 
* 配置环境变量<br>
<span style="background:#CCCCCC">Configure environment variables</span><br>
 
 
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.1.png]]<br>
  
 
* 编译 <br>
 
* 编译 <br>
<span style="background:#CCCCCC">compife</span><br>
 
 
$ ${CROSS_COMPILE}gcc hello.c -o hello.out<br>
 
$ ${CROSS_COMPILE}gcc hello.c -o hello.out<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.2.png]]<br>
 
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。 <br>
 
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。 <br>
<span style="background:#CCCCCC">Note:The above command contains “$”,which is “${CROSS_COMPILE}gcc”. It is the environment variable generated when referring to our source.。 </span><br>
 
  
 
* 目标文件 <br>
 
* 目标文件 <br>
<span style="background:#CCCCCC">target file</span><br>
 
 
$ file hello.out<br>
 
$ file hello.out<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.3.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.2.3.png]]<br>
 
可以看到目标文件 hello.out 的属性。<br>
 
可以看到目标文件 hello.out 的属性。<br>
<span style="background:#CCCCCC">you can see the property of target file hello.out。</span><br>
 
  
  
=== 保存目标可执行文件(save target executable file) ===
+
=== 保存目标可执行文件 ===
 
$ mv hello.out ~/my-demo/bin-l31452/<br>
 
$ mv hello.out ~/my-demo/bin-l31452/<br>
 
[[文件:Myimx6linux3.14_build_8.1.3.1.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.1.3.1.png]]<br>
  
  
== '''应用程序打包(package application)''' ==
+
== '''应用程序打包''' ==
=== 说明(instruction) ===
+
=== 说明 ===
烧录工具支持烧录“my-demo.tar.xz”的文件包到评估板。所以在这里我们把我们需要的应用程序打包为“my-demo.tar.xz”。至于“my-demo.tar.xz”会被烧录到哪个位置,请看[[MY-IMX6 MfgTool 烧录指导手册|《烧录手册》]]。<br>
+
烧录工具支持烧录“my-demo.tar.xz”的文件包到评估板。所以在这里我们把我们需要的应用程序打包为“my-demo.tar.xz”。至于“my-demo.tar.xz”会被烧录到哪个位置,请看[[MY-IMX6 MfgTool-v2.6 烧录指导手册|《烧录手册》]]。<br>
<span style="background:#CCCCCC">Programming tool supports to program “my-demo.tar.xz” file package to evaluation board.So We package applications We need as “my-demo.tar.xz”.while where  “my-demo.tar.xz” will be programmed ,refer to [[MY-IMX6 MfgTool 烧录指导手册|《programming manual》]]。</span><br>
 
  
  
=== 打包应用程序(package application) ===
+
=== 打包应用程序 ===
 
1)打包<br>
 
1)打包<br>
<span style="background:#CCCCCC">package</span><br>
 
 
这里我们将整个my-demo目录打包。<br>
 
这里我们将整个my-demo目录打包。<br>
<span style="background:#CCCCCC">Here We package the whole my-demo directory。</span><br>
 
 
$ cd ~<br>
 
$ cd ~<br>
 
$ tar cjf my-demo.tar.bz2 my-demo<br>
 
$ tar cjf my-demo.tar.bz2 my-demo<br>
第605行: 第526行:
  
 
2)复制应用程序包为目标烧录文件<br>
 
2)复制应用程序包为目标烧录文件<br>
<span style="background:#CCCCCC">Copy application package as target programming file</span><br>
 
 
$ cp my-demo.tar.bz2 ~/my-imx6/04_image/image-linux-31452/<br>
 
$ cp my-demo.tar.bz2 ~/my-imx6/04_image/image-linux-31452/<br>
 
[[文件:Myimx6linux3.14_build_8.3.2.2.png]]<br>
 
[[文件:Myimx6linux3.14_build_8.3.2.2.png]]<br>
  
  
= '''目标烧录文件(target programming file)''' =
+
= '''目标烧录文件''' =
 
----
 
----
 
至此,我们在“~/my-imx6/04_image/image-linux-31452/”得到了除文件系统以外的一套烧录文件。包括“uboot*.imx”、“myimx6*.dtb”、“zImage-myimx6”、“kernel-modules.tar.bz2”、“my-demo.tar.bz2”。<br>
 
至此,我们在“~/my-imx6/04_image/image-linux-31452/”得到了除文件系统以外的一套烧录文件。包括“uboot*.imx”、“myimx6*.dtb”、“zImage-myimx6”、“kernel-modules.tar.bz2”、“my-demo.tar.bz2”。<br>
<span style="background:#CCCCCC">So far,we get a set of programming file except file system from“~/my-imx6/04_image/image-linux-31452/”。including“uboot*.imx”、“myimx6*.dtb”、“zImage-myimx6”、“kernel-modules.tar.bz2”、“my-demo.tar.bz2”。</span><br>
+
现在可以参照[[MY-IMX6 MfgTool-v2.6 烧录指导手册|《烧录手册》]]烧录我们自己编译出来的image了。<br>
现在可以参照[[MY-IMX6 MfgTool 烧录指导手册|《烧录手册》]]烧录我们自己编译出来的image了。<br>
+
 
<span style="background:#CCCCCC">Now we can program the image we compiled by ourselves referring to [[MY-IMX6 MfgTool 烧录指导手册|《programming manual》]].</span><br>
 
 
</div>
 
</div>

2018年7月27日 (五) 09:38的版本

文档说明


系统环境说明

  • 编译主机CPU架构:64位
  • 编译主机系统:Linux
  • Linux发行版:Ubuntu
  • Ubuntu版本类型:服务器版
  • Ubuntu版本号:12.04.5
  • Ubuntu系统类型:x86-64

  注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。


操作说明

1)文档中以“$”开头的行,其后是Linux命令。

2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。

3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。

4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。

5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。

6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。


截图说明

为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。

图片中的Linux命令

在文档的图片中观察“myzr$”开头的行可以直观的看到输入的Linux命令。


重要信息说明

为避免各位客户在搭建开发环境及编译过程中遇到不必要的问题浪费时间和精力,推荐使用明远智睿发布的“vb43-u12045-serv-amd64”虚拟机系统。


具体参见 MYZR虚拟机系统指导

准备源码及相关文件


源码文件

评估板对应的Linux版本及对应的源码文件见下表:

评估板型号 u-boot源码文件 linux源码文件
MY-IMX6-EK200 u-boot-2016.03__svn121.tar.xz linux-4.1.15__svn189.tar.xz
MY-IMX6-EK314
MY-IMX6-EK336
MY-IMX6-EK140


交叉编译工具文件

Linux程序交叉编译工具:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz

Linux交叉编译工具配置文件:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env


创建工作目录

1)源码目录
$ mkdir ~/my-imx6/02_source –p
Myimx6linux3.14 build 2.3.0.1.png

2)工具目录
$ mkdir ~/my-imx6/03_tools –p
Myimx6linux3.14 build 2.3.0.2.png

3)镜像目录
$ mkdir ~/my-imx6/04_image –p
Myimx6linux3.14 build 2.3.0.3.png
$ mkdir ~/my-imx6/04_image/image-linux-4115 –p
Myimx6linux3.14 build 2.3.0.4.png

4)应用程序目录
$ mkdir ~/my-demo
Myimx6linux3.14 build 2.3.0.5.png


安装交叉编译工具链


安装Linux交叉编译工具链

1)进入交叉编译工具链目录
$ cd ~/my-imx6/03_tools/

2)复制Linux交叉编译工具到目录
将gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。

3)解压Linux交叉编译工具
$ tar xf gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar
Myimx6linux3.14 build 4.1.0.1.png

4)复制交叉编译工具配置文件
将gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env复制到“~/my-imx6/03_tools”,这一步自己采取相应的方式完成。

5)检查安装
$ source gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
$ ${CROSS_COMPILE}gcc –v
Myimx6linux3.14 build 4.1.0.2.png


U-Boot编译


准备编译

复制源码包到开发主机中

将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx6/02_source”。
这一步自己采取相应的方式完成。


解压u-boot源码包

$ cd ~/my-imx6/02_source/
$ tar xf u-boot-2016.03__svn121.tar.xz
Myimx6linux3.14 build 5.1.2.1.png


编译

使编译配置文件生效

$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
Myimx6linux3.14 build 5.2.1.1.png


进入u-boot源码目录

$ cd ~/my-imx6/02_source/u-boot-2016.03
Myimx6linux3.14 build 5.2.2.1.png


清除u-boot临时文件

$ make distclean
Myimx6linux3.14 build 5.2.3.1.png


配置u-boot(configure u-boot)

  • 评估板及对应的 u-boot 编译配置:
评估板主型号
(development board main model)
CPU类型-内存容量 处理器架构 对应的u-boot配置
MY-IMX6-EK200 i.MX 6QuadPlus - 1G Cortex-A9 myimx6ek200-6qp_defconfig
i.MX 6QuadPlus - 2G Cortex-A9 myimx6ek200-6qp-2g_defconfig
i.MX6 Quad - 1G Cortex-A9 myimx6ek200-6q_defconfig
i.MX6 Quad - 2G Cortex-A9 myimx6ek200-6q-2g_defconfig
i.MX6 DualLite - 1G Cortex-A9 myimx6ek200-6u_defconfig
i.MX 6Solo - 512M Cortex-A9 myimx6ek200-6s_defconfig
i.MX 6Solo - 1G Cortex-A9 myimx6ek200-6s-1g_defconfig
MY-IMX6-EK314 i.MX 6QuadPlus - 1G Cortex-A9 myimx6ek200-6qp_defconfig
i.MX 6QuadPlus - 2G Cortex-A9 myimx6ek200-6qp-2g_defconfig
i.MX6 Quad- 1G Cortex-A9 myimx6ek314-6q_defconfig
i.MX6 Quad- 2G Cortex-A9 myimx6ek314-6q-2g_defconfig
i.MX6 DualLite - 1G Cortex-A9 myimx6ek314-6u_defconfig
MY-IMX6-EK336 i.MX 6QuadPlus - 1G Cortex-A9 myimx6ek336-6qp_defconfig
i.MX 6QuadPlus - 2G Cortex-A9 myimx6ek336-6qp-2g_defconfig
i.MX6 Quad- 1G Cortex-A9 myimx6ek336-6q_defconfig
i.MX6 Quad- 2G Cortex-A9 myimx6ek336-6q-2g_defconfig
MY-IMX6-EK140 i.MX 6UltraLite-256M Cortex-A7 myimx6ek140-6g_defconfig
i.MX 6UltraLite-512M Cortex-A7 myimx6ek140-6g-512m_defconfig
i.MX 6UltraLite Full - 256M Cortex-A7 myimx6ek140p-6g_defconfig
i.MX 6UltraLite Full - 512M Cortex-A7 myimx6ek140p-6g-512m_defconfig
i.MX 6UlltraLite Full - 256M Cortex-A7 myimx6ek140p-6y_defconfig
i.MX 6UlltraLite Full - 512M Cortex-A7 myimx6ek140p-6y-512m_defconfig
  • MYIMX6EK200-6Q-1G配置示例:

$ make myimx6ek200-6q_defconfig
Myimx6linux3.14 build 5.2.4.1.png

执行编译

$ make
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。
Myimx6linux3.14 build 5.2.5.1.png

  • 编译完成

提示:u-boot编译过程大概需要一、两分钟时间。
Myimx6linux3.14 build 5.2.5.2.png


目标文件

  • 编译文件

编译完成后通过ls命令即可看到编译得到的文件u-boot.imx
$ ls
Myimx6linux3.14 build 5.3.0.1.png

  • 目标文件

MY-IMX6系列评估板的u-boot配置对应的目标文件名见下表:

u-boot配置 目标文件
myimx6ek200-6qp_defconfig uboot-myimx6ek200-6qp.imx
myimx6ek200-6qp-2g_defconfig uboot-myimx6ek200-6qp-2g.imx
myimx6ek200-6q_defconfig uboot-myimx6ek200-6q.imx
myimx6ek200-6q-2g_defconfig uboot-myimx6ek200-6q-2g.imx
myimx6ek200-6u_defconfig uboot-myimx6ek200-6u.imx
myimx6ek200-6s_defconfig uboot-myimx6ek200-6s.imx
myimx6ek200-6s-1g_defconfig uboot-myimx6ek200-6s-1g.imx
myimx6ek314-6qp_defconfig uboot-myimx6ek314-6qp.imx
myimx6ek314-6qp-2g_defconfig uboot-myimx6ek314-6qp-2g.imx
myimx6ek314-6q_defconfig uboot-myimx6ek314-6q.imx
myimx6ek314-6q-2g_defconfig uboot-myimx6ek314-6q-2g.imx
myimx6ek314-6u_defconfig uboot-myimx6ek314-6u.imx
myimx6ek336-6qp_defconfig uboot-myimx6ek336-6qp.imx
myimx6ek336-6qp-2g_defconfig uboot-myimx6ek336-6qp-2g.imx
myimx6ek336-6q_defconfig uboot-myimx6ek336-6q.imx
myimx6ek336-6q-2g_defconfig uboot-myimx6ek336-6q-2g.imx
myimx6ek140-6g_defconfig uboot-myimx6ek140-6g.imx
myimx6ek140-6g-512m_defconfig uboot-myimx6ek140-6g-512m.imx
myimx6ek140p-6g_defconfig uboot-myimx6ek140p-6g.imx
myimx6ek140p-6g-512m_defconfig uboot-myimx6ek140p-6g-512m.imx
myimx6ek140p-6y_defconfig uboot-myimx6ek140p-6y.imx
myimx6ek140p-6y-512m_defconfig uboot-myimx6ek140p-6y-512m.imx

我们需要将编译得到的u-boot.imx复制为我们的目标文件名。
这里以MY-IMX6-EK200-6Q为例(把配置myimx6ek200-6q_defconfig编译生成的u-boot.imx复制为目标文件):
$ cp u-boot.imx ~/my-imx6/04_image/image-linux-4115/uboot-myimx6ek200-6q.imx
Myimx6linux3.14 build 5.3.0.2.png

编译内核


准备编译

复制源码包到开发主机中

将下载的“linux源码”复制到Linux开发主机的“~/my-imx6/02_source”。
这一步自己采取相应的方式完成。


解压linux源码包

$ cd ~/my-imx6/02_source/
$ tar xf linux-4.1.15__svn189.tar.xz
Myimx6linux3.14 build 6.1.2.1.png


内核编译配置

使编译配置文件生效

$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
Myimx6linux3.14 build 6.2.1.1.png


清除内核临时文件

  • 进入linux源码目录

$ cd ~/my-imx6/02_source/linux-4.1.15
Myimx6linux3.14 build 6.2.2.1.png

  • 清除临时文件

$ make distclean
Myimx6linux3.14 build 6.2.2.2.png


内核配置

  • 内核配置文件
评估板型号 配置文件
MY-IMX6-EK200 myimx6a9_defconfig
MY-IMX6-EK314
MY-IMX6-EK336
MY-IMX6-EK140 myimx6a7_defconfig

$ make myimx6a9_defconfig
如果是编译 MY-IMX6-EK140 的内核,请使用 $ make myimx6a7_defconfig
这里以 myimx6a9_defconfig 为例。
Myimx6linux3.14 build 6.2.3.1.png


编译内核

  • 执行编译

$ make zImage
Myimx6linux3.14 build 6.3.0.1.png

  • 编译完成

Myimx6linux3.14 build 6.3.0.2.png

  • 目标文件

arch/arm/boot/zImage即为编译得到的内核文件,使用ls命令可查看文件信息。
$ ls arch/arm/boot/zImage -la
Myimx6linux3.14 build 6.3.0.3.png

注意:我们烧录及启动的内核文件名为“zImage-myimx6a9”或“zImage-myimx6a7”,所以我们需要把zImage复制为zImage-myimx6a9或zImage-myimx6a7。
$ cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-4115/zImage-myimx6a9 (A9)

$ cp arch/arm/boot/zImage ~/my-imx6/04_image/image-linux-4115/zImage-myimx6a7 (A7)
Myimx6linux3.14 build 6.3.0.4.png


编译设备树

评估板型号规格与设备树文件对应关系见下表:

评估板主型号 CPU类型-内存容量 对应的设备树文件
MY-IMX6-EK200 i.MX 6QuadPlus - 1G myimx6ek200-6qp.dtb
i.MX 6QuadPlus - 2G myimx6ek200-6qp-2g.dtb
i.MX6 Quad - 1G myimx6ek200-6q.dtb
i.MX6 Quad - 2G myimx6ek200-6q-2g.dtb
i.MX6 DualLite - 1G myimx6ek200-6u.dtb
i.MX 6Solo - 512M myimx6ek200-6s.dtb
i.MX 6Solo - 1G myimx6ek200-6s-1g.dtb
MY-IMX6-EK314 i.MX 6QuadPlus - 1G myimx6ek314-6qp.dtb
i.MX 6QuadPlus - 2G myimx6ek314-6qp-2g.dtb
i.MX6 Quad - 1G myimx6ek314-6q.dtb
i.MX6 Quad - 2G myimx6ek314-6q-2g.dtb
i.MX6 DualLite - 1G myimx6ek314-6u.dtb
MY-IMX6-EK336 i.MX 6QuadPlus - 1G myimx6ek336-6qp.dtb
i.MX 6QuadPlus - 2G myimx6ek336-6qp-2g.dtb
i.MX6 Quad - 1G myimx6ek336-6q.dtb
i.MX6 Quad - 2G myimx6ek336-6q-2g.dtb
MY-IMX6-EK140 i.MX 6UltraLite-256M myimx6ek140-6g.dtb
i.MX 6UltraLite-512M myimx6ek140-6g-512m.dtb
i.MX 6UltraLite Full - 256M (2eth) myimx6ek140p-6g.dtb
i.MX 6UltraLite Full - 256M (8uart) myimx6ek140p-6g-8uart.dtb
i.MX 6UltraLite Full - 512M (2eth) myimx6ek140p-6g-512m.dtb
i.MX 6UltraLite Full - 512M (8uart) myimx6ek140p-6g-512m-8uart.dtb
i.MX 6UlltraLite Full - 256M (2eth) myimx6ek140p-6y.dtb
i.MX 6UlltraLite Full - 256M (8uart)) myimx6ek140p-6y-8uart.dtb
i.MX 6UlltraLite Full - 512M (2eth) myimx6ek140p-6y-512m.dtb
i.MX 6UlltraLite Full - 512M (8uart) myimx6ek140p-6y-512m-8uart.dtb
  • 以MY-IMX6-EK200-6Q-1G为例

$ make myimx6ek200-6q.dtb
Myimx6linux3.14 build 6.4.0.1.png

  • 目标文件

使用ls命令可查看编译得到的目标设备树文件信息:
$ ls arch/arm/boot/dts/myimx6ek*.dtb
Myimx6linux3.14 build 6.4.0.2.png

复制设备树文件到镜像目录
$ cp arch/arm/boot/dts/myimx6ek*.dtb ~/my-imx6/04_image/image-linux-4115/
Myimx6linux3.14 build 6.4.0.3.png

编译模块

  • 编译模块命令

$ make modules
Myimx6linux3.14 build 6.5.0.1.png

  • 安装模块到指定目录

$ make modules_install INSTALL_MOD_PATH=./modules
Myimx6linux3.14 build 6.5.0.2.png

  • 打包模块文件

$ cd modules
$ tar cjf ../modules.tar.bz2 *
Myimx6linux3.14 build 6.5.0.3.png

  • 复制模块包到镜像目录
评估板型号 目标模块包
MY-IMX6-EK200 kernel-modules-myimx6a9.tar.bz2
MY-IMX6-EK314
MY-IMX6-EK336
MY-IMX6-EK140 kernel-modules-myimx6a7.tar.bz2

$ cp ../modules.tar.bz2 ~/my-imx6/04_image/image-linux-4115/kernel-modules-myimx6a9.tar.bz2
注意:如果是编译内核时配置文件使用的是 myimx6a9_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6a9.tar.bz2;如果是编译内核时配置文件使用的是 myimx6a7_defconfig,在这里要把 modules.tar.bz2 复制为 kernel-modules-myimx6a7.tar.bz2


应用程序编译


Linux应用程序编译

编写应用程序

  • 创建应用程序的源码目录和Linux-4.1.15的可执行程序目录

$ mkdir ~/my-demo/source_code -p
Myimx6linux3.14 build 8.1.1.1.png

$ mkdir ~/my-demo/bin-l4115 -p
Myimx6linux3.14 build 8.1.1.2.png

  • 编写源代码

$ cd ~/my-demo/source_code
$ vi hello.c

写入以下代码并保存
#include <stdio.h>

int main(int argc, char **argv)
{
  printf("Hello, MYZR!\n");

  return;
}

  • 查看代码

Myimx6linux3.14 build 8.1.1.3.png

$ cat hello.c

编译应用程序

  • 配置环境变量

$ source ~/my-imx6/03_tools/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf-env
Myimx6linux3.14 build 8.1.2.1.png

  • 编译

$ ${CROSS_COMPILE}gcc hello.c -o hello.out
Myimx6linux3.14 build 8.1.2.2.png
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。

  • 目标文件

$ file hello.out
Myimx6linux3.14 build 8.1.2.3.png
可以看到目标文件 hello.out 的属性。


保存目标可执行文件

$ mv hello.out ~/my-demo/bin-l31452/
Myimx6linux3.14 build 8.1.3.1.png


应用程序打包

说明

烧录工具支持烧录“my-demo.tar.xz”的文件包到评估板。所以在这里我们把我们需要的应用程序打包为“my-demo.tar.xz”。至于“my-demo.tar.xz”会被烧录到哪个位置,请看《烧录手册》


打包应用程序

1)打包
这里我们将整个my-demo目录打包。
$ cd ~
$ tar cjf my-demo.tar.bz2 my-demo
Myimx6linux3.14 build 8.3.2.1.png

2)复制应用程序包为目标烧录文件
$ cp my-demo.tar.bz2 ~/my-imx6/04_image/image-linux-31452/
Myimx6linux3.14 build 8.3.2.2.png


目标烧录文件


至此,我们在“~/my-imx6/04_image/image-linux-31452/”得到了除文件系统以外的一套烧录文件。包括“uboot*.imx”、“myimx6*.dtb”、“zImage-myimx6”、“kernel-modules.tar.bz2”、“my-demo.tar.bz2”。
现在可以参照《烧录手册》烧录我们自己编译出来的image了。