MY-IMX6 L3035编译手册

来自明远智睿的wiki
Admin讨论 | 贡献2016年9月28日 (三) 17:43的版本 (创建页面,内容为“= '''准备源码包''' = ---- == '''3.0.35版本代码''' == === u-boot源码 === 文件名:uboot-imx-imx_v2009.08_3.0.35_4.1.0.tar.bz2<br> === kernel源码 ===...”)

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

= 准备源码包 =

3.0.35版本代码

u-boot源码

文件名:uboot-imx-imx_v2009.08_3.0.35_4.1.0.tar.bz2

kernel源码

文件名:linux-2.6-imx-imx_3.0.35_4.1.0.tar.bz2

交叉编译工具

文件名:gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.bz2

= 配置编译环境 =

准备源码

准备源码包

1)创建工作目录
创建 ~/my-imx6 作为工作目录
$ mkdir ~/my-imx6
Myimx6l3035 build 2.1.1.1.jpg
创建 ~/my-imx6/02_source/imx_3.0.35_4.1.0 作为源码目录
$ mkdir ~/my-imx6/02_source/imx_3.0.35_4.1.0 -p
Myimx6l3035 build 2.1.1.2.jpg
创建 ~/my-imx6/03_tools 作为工具目录
$ mkdir ~/my-imx6/03_tools -p
Myimx6l3035 build 2.1.1.3.jpg
2)复制源码包到开发主机中
这一步骤自己采取相应的方式进行。
  提示:这里将网盘中“02_源码”复制到Linux开发主机的“~/my-imx6/02_source/imx_3.0.35_4.1.0”,将网盘中“03_工具/toolchain”复制到Linux开发主机的“~/my-imx6/03_tools”。

解压源码包

1)解压u-boot源码和内核源码
$ cd ~/my-imx6/02_source/imx_3.0.35_4.1.0
$ tar jxf uboot-imx-imx_v2009.08_3.0.35_4.1.0.tar.bz2
$ tar jxf linux-2.6-imx-imx_3.0.35_4.1.0.tar.bz2
Myimx6l3035 build 2.1.2.1.jpg
2)解压交叉编译工具
$ cd ~/my-imx6/03_tools/
$ tar jxf gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.bz2
Myimx6l3035 build 2.1.2.2.jpg

开发环境配置

安装需要的包

1)更新源列表
$ sudo apt-get update
Myimx6l3035 build 2.2.1.1.jpg
更新完成后如下图所示:
$ sudo apt-get update
Myimx6l3035 build 2.2.1.2.jpg
2)安装aptitude包管理工具和ia32-libs
提示:如果编译主机的Linux是32位的,可以跳过此步骤。

  • 安装aptitude包管理工具

Myimx6l3035 build 2.2.1.3.jpg
$ sudo apt-get –y install aptitude

  • 使用aptitude安装ia32-libs

$ sudo aptitude –y install ia32-libs
提示:下图为安装过aptitude和ia32-libs后,再次执行安装命令的截图。
Myimx6l3035 build 2.2.1.4.jpg
3)安装mkimage工具
$ sudo apt-get -y install uboot-mkimage
提示:下图为安装过mkimage工具后,再次执行安装命令的截图。
Myimx6l3035 build 2.2.1.5.jpg
4)安装ncurses-dev
说明:make menuconfig对其具有依赖性质。
$ sudo aptitude -y install ncurses-dev
提示:下图为安装过ncurses-dev工具后,再次执行安装命令的截图。
Myimx6l3035 build 2.2.1.6.jpg

配置MY-IMX6编译的环境变量

1)将平台信息写入到一个新的配置文件
$ echo "export ARCH=arm" > ~/my-imx6/03_tools/myimx6_3035_build_env
2)将交叉编译工具链路径写入到配置文件

  • 进入交叉编译工具目录

$ cd ~/my-imx6/03_tools/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/

  • 将路径写入到配置文件

$ sed -i "\$a IMX6_GCC462_PATH=$PWD" ~/my-imx6/03_tools/myimx6_3035_build_env

  • 将交叉编译工具写入到配置文件

$ sed -i "\$a export CROSS_COMPILE=\$IMX6_GCC462_PATH/arm-none-linux-gnueabi-" ~/my-imx6/03_tools/myimx6_3035_build_env
3)查看配置文件
$ cat ~/my-imx6/03_tools/myimx6_3035_build_env
4)附图
Myimx6l3035 build 2.2.2.1.jpg
注意:如果在某一步操作错误,则需要删除 ~/my-imx6/03_tools/myimx6_3035_build_env 文件,并重新按照本小节操作。

= 编译u-boot =

进入u-boot源码目录

$ cd ~/my-imx6/02_source/imx_3.0.35_4.1.0/uboot-imx-imx_v2009.08_3.0.35_4.1.0/
Myimx6l3035 build 3.1.0.1.jpg

使配置文件生效

  • 执行source命令

$ source ~/my-imx6/03_tools/myimx6_3035_build_env
Myimx6l3035 build 3.2.0.1.jpg

  • 查看编译配置

$ echo $ARCH
$ echo $CROSS_COMPILE
提示:可看到ARCH和CROSS_COMPILE被设置
Myimx6l3035 build 3.2.0.2.jpg

  • 验证交叉编译工具配置

$${CROSS_COMPILE}gcc –v
提示:执行命令后可以看到终端显示出交叉编译工具的版本信息。如下图:
Myimx6l3035 build 3.2.0.3.jpg

清除u-boot配置

$ make distclean
Myimx6l3035 build 3.3.0.1.jpg

u-boot配置

  • 评估板及对应的 u-boot 编译配置:
评估板主型号 CPU类型-内存容量 <thead> </thead> <tbody> </tbody>
对应的u-boot配置
rowspan=4|MY-IMX6-EK200
6Q(四核)- 1G
myimx6ek200_6q_config
-
6Q(四核)- 2G <thead> </thead> <tbody> </tbody>
myimx6ek200_6q_2g_config
6U(双核简化)- 1G
<thead> </thead> <tbody> </tbody>
myimx6ek200_6u_config
6S(单核)- 512M
<thead> </thead> <tbody> </tbody>
myimx6ek200_6s_config
rowspan=4|MY-IMX6-EK314
6Q(四核)- 1G
myimx6ek314_6q_config
-
6Q(四核)- 2G <thead> </thead> <tbody> </tbody>
myimx6ek314_6q_2g_config
6U(双核简化)- 1G
<thead> </thead> <tbody> </tbody>
myimx6ek314_6u_config
6S(单核)- 512M
myimx6ek314_6s_config
  • MYIMX6EK200-6Qxx-1G配置示例:
     $ make myimx6ek200_6q_config
    Myimx6l3035 build 3.3.0.2.jpg

编译

  • 执行编译

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

  • 编译完成

提示:u-boot编译过程大概需要几分钟时间。
Myimx6l3035 build 3.5.0.2.jpg

目标文件

编译完成后通过ls命令即可看到编译得到的目标文件u-boot.bin
$ ls
Myimx6l3035 build 3.6.0.1.jpg

= 编译内核 =

进入内核源码目录

$ cd ~/my-imx6/02_source/imx_3.0.35_4.1.0/linux-2.6-imx-imx_3.0.35_4.1.0/
Myimx6l3035 build 4.1.0.1.jpg

使配置文件生效

  • 执行source命令

$ source ~/my-imx6/03_tools/myimx6_3035_build_env
Myimx6l3035 build 4.2.0.1.jpg

  • 查看编译配置

$ echo $ARCH
$ echo $CROSS_COMPILE
提示:可看到ARCH和CROSS_COMPILE被设置
Myimx6l3035 build 4.2.0.2.jpg

  • 验证交叉编译工具配置

$ ${CROSS_COMPILE}gcc –v
提示:执行命令后可以看到终端显示出交叉编译工具的版本信息。如下图:
Myimx6l3035 build 4.2.0.3.jpg

准备配置内核

  • 清除内核配置

$ make distclean
Myimx6l3035 build 4.3.0.1.jpg

  • 生成.config文件

说明:MY-IMX6-EK200系列评估板及MY-IMX6-EK314系列评估板使用的配置文件是myimx6_defconfig
$ make myimx6_defconfig
Myimx6l3035 build 4.3.0.2.jpg

编译内核

  • 编译uImage

$ make uImage
说明:截图中使用了4线程编译。
Myimx6l3035 build 4.4.0.1.jpg

  • 编译完成

Myimx6l3035 build 4.4.0.2.jpg

  • 目标文件

arch/arm/boot/uImage即为编译得到的目标文件,使用ls命令可查看文件信息。
$ ls arch/arm/boot/uImage –la
Myimx6l3035 build 4.4.0.3.jpg

编译模块

  • 编译

$ make
说明:截图中使用了4线程编译。
Myimx6l3035 build 4.5.0.1.jpg

  • 编译完成

Myimx6l3035 build 4.5.0.2.jpg

  • 目标文件

编译完成后各模块的.ko文件位于代码所在的目录,通过find命令可以找出编译完成的模块,参考命令如下:
$ find -name *.ko
Myimx6l3035 build 4.5.0.3.jpg

= Linux应用程序编译 =

编写应用程序

1) 创建应用程序目录
$ mkdir ~/my-imx6/02_source/application/ -p
$ cd ~/my-imx6/02_source/application/
Myimx6l3035 build 5.1.0.1.jpg
2) 编写应用程序(这里以hello.c为例)
创建 hello.c 文件写入以下代码并保存:
#include <stdio.h>
int main(int argc, char **argv)
{
   printf("Hello, MYZR!\n");
   
   return;
}

3) 查看代码
$ cat hello.c
Myimx6l3035 build 5.1.0.2.jpg

使编译配置文件生效

  • 执行source命令

$ source ~/my-imx6/03_tools/myimx6_3035_build_env
Myimx6l3035 build 5.2.0.1.jpg

  • 查看编译配置

$ echo $ARCH
$ echo $CROSS_COMPILE
提示:可看到ARCH和CROSS_COMPILE被设置
Myimx6l3035 build 5.2.0.2.jpg

  • 验证交叉编译工具配置

$ ${CROSS_COMPILE}gcc –v
提示:执行命令后可以看到终端显示出交叉编译工具的版本信息。如下图:
Myimx6l3035 build 5.2.0.3.jpg

编译应用程序

2) 编译
$ ${CROSS_COMPILE}gcc hello.c -o hello.out
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。
Myimx6l3035 build 5.3.0.1.jpg
3) 查看目标文件类型
$ file hello.out
可以看到目标文件 hello.out 的属性。
Myimx6l3035 build 5.3.0.2.jpg

= 文件系统 =

文件系统说明

文件系统包位于网盘对应的镜像文件夹中。支持的文件系统类型及下载方式可参照《MY-IMX6 烧录指导》。

解压文件系统到编译主机

1)创建文件系统的目录并进入
$ mkdir ~/my-imx6/04_rootfs/ -p
$ cd ~/my-imx6/04_rootfs/
Myimx6l3035 build 6.2.0.1.jpg
2)将文件系统复制到~/my-imx6/04_rootfs/目录
这一步骤自己采取相应的方式进行
3)解压文件系统到指定目录
$ mkdir rootfs
$ sudo tar jxf rootfs-linux.tar.bz2 -C rootfs
Myimx6l3035 build 6.2.0.2.jpg

添加应用到文件系统

$ cp ~/my-imx6/02_source/application/hello.out rootfs/app_test/
Myimx6l3035 build 6.3.0.1.jpg
5)重新打包文件系统
$ rm -rf rootfs-linux.tar.bz2
$ cd rootfs/
$ sudo tar cjf ../rootfs-linux.tar.bz2 *
Myimx6l3035 build 6.3.0.2.jpg

添加模块到文件系统

准备需要模块的.ko文件,其它请参照“添加应用到文件系统”。