EASY EAI Nano开发板入门与交叉编译环境搭建

1. EASY EAI Nano开发板开箱与基础环境检查

刚拿到EASY EAI Nano开发套件时,最让我惊喜的是它的开箱即用特性。拆开包装后,我发现开发板已经预装了Ubuntu系统,这大大减少了初始配置的工作量。板载的Rockchip RK3566处理器搭配1GB内存,对于嵌入式AI开发来说是个不错的起点。

开发板背面清晰地标注了各个接口的功能:

  • 电源输入接口(Type-C 5V/2A)
  • 两个USB 2.0 Host接口
  • 千兆以太网接口
  • HDMI输出
  • 40pin GPIO扩展口
  • 调试串口(UART)

重要提示:首次使用时,建议先用串口终端连接开发板,默认波特率为1500000。这个非标准波特率需要特别注意,很多新手会在这里卡住。

连接显示器后,系统直接进入了Ubuntu桌面环境。预装的系统版本是Ubuntu 20.04 LTS,内核版本为4.19.193。系统已经配置好了网络连接和SSH服务,默认用户名是"nano",密码为"easyeai"。

2. 开发环境搭建详细步骤

2.1 主机与开发板的网络配置

要让开发板与主机顺畅通信,正确的网络配置是关键。我推荐使用有线网络连接,因为这样稳定性更高。开发板插入网线后,会自动通过DHCP获取IP地址。

在开发板上执行ifconfig命令,可以查看获取到的IP地址:

ifconfig eth0 | grep "inet addr"

然后在主机上测试连通性:

ping <开发板IP>

常见问题:如果ping不通,检查开发板和主机是否在同一局域网。有些公司的网络会隔离设备,这时可以用路由器单独组网。

2.2 SSH免密登录配置

频繁输入密码很麻烦,配置SSH免密登录能极大提高效率。以下是具体步骤:

  1. 在主机生成SSH密钥对(如果已有可跳过):
ssh-keygen -t rsa -b 4096
  1. 将公钥复制到开发板:
ssh-copy-id nano@<开发板IP>
  1. 测试免密登录:
ssh nano@<开发板IP>

经验分享:如果ssh-copy-id不可用,可以手动操作:

  1. 将~/.ssh/id_rsa.pub内容复制
  2. 登录开发板,编辑~/.ssh/authorized_keys文件
  3. 粘贴公钥内容并保存

3. 交叉编译工具链安装与配置

3.1 安装ARM交叉编译工具链

EASY EAI Nano使用ARM架构处理器,我们需要在主机上安装对应的交叉编译工具链。官方推荐使用gcc-linaro-7.5.0工具链。

安装步骤:

wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz sudo mv gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf /opt/

添加环境变量:

echo 'export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin' >> ~/.bashrc source ~/.bashrc

验证安装:

arm-linux-gnueabihf-gcc --version

3.2 编写第一个交叉编译程序

创建一个简单的hello.c文件:

#include <stdio.h> int main() { printf("Hello, EASY EAI Nano!\n"); return 0; }

使用交叉编译器编译:

arm-linux-gnueabihf-gcc hello.c -o hello

编译技巧:添加-static参数可以生成静态链接的可执行文件,避免目标板缺少库文件的问题:

arm-linux-gnueabihf-gcc hello.c -o hello -static

4. 程序部署与运行测试

4.1 将程序传输到开发板

编译完成后,需要将可执行文件传输到开发板上运行。有几种常用方法:

  1. 使用scp命令:
scp hello nano@<开发板IP>:~/
  1. 通过U盘:
  • 将文件复制到U盘
  • U盘插入开发板
  • 在开发板上挂载U盘并复制文件
  1. 使用NFS共享(适合频繁传输的情况)

4.2 在开发板上运行程序

通过SSH登录开发板:

ssh nano@<开发板IP>

运行程序:

./hello

预期输出:

Hello, EASY EAI Nano!

常见问题:如果遇到"Permission denied"错误,给文件添加执行权限:

chmod +x hello

4.3 调试技巧

在嵌入式开发中,调试是个重要环节。以下是几个实用技巧:

  1. 使用gdbserver远程调试:
# 开发板上 gdbserver :1234 ./hello # 主机上 arm-linux-gnueabihf-gdb hello (gdb) target remote <开发板IP>:1234
  1. 查看程序依赖的库:
arm-linux-gnueabihf-readelf -d hello
  1. 使用strace跟踪系统调用:
strace ./hello

5. 进阶开发环境配置

5.1 使用VSCode进行远程开发

VSCode的Remote-SSH插件非常适合嵌入式开发:

  1. 安装Remote-SSH插件
  2. 添加开发板为远程主机
  3. 连接后可以直接在开发板上编辑代码

配置tasks.json实现一键交叉编译:

{ "version": "2.0.0", "tasks": [ { "label": "Build for EASY EAI Nano", "type": "shell", "command": "arm-linux-gnueabihf-gcc", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "group": { "kind": "build", "isDefault": true } } ] }

5.2 使用Docker容器化开发环境

官方提供了Docker镜像,可以快速搭建一致的开发环境:

  1. 下载官方Docker镜像
  2. 运行容器:
docker run -it --rm -v $(pwd):/workspace easyeai/nano-sdk
  1. 在容器内编译程序

优势:环境隔离,团队共享相同配置,避免"在我机器上能运行"的问题

6. 性能优化与问题排查

6.1 程序性能分析

在资源受限的嵌入式设备上,性能优化很重要。几个实用工具:

  1. top:查看系统资源使用情况
  2. perf:性能分析工具
  3. gprof:程序性能分析

示例:

# 编译时添加-pg选项 arm-linux-gnueabihf-gcc -pg hello.c -o hello # 在开发板上运行后会生成gmon.out ./hello # 在主机上分析 arm-linux-gnueabihf-gprof hello gmon.out > analysis.txt

6.2 常见问题解决方案

  1. 程序运行时报"no such file or directory":

    • 检查是否使用了动态链接但目标板缺少库
    • 解决方案:静态编译或复制缺失的库到开发板
  2. 段错误(Segmentation fault):

    • 使用gdb调试
    • 检查指针操作和数组越界
  3. 系统卡顿:

    • 检查内存使用情况
    • 优化程序算法

在实际项目中,我发现EASY EAI Nano的GPIO操作需要特别注意电平转换,直接操作可能会损坏芯片。建议在操作硬件前仔细阅读数据手册,必要时添加电平转换电路。