正点原子I.MX6U-MINI应用篇1编写第一个应用App程序helloworld

Posted 果果小师弟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正点原子I.MX6U-MINI应用篇1编写第一个应用App程序helloworld相关的知识,希望对你有一定的参考价值。

一、编写程序

源码如下:

#include <stdio.h>

/* 执行命令: ./hello zhiguoxin
 * argc = 2
 * argv[0] = ./hello
 * argv[1] = zhiguoxin
 */

int main(int argc, char **argv)

	if (argc >= 2)
		printf("Hello, %s!\\n", argv[1]);
	else
		printf("Hello, world!\\n");
	return 0;

二、编译程序

gcc -o hello hello.c
./hello
Hello, world!
./hello zhiguoxin
Hello, zhiguoxin!

上述命令编译得到的可执行程序 hello 可以在 Ubuntu 中运行,

执行file hello命令就可以看到hello是64位LSB的ELF格式文件,目标机架构为x86-64,说明这个可执行文件只能在PC机上执行。

但是如果把它放到 ARM 板子上去,它是无法执行的。因为它是使用gcc编译的,是给PC机编译的,里面的机器指令是x86 的。我们要想给 ARM 板编译出 hello 程序,需要使用交叉编译工具链,交叉编译的工具链我们已经安装过了,详细请看【正点原子】I.MX6U 嵌入式Linux驱动开发指南V1.x.pdf 的第 4.3 小节。我是用的是arm-linux-gnueabihf交叉编译工具链。使用arm-linux-gnueabihf-gcc -v可以查看交叉编译工具链的版本号。

然后就可以使用下面命令编译出可以在ARM板子上运行的可执行文件了。

arm-linux-gnueabihf-gcc -o hello hello.c
  • 1、arm 表示这是编译 arm 架构代码的编译器。
  • 2、linux 表示运行在 linux 环境下。
  • 3、gnueabihf 表示嵌入式二进制接口。
  • 4、gcc 表示是 gcc 工具。

这样编译出来的 hello 程序才可以在 ARM 板子上运行。执行file hello命令就可以看出hello是32位 LSB 的 ELF 格式文件,目标机架构为ARM,说明这个交叉编译正常,可执行文件可以在ARM板上执行。

三、上传程序到开发板

开发板启动后通过nfs挂载Ubuntu目录的方式,将相应的文件拷贝到开发板上。简单来说,就是通过NFS在开发板上通过网络直接访问ubuntu虚拟机上的文件,并且就相当于自己本地的文件一样。
开发板想访问/home/zhiguoxin/myproject/100ask_app_development_source这个目录中的文件,就要把/home/zhiguoxin/myproject/100ask_app_development_source挂载到开发板的mnt目录,这样就可以通过nfs来访问/home/zhiguoxin/myproject/100ask_app_development_source了。

因为我的代码都放在/home/zhiguoxin/myproject/100ask_app_development_source这个目录下,所以我们将这个目录作为NFS共享文件夹。设置方法参考移植SQLite3、OpenCV到RV1126开发板上开发人脸识别项目第一章。

Ubuntu IP为 192.168.10.100,然后一般都是挂载在开发板的mnt目录下,这个目录是专门用来给我们作为临时挂载的目录。

然后使用MobaXterm软件通过SSH访问开发板。

ubuntu ip:192.168.10.100
windows ip:192.168.10.200
开发板ip:192.168.10.50

在开发板上执行以下命令:

mount -t nfs -o nolock,vers=3 192.168.10.100:/home/zhiguoxin/myproject/100ask_app_development_source /mnt

就将开饭的mnt目录挂载在ubuntu的/home/zhiguoxin/myproject/100ask_app_development_source目录下了。这样我们就可以在Ubuntu下修改文件,然后可以直接在开发板上执行可执行文件了。当然我这里的/home/zhiguoxin/myproject/windows之间是一个共享目录,我也可以直接在windows上面修改文件,然后ubuntu和开发板直接进行文件同步了。

然后编译,可以编译成功

GCC编译过程

一个 C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等 4 步才能变成可执行文件。

gcc -E -o hello.i hello.c
gcc -S -o hello.s hello.i
gcc -c -o hello.o hello.s
gcc -o hello hello.o

以上是关于正点原子I.MX6U-MINI应用篇1编写第一个应用App程序helloworld的主要内容,如果未能解决你的问题,请参考以下文章

正点原子I.MX6U-MINI应用篇3Framebuffer应用编程,操作屏幕

正点原子I.MX6U-MINI驱动篇1字符设备驱动开发-Hello驱动(不涉及硬件操作)

正点原子I.MX6U-MINI应用篇2点亮开发板的LED

正点原子I.MX6U-MINI移植篇kernel移植过程详解

正点原子I.MX6U-MINI应用篇4嵌入式Linux关于GPIO的一些操作

正点原子I.MX6U-MINI移植篇kernel移植过程详解