开发环境:
主机:Ubuntu 20.04
开发板:LuckFox Pico Plus开发板
Windows 下有很多虚拟机软件,目前市面上流行的有 VMware 和 VirtualBox。 VMware 分为收费专业版 Workstation Pro 和非商用免费版 Workstation Player,推荐使用 Workstation Player。笔者这里使用的编译主机的Ubuntu 20.04,关于Workstation和Ubuntu安装笔者这里不在赘述,网上资料很多,笔者默认已经装好Workstation和Ubuntu。
1 依赖库安装
2.1 更新主机的源列表
$ sudo apt-get update
2.2 安装依赖工具
$ sudo apt-get install repo git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config
3 TFTP服务环境搭建与测试
TFTP简单文件传输协议,是一个基于UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。
TFTP 协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。
(1)下载并安装 tftp
$ sudo apt-get install openbsd-inetd
$ sudo apt-get install tftpd tftp
(2)新建tftp目录和改变其属性
$ sudo mkdir /tftpboot
$ sudo chmod 777 /tftpboot
(3)修改 /etc/inetd.conf文件
$ sudo vim /etc/inetd.conf
新增如下内容:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot
(4)启动tftp
$ sudo /etc/init.d/openbsd-inetd start
(5)本地测试
在/tftpboot/目录下新建一个文件test,输入内容,保存。然后打开另外一个终端,测试文件传输。
– 输入命令tftp 127.0.0.1
– 输入get test
– 输入q可以退出
– 退出后,使用ls命令可以发现当前目录下有test文件,如果这个文件和服务器中的test文件内容一模一样,表明服务器搭建成功
(6)开发板测试
开发板下载测试
#tftp -g -l test -r test 192.168.19.6
【注】-l后的文件是下载后文件名,可以自定义;-r后的是服务器的文件名。
3 安装配置交叉编译工具链
编译代码需要编译器,Linux系统的编译器是GCC,而Windows的C/C++编译器是Microsoft Visual C++,那么要想在Windows也能GCC等一系列编译工具,就需要安装MinGW。
MinGW 是用于进行 Windows 应用开发的 GNU 工具链(开发环境),它的编译产物一般是原生 Windows 应用,虽然它本身不一定非要运行在 Windows 系统下(是的 MinGW 工具链也存在于 Linux、BSD 甚至 Cygwin 下)。说的通俗点,MinGW就是你在Windows下使用GNU工具链的一个编译工具。
MinGW编译的程序只能在X86上运行,不能运行在嵌入式的硬件平台,因为嵌入式平台大都是ARM体系结构,因此这就需要一个在Windows环境下能使用GNU编译ARM体系结构的编译工具,这也就是交叉编译工具。
所谓交叉编译工具就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行。
做过嵌入式开发的朋友都知道,在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。
嵌入式开发流程大致就是在宿主机完成目标的开发工具,使用功能交叉编译工具生成固件,将固件烧写到目标机,在开发初期,还需要在线调试等工作,这就需要诸如J-link等调试工具。
arm-rockchip830-linux-uclibcgnueabihf就是一个基于ARM的交叉编译工具链,而且还是开源的,适用于Arm LuckFox Pico 的所有处理器,包括GNU编译器(GCC),以及GDB,不仅适用于Windows,还适用于Linux,MacOS上的交叉编译。
下载地址:https://github.com/LuckfoxTECH/luckfox-pico
首先下载LuckFox Pico的SDK。
$ git clone https://github.com/LuckfoxTECH/luckfox-pico.git
然后安装交叉编译工具链。
$ cd tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
$ source env_install_toolchain.sh
交叉编译器验证
方法一:在命令行下输入 arm-rockchip830-linux 然后按tab键看会不会自动补全
方法二:输入:arm-rockchip830-linux-uclibcgnueabihf-gcc -v
表示配置成功!
最好的验证验证方法就是直接编译一个例程,我们就编译第一个裸机例程“hello.c”试试。
$ vim hello.c
#include <stdio.h>
int main()
{
printf("Hello, LuckFox Pico Plus!\n");
return 0;
}
$ arm-rockchip830-linux-uclibcgnueabihf-gcc hello.c -o hello
使用如下命令查看 hello文件信息:
$ file hello
从图中可以看到 hello是32位 LSB 的 ELF 格式文件,目标机架构为 ARM,,说明我们的交叉编译器工作正常。
最后将程序下载到开发板,修改用户权限后即可运行。