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


    一、编写程序

    源码如下:

    #include 
    
    /* 执行命令: ./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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    二、编译程序

    gcc -o hello hello.c
    ./hello
    Hello, world!
    ./hello zhiguoxin
    Hello, zhiguoxin!
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上述命令编译得到的可执行程序 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
    • 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
    
    • 1
    • 2
    • 3

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

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

    就将开饭的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
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    RabbitMQ延迟消息指南【.NET6+EasyNetQ】
    自动驾驶轨迹规划之碰撞检测(四)
    2022前端CSS经典面试题
    (02)Cartographer源码无死角解析-(33) LocalTrajectoryBuilder2D: 点云数据流向、处理、消息发布等→流程复盘
    建陶行业标杆『诺贝尔瓷砖』&企企通供应链协同系统一期项目上线,数字采购领航企业高质量发展
    【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
    redis群集
    基于微信小程序电影交流平台源码成品(微信小程序毕业设计)
    macOS使用conda初体会
    蓝桥杯2022年第十三届决赛真题-背包与魔法
  • 原文地址:https://blog.csdn.net/qq_39400113/article/details/127401806