“MYZR-IMX28 Linux-3.14.54 编译手册”的版本间的差异

来自明远智睿的wiki
跳转至: 导航搜索
编译设备树
(Admin移动页面MY-IMX28 Linux-3.14.54 编译手册MYZR-IMX28 Linux-3.14.54 编译手册,不留重定向)
 
(未显示同一用户的7个中间版本)
第1行: 第1行:
 +
<div>
  
 
= '''文档说明''' =
 
= '''文档说明''' =
第10行: 第11行:
 
*Ubuntu系统类型:x86-64 <br>
 
*Ubuntu系统类型:x86-64 <br>
 
  <span style="color:red">注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。 <br>
 
  <span style="color:red">注意:开发主机请使用ubuntu 12.04.5 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ubuntu的其它版本可能会遇到的不必要的问题。 <br>
 +
 
== '''操作说明 ''' ==
 
== '''操作说明 ''' ==
 
1)文档中以“$”开头的行,其后是Linux命令。 <br>
 
1)文档中以“$”开头的行,其后是Linux命令。 <br>
第17行: 第19行:
 
5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。 <br>
 
5)按文档输入并执行Linux命令时注意观察命令的执行结果与文档图片中的是否一致,以确认命令是否输入有误及是否执行失败。 <br>
 
6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。<br>
 
6)第一遍编译请严格按照文档进行,否则可能出现莫名其妙的错误。<br>
 +
 
== '''截图说明''' ==
 
== '''截图说明''' ==
 
为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。<br>
 
为使视图看起来简洁整齐,截图中的命令提示符统一使用myzr$。<br>
 +
 
== '''图片中的Linux命令''' ==
 
== '''图片中的Linux命令''' ==
 
在文档的图片中观察“linyn@u12045-serv:~$”开头的行可以直观的看到输入的<br>
 
在文档的图片中观察“linyn@u12045-serv:~$”开头的行可以直观的看到输入的<br>
 
linux命令。<br>
 
linux命令。<br>
 +
 
= '''准备源码及相关文件''' =
 
= '''准备源码及相关文件''' =
 
----
 
----
第27行: 第32行:
 
评估板对应的Linux版本及对应的源码文件见下表:<br>
 
评估板对应的Linux版本及对应的源码文件见下表:<br>
 
{| class="wikitable"
 
{| class="wikitable"
!评估板型号  
+
!评估板型号
!支持的系统版本  
+
!支持的系统版本
!u-boot源码文件  
+
!u-boot源码文件
 
!linux源码文件
 
!linux源码文件
 
|-
 
|-
|MY-IMX28-EVK ||Linux-3.14.54 ||u-boot-2015.04.tar.bz2||linux-3.14.54.tar.bz2
+
|MYZR-IMX28-EVK ||Linux-3.14.54 ||u-boot-2015.04.tar.bz2||linux-3.14.54.tar.bz2
 
|-
 
|-
  
第40行: 第45行:
 
Linux程序交叉编译工具:gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2<br>
 
Linux程序交叉编译工具:gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2<br>
 
Linux交叉编译工具配置文件:gcc-4.4.4-glibc-2.11.1-multilib-env<br>
 
Linux交叉编译工具配置文件:gcc-4.4.4-glibc-2.11.1-multilib-env<br>
 +
 
== '''创建工作目录''' ==
 
== '''创建工作目录''' ==
 
1)源码目录<br>
 
1)源码目录<br>
第53行: 第59行:
 
$ mkdir -p ~/my-imx28/01_application<br>
 
$ mkdir -p ~/my-imx28/01_application<br>
 
[[文件:IMX28_2635_build_2.3.0.4.png]]<br>
 
[[文件:IMX28_2635_build_2.3.0.4.png]]<br>
 +
 
= '''准备开发环境''' =
 
= '''准备开发环境''' =
 
----
 
----
第60行: 第67行:
 
更新完成后如下图所示:<br>
 
更新完成后如下图所示:<br>
 
[[文件:IMX28_2635_build_3.1.0.2.png]]<br>
 
[[文件:IMX28_2635_build_3.1.0.2.png]]<br>
 +
 
== '''安装aptitude包管理工具和ia32-libs''' ==
 
== '''安装aptitude包管理工具和ia32-libs''' ==
 
提示:如果编译主机的Linux是32位的,可以跳过此步骤。<br>
 
提示:如果编译主机的Linux是32位的,可以跳过此步骤。<br>
 +
 
=== 安装aptitude包管理工具 ===
 
=== 安装aptitude包管理工具 ===
 
$ sudo apt-get -y install aptitude <br>
 
$ sudo apt-get -y install aptitude <br>
 
[[文件:IMX28_2635_build_3.2.1.1.png]]<br>
 
[[文件:IMX28_2635_build_3.2.1.1.png]]<br>
 
提示:上图为安装过aptitude后,再次执行安装命令的截图。<br>
 
提示:上图为安装过aptitude后,再次执行安装命令的截图。<br>
 +
 
=== 使用aptitude安装ia32-libs ===
 
=== 使用aptitude安装ia32-libs ===
 
$ sudo aptitude -y install ia32-libs <br>
 
$ sudo aptitude -y install ia32-libs <br>
 
[[文件:IMX28_2635_build_3.2.2.1.png]]<br>
 
[[文件:IMX28_2635_build_3.2.2.1.png]]<br>
 
提示:上图为安装过aptitude和ia32-libs后,再次执行安装命令的截图。<br>
 
提示:上图为安装过aptitude和ia32-libs后,再次执行安装命令的截图。<br>
 +
 
== '''安装mkimage工具''' ==
 
== '''安装mkimage工具''' ==
 
$ sudo apt-get -y install uboot-mkimage <br>
 
$ sudo apt-get -y install uboot-mkimage <br>
 
提示:下图为安装过mkimage工具后,再次执行安装命令的截图。<br>
 
提示:下图为安装过mkimage工具后,再次执行安装命令的截图。<br>
 
[[文件:IMX28_2635_build_3.3.0.1.png]]<br>
 
[[文件:IMX28_2635_build_3.3.0.1.png]]<br>
 +
 
== '''安装ncurses-dev''' ==
 
== '''安装ncurses-dev''' ==
 
make menuconfig对其具有依赖性质<br>
 
make menuconfig对其具有依赖性质<br>
第79行: 第91行:
 
[[文件:IMX28_2635_build_3.4.0.1.png]]<br>
 
[[文件:IMX28_2635_build_3.4.0.1.png]]<br>
 
提示:上图为安装过ncurses-dev工具后,再次执行安装命令的截图。<br>
 
提示:上图为安装过ncurses-dev工具后,再次执行安装命令的截图。<br>
 +
 
= '''安装配置交叉编译工具链''' =
 
= '''安装配置交叉编译工具链''' =
 
----
 
----
第95行: 第108行:
 
$ ${CROSS_COMPILE}gcc –v<br>
 
$ ${CROSS_COMPILE}gcc –v<br>
 
[[文件:IMX28_2635_build_4.1.0.2.png]]<br>
 
[[文件:IMX28_2635_build_4.1.0.2.png]]<br>
 +
 
= '''U-Boot编译''' =
 
= '''U-Boot编译''' =
 
----
 
----
第101行: 第115行:
 
将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx28/02_source”。<br>
 
将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx28/02_source”。<br>
 
这一步自己采取相应的方式完成。<br>
 
这一步自己采取相应的方式完成。<br>
 +
 
=== 解压u-boot源码包 ===
 
=== 解压u-boot源码包 ===
 
$ cd ~/my-imx28/02_source/<br>
 
$ cd ~/my-imx28/02_source/<br>
 
$ tar jxf u-boot-2015.04.tar.bz2<br>
 
$ tar jxf u-boot-2015.04.tar.bz2<br>
 
[[文件:IMX28_31454_build_5.1.2.1.png]]<br>
 
[[文件:IMX28_31454_build_5.1.2.1.png]]<br>
 +
 
=== 更新库libssl-dev ===
 
=== 更新库libssl-dev ===
 
$ sudo apt-get install libssl-dev<br>
 
$ sudo apt-get install libssl-dev<br>
 
[[文件:IMX28_31454_build_5.1.3.1.png]]<br>
 
[[文件:IMX28_31454_build_5.1.3.1.png]]<br>
 +
 
== '''编译''' ==
 
== '''编译''' ==
 
=== 使编译配置文件生效 ===
 
=== 使编译配置文件生效 ===
 
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env<br>
 
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env<br>
 
[[文件:IMX28_2635_build_5.2.1.1.png]]<br>
 
[[文件:IMX28_2635_build_5.2.1.1.png]]<br>
 +
 
=== 进入u-boot源码目录 ===
 
=== 进入u-boot源码目录 ===
 
$ cd ~/my-imx28/02_source/u-boot-2015.04<br>
 
$ cd ~/my-imx28/02_source/u-boot-2015.04<br>
 
[[文件:IMX28_31454_build_5.2.2.1.png]]<br>
 
[[文件:IMX28_31454_build_5.2.2.1.png]]<br>
=== 清除u-boot临时文件 ===
+
 
 +
=== 清除u-boot临时文件===
 
$ make distclean <br>
 
$ make distclean <br>
 
[[文件:IMX28_31454_build_5.2.3.1.png]]<br>
 
[[文件:IMX28_31454_build_5.2.3.1.png]]<br>
 +
 
=== 配置u-boot ===
 
=== 配置u-boot ===
 
{| class="wikitable"
 
{| class="wikitable"
!评估板主型号  
+
!评估板主型号
!CPU类型-内存容量  
+
!CPU类型-内存容量
 
!对应的u-boot配置
 
!对应的u-boot配置
 
|-
 
|-
|MY-IMX28-EVK ||MX283/7, 128M ||mx28_evk_config
+
|MYZR-IMX28-EVK ||MX283/7, 128M ||mx28evk_nand_defconfig
 
|}
 
|}
  
*MY-IMX28-EVK配置示例:<br>
+
*MYZR-IMX28-EVK配置示例:<br>
$ make mx28_evk_config <br>
+
$ make mx28evk_nand_defconfig <br>
 
[[文件:IMX28_31454_build_5.2.4.1.png]]<br>
 
[[文件:IMX28_31454_build_5.2.4.1.png]]<br>
 
=== 执行编译 ===
 
=== 执行编译 ===
第137行: 第157行:
 
提示:u-boot编译过程大概需要一、两分钟时间。<br>
 
提示:u-boot编译过程大概需要一、两分钟时间。<br>
 
[[文件:IMX28_31454_build_5.2.5.2.png]]<br>
 
[[文件:IMX28_31454_build_5.2.5.2.png]]<br>
 +
 
== '''目标文件''' ==
 
== '''目标文件''' ==
 
*编译文件<br>
 
*编译文件<br>
第143行: 第164行:
 
[[文件:IMX28_31454_build_5.3.0.1.png]]<br>
 
[[文件:IMX28_31454_build_5.3.0.1.png]]<br>
 
*目标文件<br>
 
*目标文件<br>
MY-IMX28系列评估板的u-boot配置对应的目标文件名见下表:<br>
+
MYZR-IMX28系列评估板的u-boot配置对应的目标文件名见下表:<br>
 
{| class="wikitable"
 
{| class="wikitable"
!u-boot配置  
+
!u-boot配置
 
!目标文件
 
!目标文件
 
|-
 
|-
|mx28_evk_config ||imx28_ivt_uboot.sb
+
|mx28evk_nand_defconfig ||imx28_ivt_uboot.sb
 
|}
 
|}
  
第157行: 第178行:
 
将下载的“linux源码”复制到Linux开发主机的“~/my-imx28/02_source”。<br>
 
将下载的“linux源码”复制到Linux开发主机的“~/my-imx28/02_source”。<br>
 
这一步自己采取相应的方式完成。<br>
 
这一步自己采取相应的方式完成。<br>
 +
 
=== 解压linux源码包 ===
 
=== 解压linux源码包 ===
 
$ cd ~/my-imx28/02_source/<br>
 
$ cd ~/my-imx28/02_source/<br>
 
$ tar jxf linux-3.14.54.tar.bz2<br>
 
$ tar jxf linux-3.14.54.tar.bz2<br>
 
[[文件:IMX28_31454_build_6.1.2.1.png]]<br>
 
[[文件:IMX28_31454_build_6.1.2.1.png]]<br>
 +
 
== '''内核编译配置''' ==
 
== '''内核编译配置''' ==
 
=== 使编译配置文件生效 ===
 
=== 使编译配置文件生效 ===
 
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env<br>
 
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env<br>
 
[[文件:IMX28_2635_build_6.2.1.1.png]]<br>
 
[[文件:IMX28_2635_build_6.2.1.1.png]]<br>
 +
 
=== 清除内核临时文件 ===
 
=== 清除内核临时文件 ===
 
*进入linux源码目录<br>
 
*进入linux源码目录<br>
第172行: 第196行:
 
$ make distclean <br>
 
$ make distclean <br>
 
[[文件:IMX28_31454_build_6.2.2.2.png]]<br>
 
[[文件:IMX28_31454_build_6.2.2.2.png]]<br>
 +
 
=== 内核配置 ===
 
=== 内核配置 ===
 
$ cp .mx28_config .config <br>
 
$ cp .mx28_config .config <br>
 
[[文件:IMX28_31454_build_6.2.3.1.png]]<br>
 
[[文件:IMX28_31454_build_6.2.3.1.png]]<br>
 +
 
== '''编译内核''' ==
 
== '''编译内核''' ==
 
*执行编译 <br>
 
*执行编译 <br>
第185行: 第211行:
 
$ ls arch/arm/boot/uImage -la <br>
 
$ ls arch/arm/boot/uImage -la <br>
 
[[文件:IMX28_2635_build_6.3.0.3.png]]<br>
 
[[文件:IMX28_2635_build_6.3.0.3.png]]<br>
== '''编译设备树 ''' ==
+
 
 +
== '''编译设备树''' ==
 
评估板型号规格与设备树文件对应关系见下表:<br>
 
评估板型号规格与设备树文件对应关系见下表:<br>
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!功能  
+
!功能
!源码位置  
+
!源码位置
 
!Linux 设备和文件夹
 
!Linux 设备和文件夹
 
|-
 
|-
|评估板主型号 ||CPU类型-内存容量 ||对应的设备树文件
+
|评估板主型号<br>(development main model)  ||CPU类型-内存容量 ||对应的设备树文件
 
|-
 
|-
|MY-IMX28-EVK ||MX283/7, 128M ||imx28-evk.dtb
+
|MYZR-IMX28-EVK ||MX283/7, 128M ||imx28-evk.dtb
 
|-
 
|-
  
 
|}
 
|}
*以MY-IMX28-EVK为例<br>
+
*以MYZR-IMX28-EVK为例<br>
 
$ make imx28-evk.dtb<br>
 
$ make imx28-evk.dtb<br>
 
[[文件:IMX28_31454_build_6.4.0.1.png]]<br>
 
[[文件:IMX28_31454_build_6.4.0.1.png]]<br>
第208行: 第235行:
 
[[文件:IMX28_31454_build_6.4.0.2.png]]<br>
 
[[文件:IMX28_31454_build_6.4.0.2.png]]<br>
  
== '''编译模块 ''' ==
+
== '''编译模块''' ==
 
*编译模块命令 <br>
 
*编译模块命令 <br>
 
$ make modules<br>
 
$ make modules<br>
第219行: 第246行:
 
$ tar cjf ../modules.tar.bz2 *<br>
 
$ tar cjf ../modules.tar.bz2 *<br>
 
[[文件:IMX28_31454_build_6.5.0.3.png]]<br>
 
[[文件:IMX28_31454_build_6.5.0.3.png]]<br>
 +
 
= '''应用程序编译''' =
 
= '''应用程序编译''' =
 
----
 
----
 
== '''Linux应用程序编译''' ==
 
== '''Linux应用程序编译''' ==
=== 编写应用程序 ===
+
=== 编写应用程序 ===
 
*进入工作目录<br>
 
*进入工作目录<br>
 
$ cd ~/my-imx28/01_application/<br>
 
$ cd ~/my-imx28/01_application/<br>
第238行: 第266行:
 
$ cat hello.c <br>
 
$ cat hello.c <br>
 
[[文件:IMX28_2635_build_7.1.1.2.png]]<br>
 
[[文件:IMX28_2635_build_7.1.1.2.png]]<br>
=== 编译应用程序 ===
+
 
 +
=== 编译应用程序 ===
 
*配置环境变量<br>
 
*配置环境变量<br>
 
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env<br>
 
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env<br>
第250行: 第279行:
 
[[文件:IMX28_2635_build_7.1.2.3.png]]<br>
 
[[文件:IMX28_2635_build_7.1.2.3.png]]<br>
 
可以看到目标文件 hello.out 的属性。<br>
 
可以看到目标文件 hello.out 的属性。<br>
 +
 
= '''文件系统''' =
 
= '''文件系统''' =
 
----
 
----
第270行: 第300行:
 
  烧写成功后,点击“停止”就OK了。<br>
 
  烧写成功后,点击“停止”就OK了。<br>
 
<span style="background:red">注意:如果你用的文件系统是rootfs-qt.tar.bz2,请选择“QT-MY-IMX28-3.14.54 NAND with uboot”烧写镜像。<br>
 
<span style="background:red">注意:如果你用的文件系统是rootfs-qt.tar.bz2,请选择“QT-MY-IMX28-3.14.54 NAND with uboot”烧写镜像。<br>
 +
 
== ''' 使用网络烧写''' ==
 
== ''' 使用网络烧写''' ==
 
=== 搭建TFTP (ubuntu系统) ===
 
=== 搭建TFTP (ubuntu系统) ===
第278行: 第309行:
 
  $ mkdir /home/myzr/tftp<br>
 
  $ mkdir /home/myzr/tftp<br>
 
  $ chmod 777 /home/myzr/tftp<br>
 
  $ chmod 777 /home/myzr/tftp<br>
(3) Open /etc/inetd.conf and edit it (修改配置文件的tftp目录)<br>
+
(3) Open /etc/inetd.conf and edit it (修改配置文件的tftp目录)<br>
 
  $ sudo gedit /etc/inetd.conf<br>
 
  $ sudo gedit /etc/inetd.conf<br>
 
Coment this line :<br>
 
Coment this line :<br>
第286行: 第317行:
 
(4)Restarting tftp service (重启tftp)<br>
 
(4)Restarting tftp service (重启tftp)<br>
 
  $ sudo /etc/init.d/openbsd-inetd restart<br>
 
  $ sudo /etc/init.d/openbsd-inetd restart<br>
=== 搭建NFS (网络烧写不需要用到nfs) ===
+
 
 +
=== 搭建NFS (网络烧写不需要用到nfs)===
 
(1) Install NFS server package (下载并安装nfs)<br>
 
(1) Install NFS server package (下载并安装nfs)<br>
 
  $ sudo apt-get install nfs-kernel-server<br>
 
  $ sudo apt-get install nfs-kernel-server<br>
第298行: 第330行:
 
  $ sudo /etc/init.d/portmap restart<br>
 
  $ sudo /etc/init.d/portmap restart<br>
 
  $ sudo /etc/init.d/nfs-kernel-server restart<br>
 
  $ sudo /etc/init.d/nfs-kernel-server restart<br>
 +
 
=== tftp下载 ===
 
=== tftp下载 ===
 
(1) 把“u-boot.sb”、“imx28-evk.dtb”、“zImage”、“filesystem.ubifs”复制到“/home/myzr/tftp”目录下。<br>
 
(1) 把“u-boot.sb”、“imx28-evk.dtb”、“zImage”、“filesystem.ubifs”复制到“/home/myzr/tftp”目录下。<br>
 
(2) 设置环境变量(板子和电脑网线直连)<br>
 
(2) 设置环境变量(板子和电脑网线直连)<br>
 
$ setenv ipaddr 192.168.3.104    (板子IP)<br>
 
$ setenv ipaddr 192.168.3.104    (板子IP)<br>
$ setenv serverip 192.168.3.110   (电脑IP)<br>
+
$ setenv serverip 192.168.3.110   (电脑IP)<br>
 
(3) 烧写<br>
 
(3) 烧写<br>
 
$ run update_nand_kernel (烧写zImage)<br>
 
$ run update_nand_kernel (烧写zImage)<br>
第312行: 第345行:
 
  [[文件:IMX28_31454_build_9.2.3.2.png]]<br>
 
  [[文件:IMX28_31454_build_9.2.3.2.png]]<br>
 
<br>
 
<br>
$ run update_nand_filesystem (烧写文件系统)<br>
+
$ run update_nand_filesystem (烧写文件系统)<br>
 
<br>
 
<br>
 
  [[文件:IMX28_31454_build_9.2.3.3.png]]<br>
 
  [[文件:IMX28_31454_build_9.2.3.3.png]]<br>
 
<br>
 
<br>
 +
 
= '''登录方式''' =
 
= '''登录方式''' =
 
----
 
----
第323行: 第357行:
 
  [[文件:IMX28_31454_build_10.1.0.1.png]]<br>
 
  [[文件:IMX28_31454_build_10.1.0.1.png]]<br>
 
<br>
 
<br>
 +
 
== '''ssh登录''' ==
 
== '''ssh登录''' ==
 
=== '''以太网登录''' ===
 
=== '''以太网登录''' ===
第328行: 第363行:
 
  [[文件:IMX28_31454_build_10.2.1.1.png]]<br>
 
  [[文件:IMX28_31454_build_10.2.1.1.png]]<br>
 
输入完后,点击”OK“就登录完成。<br>
 
输入完后,点击”OK“就登录完成。<br>
 +
 
=== '''USB登录(USB可识别成网口)''' ===
 
=== '''USB登录(USB可识别成网口)''' ===
 
  插上MINI USB线,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认USB的IP为192.168.4.104,你可以设置电脑的IP为192.168.4.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:<br>
 
  插上MINI USB线,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认USB的IP为192.168.4.104,你可以设置电脑的IP为192.168.4.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:<br>
 
  [[文件:IMX28_31454_build_10.2.2.1.png]]<br>
 
  [[文件:IMX28_31454_build_10.2.2.1.png]]<br>
 
输入完后,点击”OK“就登录完成。<br>
 
输入完后,点击”OK“就登录完成。<br>
 +
 
= '''测试''' =
 
= '''测试''' =
 
----
 
----
第339行: 第376行:
 
  [[文件:IMX28_31454_build_11.1.0.1.png]]<br>
 
  [[文件:IMX28_31454_build_11.1.0.1.png]]<br>
 
<br>
 
<br>
 +
 
== '''SD卡测试''' ==
 
== '''SD卡测试''' ==
 
直接插上SD卡,挂载后可看到SD卡的内容。(不是QT系统,会自动挂载)<br>
 
直接插上SD卡,挂载后可看到SD卡的内容。(不是QT系统,会自动挂载)<br>
 +
<br>
 
  [[文件:IMX28_31454_build_11.2.0.1.png]]<br>
 
  [[文件:IMX28_31454_build_11.2.0.1.png]]<br>
 +
<br>
  
 
== '''以太网测试''' ==
 
== '''以太网测试''' ==
第348行: 第388行:
 
  [[文件:IMX28_31454_build_11.3.0.1.png]]<br>
 
  [[文件:IMX28_31454_build_11.3.0.1.png]]<br>
 
<br>
 
<br>
 +
 
== '''uart串口测试''' ==
 
== '''uart串口测试''' ==
串口uat0的设备ttyAPP0,串口uat3的设备ttyAPP3。测试时,请短接发管脚。<br>
+
串口uat0的设备ttyAPP0,串口uat3的设备ttyAPP3。测试时,请短接发管脚(J10的5和7号管脚)。<br>
 
<br>
 
<br>
 
  [[文件:IMX28_31454_build_11.4.0.1.png]]<br>
 
  [[文件:IMX28_31454_build_11.4.0.1.png]]<br>
第356行: 第397行:
 
  [[文件:IMX28_31454_build_11.4.0.2.png]]<br>
 
  [[文件:IMX28_31454_build_11.4.0.2.png]]<br>
 
<br>
 
<br>
 +
 
== '''gpio测试''' ==
 
== '''gpio测试''' ==
GPIO_2_26,GPIO_2_25和GPIO_2_27已经在驱动配置为GPIO功能了,下面以管脚<br>
+
GPIO_2_26,GPIO_2_25和GPIO_2_27已经在驱动配置为GPIO功能了,下面以管脚GPIO_2_26为例,计算GPIO_2_26的管脚号为2*32+26=90,测试如下:<br>
GPIO_2_26为例,计算GPIO_2_26的管脚号为2*32+26=90,测试如下:<br>
+
(GPIO_2_26对应管脚J16的3脚,GPIO_2_25对应管脚J16的5脚,GPIO_2_27对应管脚J16的7脚)<br>
 
<br>
 
<br>
 
  [[文件:IMX28_31454_build_11.5.0.1.png]]<br>
 
  [[文件:IMX28_31454_build_11.5.0.1.png]]<br>
 
<br>
 
<br>
 +
 
== '''spi测试''' ==
 
== '''spi测试''' ==
SPI接口为半双工模式,这里你只测发,通过示波器可观察到波形。方法一只发送0x55和0x75;方法二是发送字符串”myzr“。<br>
+
SPI接口为半双工模式,这里你只测发,通过示波器可观察到波形。方法一只发送0x55和0x75;方法二是发送字符串”myzr“(J14的6和8号管脚)。<br>
 
<br>
 
<br>
 
  [[文件:IMX28_31454_build_11.6.0.1.png]]<br>
 
  [[文件:IMX28_31454_build_11.6.0.1.png]]<br>
 
<br>
 
<br>
 +
 
== '''watdog测试''' ==
 
== '''watdog测试''' ==
 
  “看门狗”,全称Watchdog timer,是一个在软件出错的时候可以复位计算机系统的硬件定时器。通常一个用户空间守护进程会在正常的时间间隔内通过/dev/watchdog 特殊设备文件来通知内核的Watchdog驱动,用户空间一切正常。如果用户空间出现问题(如RAM 错误,内核BUG 等),则通知将会停止,然后硬件Watchdog 将在超时后复位系统。<br>
 
  “看门狗”,全称Watchdog timer,是一个在软件出错的时候可以复位计算机系统的硬件定时器。通常一个用户空间守护进程会在正常的时间间隔内通过/dev/watchdog 特殊设备文件来通知内核的Watchdog驱动,用户空间一切正常。如果用户空间出现问题(如RAM 错误,内核BUG 等),则通知将会停止,然后硬件Watchdog 将在超时后复位系统。<br>
第377行: 第421行:
 
  [[文件:IMX28_31454_build_11.7.0.2.png]]<br>
 
  [[文件:IMX28_31454_build_11.7.0.2.png]]<br>
 
<br>
 
<br>
 +
 +
</div>

2020年10月22日 (四) 16:19的最新版本

目录

文档说明


系统环境说明

  • 编译主机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命令

在文档的图片中观察“linyn@u12045-serv:~$”开头的行可以直观的看到输入的
linux命令。

准备源码及相关文件


源码文件

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

评估板型号 支持的系统版本 u-boot源码文件 linux源码文件
MYZR-IMX28-EVK Linux-3.14.54 u-boot-2015.04.tar.bz2 linux-3.14.54.tar.bz2

交叉编译工具文件

Linux程序交叉编译工具:gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2
Linux交叉编译工具配置文件:gcc-4.4.4-glibc-2.11.1-multilib-env

创建工作目录

1)源码目录
$ mkdir -p ~/my-imx28/02_source
IMX28 2635 build 2.3.0.1.png
2)工具目录
$ mkdir -p ~/my-imx28/03_tools
IMX28 2635 build 2.3.0.2.png
3)镜像目录
$ mkdir -p ~/my-imx28/04_image
IMX28 2635 build 2.3.0.3.png
4)应用程序目录
$ mkdir -p ~/my-imx28/01_application
IMX28 2635 build 2.3.0.4.png

准备开发环境


更新主机的源列表

$ sudo apt-get update
IMX28 2635 build 3.1.0.1.png
更新完成后如下图所示:
IMX28 2635 build 3.1.0.2.png

安装aptitude包管理工具和ia32-libs

提示:如果编译主机的Linux是32位的,可以跳过此步骤。

安装aptitude包管理工具

$ sudo apt-get -y install aptitude
IMX28 2635 build 3.2.1.1.png
提示:上图为安装过aptitude后,再次执行安装命令的截图。

使用aptitude安装ia32-libs

$ sudo aptitude -y install ia32-libs
IMX28 2635 build 3.2.2.1.png
提示:上图为安装过aptitude和ia32-libs后,再次执行安装命令的截图。

安装mkimage工具

$ sudo apt-get -y install uboot-mkimage
提示:下图为安装过mkimage工具后,再次执行安装命令的截图。
IMX28 2635 build 3.3.0.1.png

安装ncurses-dev

make menuconfig对其具有依赖性质
$ sudo aptitude -y install ncurses-dev
IMX28 2635 build 3.4.0.1.png
提示:上图为安装过ncurses-dev工具后,再次执行安装命令的截图。

安装配置交叉编译工具链


安装Linux交叉编译工具链

1)进入交叉编译工具链目录
$ cd ~/my-imx28/03_tools/
2)复制Linux交叉编译工具到目录
将gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2复制到“~/my-imx28/03_tools”,这一步自己采取相应的方式完成。
3)解压Linux交叉编译工具
$ tar jxf gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2
IMX28 2635 build 4.1.0.1.png
4)复制交叉编译工具配置文件
将gcc-4.4.4-glibc-2.11.1-multilib-env复制到“~/my-imx28/03_tools”,这一步自己采取相应的方式完成。
5)检查安装
$ source gcc-4.4.4-glibc-2.11.1-multilib-env
$ ${CROSS_COMPILE}gcc –v
IMX28 2635 build 4.1.0.2.png

U-Boot编译


准备编译

复制源码包到开发主机中

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

解压u-boot源码包

$ cd ~/my-imx28/02_source/
$ tar jxf u-boot-2015.04.tar.bz2
IMX28 31454 build 5.1.2.1.png

更新库libssl-dev

$ sudo apt-get install libssl-dev
IMX28 31454 build 5.1.3.1.png

编译

使编译配置文件生效

$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env
IMX28 2635 build 5.2.1.1.png

进入u-boot源码目录

$ cd ~/my-imx28/02_source/u-boot-2015.04
IMX28 31454 build 5.2.2.1.png

清除u-boot临时文件

$ make distclean
IMX28 31454 build 5.2.3.1.png

配置u-boot

评估板主型号 CPU类型-内存容量 对应的u-boot配置
MYZR-IMX28-EVK MX283/7, 128M mx28evk_nand_defconfig
  • MYZR-IMX28-EVK配置示例:

$ make mx28evk_nand_defconfig
IMX28 31454 build 5.2.4.1.png

执行编译

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

  • 编译完成

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

目标文件

  • 编译文件

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

  • 目标文件

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

u-boot配置 目标文件
mx28evk_nand_defconfig imx28_ivt_uboot.sb

编译内核


准备编译

复制源码包到开发主机中

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

解压linux源码包

$ cd ~/my-imx28/02_source/
$ tar jxf linux-3.14.54.tar.bz2
IMX28 31454 build 6.1.2.1.png

内核编译配置

使编译配置文件生效

$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env
IMX28 2635 build 6.2.1.1.png

清除内核临时文件

  • 进入linux源码目录

$ cd ~/my-imx28/02_source/linux-3.14.54
IMX28 31454 build 6.2.2.1.png

  • 清除临时文件

$ make distclean
IMX28 31454 build 6.2.2.2.png

内核配置

$ cp .mx28_config .config
IMX28 31454 build 6.2.3.1.png

编译内核

  • 执行编译

$ make zImage -j4
IMX28 31454 build 6.3.0.1.png

  • 编译完成

IMX28 31454 build 6.3.0.2.png

  • 目标文件

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

编译设备树

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

功能 源码位置 Linux 设备和文件夹
评估板主型号
(development main model)
CPU类型-内存容量 对应的设备树文件
MYZR-IMX28-EVK MX283/7, 128M imx28-evk.dtb
  • 以MYZR-IMX28-EVK为例

$ make imx28-evk.dtb
IMX28 31454 build 6.4.0.1.png

  • 目标文件

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

编译模块

  • 编译模块命令

$ make modules
IMX28 31454 build 6.5.0.1.png

  • 安装模块到指定目录

$ make modules_install INSTALL_MOD_PATH=./modules
IMX28 31454 build 6.5.0.2.png

  • 打包模块文件

$ cd modules
$ tar cjf ../modules.tar.bz2 *
IMX28 31454 build 6.5.0.3.png

应用程序编译


Linux应用程序编译

编写应用程序

  • 进入工作目录

$ cd ~/my-imx28/01_application/
IMX28 31454 build 7.1.1.1.png

  • 编写源代码

$ vim hello.c
写入以下代码并保存

  1. include <stdio.h>

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

  • 查看代码

$ cat hello.c
IMX28 2635 build 7.1.1.2.png

编译应用程序

  • 配置环境变量

$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env
IMX28 2635 build 7.1.2.1.png

  • 编译

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

  • 目标文件

$ file hello.out
IMX28 2635 build 7.1.2.3.png
可以看到目标文件 hello.out 的属性。

文件系统


文件系统rootfs.tar.bz2

  用以下的方式增加自己的应用:(把MY-IMX28_Born_Tool\Profiles\MX28 Linux Update\OS Firmware\files\image-linux-31454/rootfs.tar.bz2复制到“~/my-imx28/04_image/”目录下)。
IMX28 2635 build 8.1.0.1.png

文件系统filesystem.ubifs

  复制mkfs.ubifs,ubinize到电脑的“/usr/bin”目录下(如果电脑有这两个应用就不需要复制了);复制build_rootfs和ubinize.cfg到“~/my-imx28/04_image/”目录。
IMX28 31454 build 8.2.0.1.png

烧写方式


  至此,我们在“~/my-imx28/02_source/”得到了除文件系统以外的一套烧录文件。包括“u-boot.sb”、“imx28-evk.dtb”、“zImage”、“rootfs.tar.bz2”。

使用MFGTOOL烧写

  把文件“u-boot.sb”、“imx28-evk.dtb”、“zImage”、“rootfs.tar.bz2复制到“MY-IMX28_Born_Tool\Profiles\MX28 Linux Update\OS Firmware\files\image-linux-31454”目录下。按住REC按键,插上MINI USB线和电源线,接着打开MfgTool.exe,点击“扫描设备”,检测到HID设备时,松开REC按键,如下所示:
IMX28 2635 build 9.1.0.1.png

  点击菜单的“Options”,然后在选项“Profiles”选择“MY-IMX28-3.14.54 NAND with uboot”,接着点击“确定”,最后点击“开始”。
IMX28 31454 build 9.1.0.2.png
  烧写成功后,点击“停止”就OK了。
注意:如果你用的文件系统是rootfs-qt.tar.bz2,请选择“QT-MY-IMX28-3.14.54 NAND with uboot”烧写镜像。

使用网络烧写

搭建TFTP (ubuntu系统)

(1) Setup tftp server files (下载并安装tftp)
  $ sudo apt-get install tftpd tftp openbsd-inetd
(2) make a tftp directory (新建tftp目录和改变其属性)
Here we make /home/myzr/tftpt be a tftp directory.
  $ mkdir /home/myzr/tftp
  $ chmod 777 /home/myzr/tftp
(3) Open /etc/inetd.conf and edit it (修改配置文件的tftp目录)
  $ sudo gedit /etc/inetd.conf
Coment this line :

  1. tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp

Add new line:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /home/myzr/tftp
(4)Restarting tftp service (重启tftp)
  $ sudo /etc/init.d/openbsd-inetd restart

搭建NFS (网络烧写不需要用到nfs)

(1) Install NFS server package (下载并安装nfs)
  $ sudo apt-get install nfs-kernel-server
(2) Create NFS directory:/home/myzr/nfsroot (新建nfs目录)
  $ mkdir /home/myzr/nfsroot
(3) Configure mounted directory and authority (修改配置文件的nfs目录)
  $ sudo gedit /etc/exports
Add the following line at the end of the file:
/home/myzr/nfsroot *(rw,sync,no_root_squash)
(4) Restart the NFS service (重启nfs)
  $ sudo /etc/init.d/portmap restart
  $ sudo /etc/init.d/nfs-kernel-server restart

tftp下载

(1) 把“u-boot.sb”、“imx28-evk.dtb”、“zImage”、“filesystem.ubifs”复制到“/home/myzr/tftp”目录下。
(2) 设置环境变量(板子和电脑网线直连)
$ setenv ipaddr 192.168.3.104 (板子IP)
$ setenv serverip 192.168.3.110 (电脑IP)
(3) 烧写
$ run update_nand_kernel (烧写zImage)

  IMX28 31454 build 9.2.3.1.png

$ run update_nand_fdt (烧写fdt)

  IMX28 31454 build 9.2.3.2.png

$ run update_nand_filesystem (烧写文件系统)

  IMX28 31454 build 9.2.3.3.png

登录方式


串口登录

插上USB转串口线和电源,开机后,差不多10秒后,在终端上敲回车键可以进入系统。

  IMX28 31454 build 10.1.0.1.png

ssh登录

以太网登录

插上网线和电源,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认以太网的IP为192.168.3.104,你可以设置电脑的IP为192.168.3.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:
  IMX28 31454 build 10.2.1.1.png
输入完后,点击”OK“就登录完成。

USB登录(USB可识别成网口)

  插上MINI USB线,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认USB的IP为192.168.4.104,你可以设置电脑的IP为192.168.4.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:
  IMX28 31454 build 10.2.2.1.png
输入完后,点击”OK“就登录完成。

测试


USB测试

直接插上U盘,挂载后可看到U盘的内容。(不是QT系统,会自动挂载)

  IMX28 31454 build 11.1.0.1.png

SD卡测试

直接插上SD卡,挂载后可看到SD卡的内容。(不是QT系统,会自动挂载)

  IMX28 31454 build 11.2.0.1.png

以太网测试

插上网线,直接用ping命令测试eth0和eth1网口。默认eth0的IP为192.168.3.104,我设置eth1为192.168.3.105。如下:

     IMX28 31454 build 11.3.0.1.png

uart串口测试

串口uat0的设备ttyAPP0,串口uat3的设备ttyAPP3。测试时,请短接发管脚(J10的5和7号管脚)。

  IMX28 31454 build 11.4.0.1.png


  IMX28 31454 build 11.4.0.2.png

gpio测试

GPIO_2_26,GPIO_2_25和GPIO_2_27已经在驱动配置为GPIO功能了,下面以管脚GPIO_2_26为例,计算GPIO_2_26的管脚号为2*32+26=90,测试如下:
(GPIO_2_26对应管脚J16的3脚,GPIO_2_25对应管脚J16的5脚,GPIO_2_27对应管脚J16的7脚)

  IMX28 31454 build 11.5.0.1.png

spi测试

SPI接口为半双工模式,这里你只测发,通过示波器可观察到波形。方法一只发送0x55和0x75;方法二是发送字符串”myzr“(J14的6和8号管脚)。

  IMX28 31454 build 11.6.0.1.png

watdog测试

  “看门狗”,全称Watchdog timer,是一个在软件出错的时候可以复位计算机系统的硬件定时器。通常一个用户空间守护进程会在正常的时间间隔内通过/dev/watchdog 特殊设备文件来通知内核的Watchdog驱动,用户空间一切正常。如果用户空间出现问题(如RAM 错误,内核BUG 等),则通知将会停止,然后硬件Watchdog 将在超时后复位系统。
  测试程序中打开/dev/watchdog 设备文件,启动了Watchdog,每过一秒钟喂狗一次,系统不会重启。

  IMX28 31454 build 11.7.0.1.png

测试程序中打开了/dev/watchdog 设备文件,启动Watchdog,程序进入循环状态,由于没有喂狗,30 秒后系统复位。

  IMX28 31454 build 11.7.0.2.png

</div>