“MYZR-IMX28 Linux-3.14.54 编译手册”的版本间的差异
第1行: | 第1行: | ||
<div> | <div> | ||
− | = '''文档说明 | + | = '''文档说明''' = |
---- | ---- | ||
− | == '''系统环境说明 | + | == '''系统环境说明''' == |
*编译主机CPU架构:64位 <br> | *编译主机CPU架构:64位 <br> | ||
− | |||
*编译主机系统:Linux <br> | *编译主机系统:Linux <br> | ||
− | |||
*Linux发行版:Ubuntu <br> | *Linux发行版:Ubuntu <br> | ||
− | |||
*Ubuntu版本类型:服务器版 <br> | *Ubuntu版本类型:服务器版 <br> | ||
− | |||
*Ubuntu版本号:12.04.5 <br> | *Ubuntu版本号:12.04.5 <br> | ||
− | |||
*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> | ||
− | |||
2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。 <br> | 2)文档中所有的Linux命令建议手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,可能会执行失败)。 <br> | ||
− | |||
3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。 <br> | 3)文档中的Linux执行命令,如果空格后的下一个字符是“-”的(如:sudo apt-get –y install之类的),请手动输入到Linux主机执行(直接复制、粘贴到Linux主机上执行,通常会执行失败)。 <br> | ||
− | |||
4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。 <br> | 4)文档中所有一行没写完的Linux命令请手动输入到Linux主机执行,(因为复制、粘贴命令不能包含类似“换行符”之类的特殊字符)。 <br> | ||
− | |||
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> | ||
− | |||
− | = '''准备源码及相关文件 | + | = '''准备源码及相关文件''' = |
---- | ---- | ||
− | == '''源码文件 | + | == '''源码文件''' == |
评估板对应的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 | |MY-IMX28-EVK ||Linux-3.14.54 ||u-boot-2015.04.tar.bz2||linux-3.14.54.tar.bz2 | ||
第58行: | 第42行: | ||
|} | |} | ||
− | == '''交叉编译工具文件 | + | == '''交叉编译工具文件''' == |
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> | ||
− | |||
$ mkdir -p ~/my-imx28/02_source<br> | $ mkdir -p ~/my-imx28/02_source<br> | ||
[[文件:IMX28_2635_build_2.3.0.1.png]]<br> | [[文件:IMX28_2635_build_2.3.0.1.png]]<br> | ||
2)工具目录<br> | 2)工具目录<br> | ||
− | |||
$ mkdir -p ~/my-imx28/03_tools<br> | $ mkdir -p ~/my-imx28/03_tools<br> | ||
[[文件:IMX28_2635_build_2.3.0.2.png]]<br> | [[文件:IMX28_2635_build_2.3.0.2.png]]<br> | ||
3)镜像目录<br> | 3)镜像目录<br> | ||
− | |||
$ mkdir -p ~/my-imx28/04_image<br> | $ mkdir -p ~/my-imx28/04_image<br> | ||
[[文件:IMX28_2635_build_2.3.0.3.png]]<br> | [[文件:IMX28_2635_build_2.3.0.3.png]]<br> | ||
4)应用程序目录<br> | 4)应用程序目录<br> | ||
− | |||
$ 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> | ||
− | = '''准备开发环境 | + | = '''准备开发环境''' = |
---- | ---- | ||
− | == '''更新主机的源列表 | + | == '''更新主机的源列表''' == |
$ sudo apt-get update <br> | $ sudo apt-get update <br> | ||
[[文件:IMX28_2635_build_3.1.0.1.png]]<br> | [[文件:IMX28_2635_build_3.1.0.1.png]]<br> | ||
更新完成后如下图所示:<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> | ||
− | |||
$ sudo aptitude -y install ncurses-dev <br> | $ sudo aptitude -y install ncurses-dev <br> | ||
[[文件:IMX28_2635_build_3.4.0.1.png]]<br> | [[文件:IMX28_2635_build_3.4.0.1.png]]<br> | ||
提示:上图为安装过ncurses-dev工具后,再次执行安装命令的截图。<br> | 提示:上图为安装过ncurses-dev工具后,再次执行安装命令的截图。<br> | ||
− | |||
− | = '''安装配置交叉编译工具链 | + | = '''安装配置交叉编译工具链''' = |
---- | ---- | ||
− | == '''安装Linux交叉编译工具链 | + | == '''安装Linux交叉编译工具链''' == |
1)进入交叉编译工具链目录<br> | 1)进入交叉编译工具链目录<br> | ||
− | |||
$ cd ~/my-imx28/03_tools/<br> | $ cd ~/my-imx28/03_tools/<br> | ||
2)复制Linux交叉编译工具到目录<br> | 2)复制Linux交叉编译工具到目录<br> | ||
− | |||
将gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2复制到“~/my-imx28/03_tools”,这一步自己采取相应的方式完成。<br> | 将gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2复制到“~/my-imx28/03_tools”,这一步自己采取相应的方式完成。<br> | ||
− | |||
3)解压Linux交叉编译工具<br> | 3)解压Linux交叉编译工具<br> | ||
− | |||
$ tar jxf gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2<br> | $ tar jxf gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2<br> | ||
[[文件:IMX28_2635_build_4.1.0.1.png]]<br> | [[文件:IMX28_2635_build_4.1.0.1.png]]<br> | ||
4)复制交叉编译工具配置文件<br> | 4)复制交叉编译工具配置文件<br> | ||
− | |||
将gcc-4.4.4-glibc-2.11.1-multilib-env复制到“~/my-imx28/03_tools”,这一步自己采取相应的方式完成。<br> | 将gcc-4.4.4-glibc-2.11.1-multilib-env复制到“~/my-imx28/03_tools”,这一步自己采取相应的方式完成。<br> | ||
− | |||
5)检查安装<br> | 5)检查安装<br> | ||
− | |||
$ source gcc-4.4.4-glibc-2.11.1-multilib-env<br> | $ source gcc-4.4.4-glibc-2.11.1-multilib-env<br> | ||
$ ${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编译''' = |
---- | ---- | ||
− | == '''准备编译 | + | == '''准备编译''' == |
− | === 复制源码包到开发主机中 | + | === 复制源码包到开发主机中 === |
将下载的“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 | |MY-IMX28-EVK ||MX283/7, 128M ||mx28_evk_config | ||
第186行: | 第148行: | ||
*MY-IMX28-EVK配置示例:<br> | *MY-IMX28-EVK配置示例:<br> | ||
− | |||
$ make mx28_evk_config <br> | $ make mx28_evk_config <br> | ||
[[文件:IMX28_31454_build_5.2.4.1.png]]<br> | [[文件:IMX28_31454_build_5.2.4.1.png]]<br> | ||
− | === 执行编译 | + | === 执行编译 === |
$ make u-boot.sb <br> | $ make u-boot.sb <br> | ||
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。<br> | 提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。<br> | ||
− | |||
[[文件:IMX28_31454_build_5.2.5.1.png]]<br> | [[文件:IMX28_31454_build_5.2.5.1.png]]<br> | ||
*编译完成<br> | *编译完成<br> | ||
− | |||
提示: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> | ||
− | |||
编译完成后通过ls命令即可看到编译得到的文件 u-boot.sb<br> | 编译完成后通过ls命令即可看到编译得到的文件 u-boot.sb<br> | ||
− | |||
$ ls <br> | $ ls <br> | ||
[[文件: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> | MY-IMX28系列评估板的u-boot配置对应的目标文件名见下表:<br> | ||
− | |||
{| class="wikitable" | {| class="wikitable" | ||
− | !u-boot配置 | + | !u-boot配置 |
− | !目标文件 | + | !目标文件 |
|- | |- | ||
|mx28_evk_config ||imx28_ivt_uboot.sb | |mx28_evk_config ||imx28_ivt_uboot.sb | ||
|} | |} | ||
− | = '''编译内核 | + | = '''编译内核''' = |
---- | ---- | ||
− | == '''准备编译 | + | == '''准备编译''' == |
− | === 复制源码包到开发主机中 | + | === 复制源码包到开发主机中 === |
将下载的“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> | ||
− | |||
$ cd ~/my-imx28/02_source/linux-3.14.54<br> | $ cd ~/my-imx28/02_source/linux-3.14.54<br> | ||
[[文件:IMX28_31454_build_6.2.2.1.png]]<br> | [[文件:IMX28_31454_build_6.2.2.1.png]]<br> | ||
*清除临时文件<br> | *清除临时文件<br> | ||
− | |||
$ 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> | ||
− | |||
$ make zImage -j4 <br> | $ make zImage -j4 <br> | ||
[[文件:IMX28_31454_build_6.3.0.1.png]]<br> | [[文件:IMX28_31454_build_6.3.0.1.png]]<br> | ||
*编译完成<br> | *编译完成<br> | ||
− | |||
[[文件:IMX28_31454_build_6.3.0.2.png]]<br> | [[文件:IMX28_31454_build_6.3.0.2.png]]<br> | ||
*目标文件 <br> | *目标文件 <br> | ||
− | |||
arch/arm/boot/uImage即为编译得到的内核文件,使用ls命令可查看文件信息。<br> | arch/arm/boot/uImage即为编译得到的内核文件,使用ls命令可查看文件信息。<br> | ||
− | |||
$ 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 设备和文件夹 |
|- | |- | ||
− | |评估板主型号<br>(development main model) ||CPU类型-内存容量 | + | |评估板主型号<br>(development main model) ||CPU类型-内存容量 ||对应的设备树文件 |
|- | |- | ||
|MY-IMX28-EVK ||MX283/7, 128M ||imx28-evk.dtb | |MY-IMX28-EVK ||MX283/7, 128M ||imx28-evk.dtb | ||
第282行: | 第227行: | ||
|} | |} | ||
*以MY-IMX28-EVK为例<br> | *以MY-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> | ||
*目标文件<br> | *目标文件<br> | ||
− | |||
使用ls命令可查看编译得到的目标设备树文件信息:<br> | 使用ls命令可查看编译得到的目标设备树文件信息:<br> | ||
− | |||
$ ls arch/arm/boot/dts/*.dtb | $ ls arch/arm/boot/dts/*.dtb | ||
<br> | <br> | ||
[[文件: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> | ||
[[文件:IMX28_31454_build_6.5.0.1.png]]<br> | [[文件:IMX28_31454_build_6.5.0.1.png]]<br> | ||
*安装模块到指定目录<br> | *安装模块到指定目录<br> | ||
− | |||
$ make modules_install INSTALL_MOD_PATH=./modules<br> | $ make modules_install INSTALL_MOD_PATH=./modules<br> | ||
[[文件:IMX28_31454_build_6.5.0.2.png]]<br> | [[文件:IMX28_31454_build_6.5.0.2.png]]<br> | ||
*打包模块文件<br> | *打包模块文件<br> | ||
− | |||
$ cd modules<br> | $ cd modules<br> | ||
$ 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> | ||
[[文件:IMX28_31454_build_7.1.1.1.png]]<br> | [[文件:IMX28_31454_build_7.1.1.1.png]]<br> | ||
*编写源代码<br> | *编写源代码<br> | ||
− | |||
$ vim hello.c <br> | $ vim hello.c <br> | ||
写入以下代码并保存 <br> | 写入以下代码并保存 <br> | ||
− | |||
#include <stdio.h> <br> | #include <stdio.h> <br> | ||
int main(int argc, char **argv) <br> | int main(int argc, char **argv) <br> | ||
第328行: | 第264行: | ||
} <br> | } <br> | ||
*查看代码 <br> | *查看代码 <br> | ||
− | |||
$ 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> | ||
[[文件:IMX28_2635_build_7.1.2.1.png]]<br> | [[文件:IMX28_2635_build_7.1.2.1.png]]<br> | ||
*编译 <br> | *编译 <br> | ||
− | |||
$ ${CROSS_COMPILE}gcc hello.c -o hello.out <br> | $ ${CROSS_COMPILE}gcc hello.c -o hello.out <br> | ||
[[文件:IMX28_2635_build_7.1.2.2.png]]<br> | [[文件:IMX28_2635_build_7.1.2.2.png]]<br> | ||
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。 <br> | 注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。 <br> | ||
− | |||
*目标文件 <br> | *目标文件 <br> | ||
− | |||
$ file hello.out <br> | $ file hello.out <br> | ||
[[文件:IMX28_2635_build_7.1.2.3.png]]<br> | [[文件:IMX28_2635_build_7.1.2.3.png]]<br> | ||
可以看到目标文件 hello.out 的属性。<br> | 可以看到目标文件 hello.out 的属性。<br> | ||
− | |||
− | = '''文件系统 | + | = '''文件系统''' = |
---- | ---- | ||
− | == '''文件系统rootfs.tar.bz2 | + | == '''文件系统rootfs.tar.bz2''' == |
用以下的方式增加自己的应用:(把MY-IMX28_Born_Tool\Profiles\MX28 Linux Update\OS Firmware\files\image-linux-31454/rootfs.tar.bz2复制到“~/my-imx28/04_image/”目录下)。<br> | 用以下的方式增加自己的应用:(把MY-IMX28_Born_Tool\Profiles\MX28 Linux Update\OS Firmware\files\image-linux-31454/rootfs.tar.bz2复制到“~/my-imx28/04_image/”目录下)。<br> | ||
− | |||
[[文件:IMX28_2635_build_8.1.0.1.png]]<br> | [[文件:IMX28_2635_build_8.1.0.1.png]]<br> | ||
− | == '''文件系统filesystem.ubifs | + | == '''文件系统filesystem.ubifs''' == |
复制mkfs.ubifs,ubinize到电脑的“/usr/bin”目录下(如果电脑有这两个应用就不需要复制了);复制build_rootfs和ubinize.cfg到“~/my-imx28/04_image/”目录。<br> | 复制mkfs.ubifs,ubinize到电脑的“/usr/bin”目录下(如果电脑有这两个应用就不需要复制了);复制build_rootfs和ubinize.cfg到“~/my-imx28/04_image/”目录。<br> | ||
− | |||
[[文件:IMX28_31454_build_8.2.0.1.png]]<br> | [[文件:IMX28_31454_build_8.2.0.1.png]]<br> | ||
− | = '''烧写方式 | + | = '''烧写方式''' = |
---- | ---- | ||
至此,我们在“~/my-imx28/02_source/”得到了除文件系统以外的一套烧录文件。包括“u-boot.sb”、“imx28-evk.dtb”、“zImage”、“rootfs.tar.bz2”。<br> | 至此,我们在“~/my-imx28/02_source/”得到了除文件系统以外的一套烧录文件。包括“u-boot.sb”、“imx28-evk.dtb”、“zImage”、“rootfs.tar.bz2”。<br> | ||
− | + | == '''使用MFGTOOL烧写''' == | |
− | == '''使用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按键,如下所示:<br> | 把文件“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按键,如下所示:<br> | ||
− | |||
[[文件:IMX28_2635_build_9.1.0.1.png]]<br> | [[文件:IMX28_2635_build_9.1.0.1.png]]<br> | ||
<br> | <br> | ||
点击菜单的“Options”,然后在选项“Profiles”选择“MY-IMX28-3.14.54 NAND with uboot”,接着点击“确定”,最后点击“开始”。<br> | 点击菜单的“Options”,然后在选项“Profiles”选择“MY-IMX28-3.14.54 NAND with uboot”,接着点击“确定”,最后点击“开始”。<br> | ||
− | |||
[[文件:IMX28_31454_build_9.1.0.2.png]]<br> | [[文件:IMX28_31454_build_9.1.0.2.png]]<br> | ||
烧写成功后,点击“停止”就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系统) === |
(1) Setup tftp server files (下载并安装tftp)<br> | (1) Setup tftp server files (下载并安装tftp)<br> | ||
− | |||
$ sudo apt-get install tftpd tftp openbsd-inetd<br> | $ sudo apt-get install tftpd tftp openbsd-inetd<br> | ||
(2) make a tftp directory (新建tftp目录和改变其属性)<br> | (2) make a tftp directory (新建tftp目录和改变其属性)<br> | ||
− | |||
Here we make /home/myzr/tftpt be a tftp directory.<br> | Here we make /home/myzr/tftpt be a tftp directory.<br> | ||
$ 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目录) | + | (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> | ||
第396行: | 第316行: | ||
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /home/myzr/tftp<br> | tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /home/myzr/tftp<br> | ||
(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> | ||
(2) Create NFS directory:/home/myzr/nfsroot (新建nfs目录)<br> | (2) Create NFS directory:/home/myzr/nfsroot (新建nfs目录)<br> | ||
− | |||
$ mkdir /home/myzr/nfsroot<br> | $ mkdir /home/myzr/nfsroot<br> | ||
(3) Configure mounted directory and authority (修改配置文件的nfs目录)<br> | (3) Configure mounted directory and authority (修改配置文件的nfs目录)<br> | ||
− | |||
$ sudo gedit /etc/exports<br> | $ sudo gedit /etc/exports<br> | ||
Add the following line at the end of the file:<br> | Add the following line at the end of the file:<br> | ||
/home/myzr/nfsroot *(rw,sync,no_root_squash)<br> | /home/myzr/nfsroot *(rw,sync,no_root_squash)<br> | ||
(4) Restart the NFS service (重启nfs)<br> | (4) Restart the NFS service (重启nfs)<br> | ||
− | |||
$ 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 | ||
− | |||
(3) 烧写<br> | (3) 烧写<br> | ||
− | |||
$ run update_nand_kernel (烧写zImage)<br> | $ run update_nand_kernel (烧写zImage)<br> | ||
− | |||
<br> | <br> | ||
[[文件:IMX28_31454_build_9.2.3.1.png]]<br> | [[文件:IMX28_31454_build_9.2.3.1.png]]<br> | ||
<br> | <br> | ||
$ run update_nand_fdt (烧写fdt)<br> | $ run update_nand_fdt (烧写fdt)<br> | ||
− | |||
<br> | <br> | ||
[[文件:IMX28_31454_build_9.2.3.2.png]]<br> | [[文件:IMX28_31454_build_9.2.3.2.png]]<br> | ||
<br> | <br> | ||
− | $ run update_nand_filesystem | + | $ 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> | ||
− | = '''登录方式 | + | = '''登录方式''' = |
---- | ---- | ||
− | == '''串口登录 | + | == '''串口登录''' == |
插上USB转串口线和电源,开机后,差不多10秒后,在终端上敲回车键可以进入系统。<br> | 插上USB转串口线和电源,开机后,差不多10秒后,在终端上敲回车键可以进入系统。<br> | ||
− | |||
<br> | <br> | ||
[[文件:IMX28_31454_build_10.1.0.1.png]]<br> | [[文件:IMX28_31454_build_10.1.0.1.png]]<br> | ||
<br> | <br> | ||
− | == '''ssh登录 | + | == '''ssh登录''' == |
− | === '''以太网登录 | + | === '''以太网登录''' === |
插上网线和电源,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认以太网的IP为192.168.3.104,你可以设置电脑的IP为192.168.3.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:<br> | 插上网线和电源,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认以太网的IP为192.168.3.104,你可以设置电脑的IP为192.168.3.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:<br> | ||
− | |||
[[文件: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> | ||
− | |||
− | = '''测试 | + | = '''测试''' = |
---- | ---- | ||
− | == '''USB测试 | + | == '''USB测试''' == |
直接插上U盘,挂载后可看到U盘的内容。(不是QT系统,会自动挂载)<br> | 直接插上U盘,挂载后可看到U盘的内容。(不是QT系统,会自动挂载)<br> | ||
− | |||
<br> | <br> | ||
[[文件: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> | <br> | ||
[[文件:IMX28_31454_build_11.2.0.1.png]]<br> | [[文件:IMX28_31454_build_11.2.0.1.png]]<br> | ||
<br> | <br> | ||
− | == '''以太网测试 | + | == '''以太网测试''' == |
插上网线,直接用ping命令测试eth0和eth1网口。默认eth0的IP为192.168.3.104,我设置eth1为192.168.3.105。如下:<br> | 插上网线,直接用ping命令测试eth0和eth1网口。默认eth0的IP为192.168.3.104,我设置eth1为192.168.3.105。如下:<br> | ||
− | |||
<br> | <br> | ||
[[文件: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。测试时,请短接发管脚。<br> | ||
− | |||
<br> | <br> | ||
[[文件:IMX28_31454_build_11.4.0.1.png]]<br> | [[文件:IMX28_31454_build_11.4.0.1.png]]<br> | ||
第500行: | 第398行: | ||
<br> | <br> | ||
− | == '''gpio测试 | + | == '''gpio测试''' == |
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_25和GPIO_2_27已经在驱动配置为GPIO功能了,下面以管脚GPIO_2_26为例,计算GPIO_2_26的管脚号为2*32+26=90,测试如下:<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“。<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> | ||
− | |||
测试程序中打开/dev/watchdog 设备文件,启动了Watchdog,每过一秒钟喂狗一次,系统不会重启。<br> | 测试程序中打开/dev/watchdog 设备文件,启动了Watchdog,每过一秒钟喂狗一次,系统不会重启。<br> | ||
− | |||
<br> | <br> | ||
[[文件:IMX28_31454_build_11.7.0.1.png]]<br> | [[文件:IMX28_31454_build_11.7.0.1.png]]<br> | ||
<br> | <br> | ||
测试程序中打开了/dev/watchdog 设备文件,启动Watchdog,程序进入循环状态,由于没有喂狗,30 秒后系统复位。<br> | 测试程序中打开了/dev/watchdog 设备文件,启动Watchdog,程序进入循环状态,由于没有喂狗,30 秒后系统复位。<br> | ||
− | |||
<br> | <br> | ||
[[文件:IMX28_31454_build_11.7.0.2.png]]<br> | [[文件:IMX28_31454_build_11.7.0.2.png]]<br> | ||
<br> | <br> | ||
+ | |||
</div> | </div> |
2018年7月27日 (五) 11:14的版本
文档说明
系统环境说明
- 编译主机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源码文件 |
---|---|---|---|
MY-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
2)工具目录
$ mkdir -p ~/my-imx28/03_tools
3)镜像目录
$ mkdir -p ~/my-imx28/04_image
4)应用程序目录
$ mkdir -p ~/my-imx28/01_application
准备开发环境
更新主机的源列表
$ sudo apt-get update
更新完成后如下图所示:
安装aptitude包管理工具和ia32-libs
提示:如果编译主机的Linux是32位的,可以跳过此步骤。
安装aptitude包管理工具
$ sudo apt-get -y install aptitude
提示:上图为安装过aptitude后,再次执行安装命令的截图。
使用aptitude安装ia32-libs
$ sudo aptitude -y install ia32-libs
提示:上图为安装过aptitude和ia32-libs后,再次执行安装命令的截图。
安装mkimage工具
$ sudo apt-get -y install uboot-mkimage
提示:下图为安装过mkimage工具后,再次执行安装命令的截图。
安装ncurses-dev
make menuconfig对其具有依赖性质
$ sudo aptitude -y install ncurses-dev
提示:上图为安装过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
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
U-Boot编译
准备编译
复制源码包到开发主机中
将下载的“u-boot源码”复制到Linux开发主机的“~/my-imx28/02_source”。
这一步自己采取相应的方式完成。
解压u-boot源码包
$ cd ~/my-imx28/02_source/
$ tar jxf u-boot-2015.04.tar.bz2
更新库libssl-dev
$ sudo apt-get install libssl-dev
编译
使编译配置文件生效
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env
进入u-boot源码目录
$ cd ~/my-imx28/02_source/u-boot-2015.04
清除u-boot临时文件
配置u-boot
评估板主型号 | CPU类型-内存容量 | 对应的u-boot配置 |
---|---|---|
MY-IMX28-EVK | MX283/7, 128M | mx28_evk_config |
- MY-IMX28-EVK配置示例:
执行编译
$ make u-boot.sb
提示:这里为了提高编译速度,在make后面加了“-j4”。这里编译的Linux主机是双核4线程的,所以“-j”后面用了4,也就是采用4线程编译。“-j”后面的数字可以根据系统资源分配,但是不应该超过编译主机最大支持的线程数。
- 编译完成
目标文件
- 编译文件
编译完成后通过ls命令即可看到编译得到的文件 u-boot.sb
$ ls
- 目标文件
MY-IMX28系列评估板的u-boot配置对应的目标文件名见下表:
u-boot配置 | 目标文件 |
---|---|
mx28_evk_config | imx28_ivt_uboot.sb |
编译内核
准备编译
复制源码包到开发主机中
将下载的“linux源码”复制到Linux开发主机的“~/my-imx28/02_source”。
这一步自己采取相应的方式完成。
解压linux源码包
$ cd ~/my-imx28/02_source/
$ tar jxf linux-3.14.54.tar.bz2
内核编译配置
使编译配置文件生效
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env
清除内核临时文件
- 进入linux源码目录
$ cd ~/my-imx28/02_source/linux-3.14.54
- 清除临时文件
内核配置
编译内核
- 执行编译
- 编译完成
- 目标文件
arch/arm/boot/uImage即为编译得到的内核文件,使用ls命令可查看文件信息。
$ ls arch/arm/boot/uImage -la
编译设备树
评估板型号规格与设备树文件对应关系见下表:
功能 | 源码位置 | Linux 设备和文件夹 |
---|---|---|
评估板主型号 (development main model) |
CPU类型-内存容量 | 对应的设备树文件 |
MY-IMX28-EVK | MX283/7, 128M | imx28-evk.dtb |
- 以MY-IMX28-EVK为例
- 目标文件
使用ls命令可查看编译得到的目标设备树文件信息:
$ ls arch/arm/boot/dts/*.dtb
编译模块
- 编译模块命令
- 安装模块到指定目录
$ make modules_install INSTALL_MOD_PATH=./modules
- 打包模块文件
$ cd modules
$ tar cjf ../modules.tar.bz2 *
应用程序编译
Linux应用程序编译
编写应用程序
- 进入工作目录
$ cd ~/my-imx28/01_application/
- 编写源代码
$ vim hello.c
写入以下代码并保存
- include <stdio.h>
int main(int argc, char **argv)
{
printf("Hello, MYZR!\n");
return;
}
- 查看代码
编译应用程序
- 配置环境变量
$ source ~/my-imx28/03_tools/gcc-4.4.4-glibc-2.11.1-multilib-env
- 编译
$ ${CROSS_COMPILE}gcc hello.c -o hello.out
注意:上面的命令有包含“$”号,即“${CROSS_COMPILE}gcc”,是引用我们source时产生的环境变量。
- 目标文件
$ file hello.out
可以看到目标文件 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/”目录下)。
文件系统filesystem.ubifs
复制mkfs.ubifs,ubinize到电脑的“/usr/bin”目录下(如果电脑有这两个应用就不需要复制了);复制build_rootfs和ubinize.cfg到“~/my-imx28/04_image/”目录。
烧写方式
至此,我们在“~/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按键,如下所示:
点击菜单的“Options”,然后在选项“Profiles”选择“MY-IMX28-3.14.54 NAND with uboot”,接着点击“确定”,最后点击“开始”。
烧写成功后,点击“停止”就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 :
- 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)
$ run update_nand_fdt (烧写fdt)
$ run update_nand_filesystem (烧写文件系统)
登录方式
串口登录
插上USB转串口线和电源,开机后,差不多10秒后,在终端上敲回车键可以进入系统。
ssh登录
以太网登录
插上网线和电源,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认以太网的IP为192.168.3.104,你可以设置电脑的IP为192.168.3.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:
输入完后,点击”OK“就登录完成。
USB登录(USB可识别成网口)
插上MINI USB线,开机后,差不多10秒后,可以软件SecureCRT登录,板子默认USB的IP为192.168.4.104,你可以设置电脑的IP为192.168.4.110,然后配置SecureCRT,输入用户名是root,密码myzr。如下图:
输入完后,点击”OK“就登录完成。
测试
USB测试
直接插上U盘,挂载后可看到U盘的内容。(不是QT系统,会自动挂载)
SD卡测试
直接插上SD卡,挂载后可看到SD卡的内容。(不是QT系统,会自动挂载)
以太网测试
插上网线,直接用ping命令测试eth0和eth1网口。默认eth0的IP为192.168.3.104,我设置eth1为192.168.3.105。如下:
uart串口测试
串口uat0的设备ttyAPP0,串口uat3的设备ttyAPP3。测试时,请短接发管脚。
gpio测试
GPIO_2_26,GPIO_2_25和GPIO_2_27已经在驱动配置为GPIO功能了,下面以管脚GPIO_2_26为例,计算GPIO_2_26的管脚号为2*32+26=90,测试如下:
spi测试
SPI接口为半双工模式,这里你只测发,通过示波器可观察到波形。方法一只发送0x55和0x75;方法二是发送字符串”myzr“。
watdog测试
“看门狗”,全称Watchdog timer,是一个在软件出错的时候可以复位计算机系统的硬件定时器。通常一个用户空间守护进程会在正常的时间间隔内通过/dev/watchdog 特殊设备文件来通知内核的Watchdog驱动,用户空间一切正常。如果用户空间出现问题(如RAM 错误,内核BUG 等),则通知将会停止,然后硬件Watchdog 将在超时后复位系统。
测试程序中打开/dev/watchdog 设备文件,启动了Watchdog,每过一秒钟喂狗一次,系统不会重启。
测试程序中打开了/dev/watchdog 设备文件,启动Watchdog,程序进入循环状态,由于没有喂狗,30 秒后系统复位。
</div>