Hello World
本章节将讲解如何使用电脑(上位机)交叉编译一个打印 Hello Word
的小应用,并将其上传到开发板(下位机)上运行起来,打印出 hello word
。
准备编译环境
这里我们使用编译环境配置章节所安装的虚拟机进行演示。这个虚拟机已经配置好了一些基础的编译工具和交叉编译工具链,使用较为方便。
我们先在文件夹里新建一个文件夹,作为存放项目的文件夹,命名为 WorkSpcae
然后在 WorkSpace
文件夹里新建一个文件夹,存放我们的 helloworld 的代码,命名为 helloworld
至此,编译 helloworld 项目的环境就准备完成了。
编写 HelloWorld 代码
进入 helloworld
文件夹,右键点击空白处可以看到 Open in Terminal
选项
打开命令行,输入 touch main.c
命令,新建 main.c
源文件。
双击打开 main.c
源文件,编写源码并保存
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Hello World\n");
return 0;
}
交叉编译
交叉编译是指在我们的PC机上编译可以在开发板上运行的可执行程序文件。因为是在上位机上编译,然后在不同体系结构的开发板上跑,所以叫交叉编译。
交叉编译前,你要知道
交叉编译所使用的交叉编译工具链名叫toolchain-sunxi-musl-gcc-830
存放在 toolchains\rootfsbuild\arm\
文件夹里。
而编译使用的 gcc
编译器在 toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin
文件夹里。
当然,光有编译器还不够,还需要提供编译时需要用到的那些库文件,头文件。这些文件存放在 toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi
文件夹里。
开始交叉编译
首先,指定存放交叉编译需要使用的库文件头文件的文件夹
export STAGING_DIR=~/toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi
然后就可以使用交叉编译工具链来编译了,可以看到编译出的 helloworld
可执行文件已经生成了。
~/toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-gcc -o helloworld main.c
在开发板上运行
我们可以用 U 盘,adb,nfs,TF卡等等各式各样的方法将文件上传到开发板上,这里就使用 TF 卡把 helloworld
可执行文件上传到开发板上。
首先将 TF 卡插入读卡器并接入电脑,在设备,USB里可以看到有一个 Mass Storage 设备。选中这个设备。
然后就可以在虚拟机里看到这个读卡器了。
把 helloworld
复制进TF卡
开发板插入 TF 卡
ls /dev
查看下 mmcblk1
有没有出现,可以看到这里是有 mmcblk1
的
然后挂载 TF 卡,分区是 mmcblk1p1
,把它挂载到 /mnt/SDCARD
路径下,然后 cd
进入 /mnt/SDCARD
文件夹,可以用 ls
命令列出文件,可以看到 helloworld
就在这里。
mount /dev/mmcblk1p1 /mnt/SDCARD/
使用 chmod
命令赋予 helloworld
执行的权限,运行 helloworld
chmod a+x helloworld
./helloworld
可以看到 Hello World 被打印到屏幕上了