目录
【开发板、虚拟机和PC的三者联通】
使用串口连接到开发板
连接Ubuntu虚拟机
互ping测试
【交叉编译hello.c文件】
Ubuntu编译无法在板子运行问题
使用交叉编译链编译hello.c
【开发板、虚拟机和PC的三者联通】
在这里我们使用IMX6ULL-PRO开发板进行学习,首先需要保证开发板、Ubuntu虚拟机以及Windows下的网卡可以互相ping通、
Ubuntu虚拟机使用桥接模式直接连接网卡,开发板直接使用网线连接网卡,这样虚拟机和开发板同时连接了此网卡,那么就可以通过此网卡互相ping了
在这里,我们分别给虚拟机、开发板以及网卡指定IP地址
Ubuntu:192.168.5.11
开发板:192.168.5.9
PC网卡:192.168.5.10
尝试进行互ping测试
我们可以使用MobaXterm软件通过串口连接开发板,同时通过ssh连接到虚拟机
使用串口连接到开发板
当我们使用串口线连接到电脑后,通过如下步骤来建立连接
连接Ubuntu虚拟机
使用MobaXterm连接到Ubuntu虚拟机,ip可以填写NAT获得的电脑网络IP也可以填写桥接网卡的IP
互ping测试
如下图,开发板可以ping通网卡以及虚拟机
如下图,虚拟机可以ping通开发板和网卡
【交叉编译hello.c文件】
一般来说,我们是使用虚拟机来作为服务器的,在Ubuntu上进行目标的编译,然后通过一系列手段在开发板上面执行或者传输等
现在在我们的Ubuntu下的01_hello文件夹下有一个文件,hello.c,我们使用gcc对其进行编译
gcc hello.c -o hello
我们使用gcc编译器编译了hello.c同时生成了hello这个可执行文件,运行
输出了结果
现在我们通过挂载把这个文件挂载到开发板上面尝试运行,所谓的挂载,可以理解为把一个设备挂载到开发板上的一个目录,通过访问这个目录就是在访问此设备了
在这里我们把Ubuntu上的/home/book/nfs_rootfs目录挂载到开发板上的/mnt目录下,使用如下的命令
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
-t nfs
: 这个选项告诉mount
命令要挂载的是一个NFS类型的文件系统
-o nolock,vers=3
: 这是挂载选项,它们为NFS挂载提供了特定的配置。
nolock
: 这个选项表示不使用NFSv3的锁定机制。在某些情况下,这可以提高性能,但也可能导致数据不一致的问题,因此使用时需要谨慎
vers=3
: 这个选项指定了使用的NFS版本为3。NFS有多个版本,每个版本都有其特定的功能和特性
Ubuntu编译无法在板子运行问题
当我们成功在板子上挂载Ubuntu的文件夹的时候,便可以尝试执行在Ubuntu上面编译成功并且执行成功的hello可执行文件了
经过尝试发现,无法在板子上面执行编译好的hello程序,原因是gcc编译器是为x86架构编译的,如果我们要给开发板也就是ARM架构编译可执行文件,那么我们需要使用交叉编译链
通过file + 可执行文件名,我们可以看到hello可执行文件是基于x86架构的
使用交叉编译链编译hello.c
为了使可执行文件可以正常在开发板上开发,我们使用交叉编译
arm-buildroot-linux-gnueabihf-gcc hello.c -o hello_arm
生成一个hello_arm可执行文件,我们使用file查看它的架构,可知它是ARM架构的,所以可以在开发板上面执行
在开发板上执行hello_arm可执行文件