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免密登录能极大提高效率。以下是具体步骤:
- 在主机生成SSH密钥对(如果已有可跳过):
ssh-keygen -t rsa -b 4096- 将公钥复制到开发板:
ssh-copy-id nano@<开发板IP>- 测试免密登录:
ssh nano@<开发板IP>经验分享:如果ssh-copy-id不可用,可以手动操作:
- 将~/.ssh/id_rsa.pub内容复制
- 登录开发板,编辑~/.ssh/authorized_keys文件
- 粘贴公钥内容并保存
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 --version3.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 将程序传输到开发板
编译完成后,需要将可执行文件传输到开发板上运行。有几种常用方法:
- 使用scp命令:
scp hello nano@<开发板IP>:~/- 通过U盘:
- 将文件复制到U盘
- U盘插入开发板
- 在开发板上挂载U盘并复制文件
- 使用NFS共享(适合频繁传输的情况)
4.2 在开发板上运行程序
通过SSH登录开发板:
ssh nano@<开发板IP>运行程序:
./hello预期输出:
Hello, EASY EAI Nano!常见问题:如果遇到"Permission denied"错误,给文件添加执行权限:
chmod +x hello
4.3 调试技巧
在嵌入式开发中,调试是个重要环节。以下是几个实用技巧:
- 使用gdbserver远程调试:
# 开发板上 gdbserver :1234 ./hello # 主机上 arm-linux-gnueabihf-gdb hello (gdb) target remote <开发板IP>:1234- 查看程序依赖的库:
arm-linux-gnueabihf-readelf -d hello- 使用strace跟踪系统调用:
strace ./hello5. 进阶开发环境配置
5.1 使用VSCode进行远程开发
VSCode的Remote-SSH插件非常适合嵌入式开发:
- 安装Remote-SSH插件
- 添加开发板为远程主机
- 连接后可以直接在开发板上编辑代码
配置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镜像,可以快速搭建一致的开发环境:
- 下载官方Docker镜像
- 运行容器:
docker run -it --rm -v $(pwd):/workspace easyeai/nano-sdk- 在容器内编译程序
优势:环境隔离,团队共享相同配置,避免"在我机器上能运行"的问题
6. 性能优化与问题排查
6.1 程序性能分析
在资源受限的嵌入式设备上,性能优化很重要。几个实用工具:
- top:查看系统资源使用情况
- perf:性能分析工具
- gprof:程序性能分析
示例:
# 编译时添加-pg选项 arm-linux-gnueabihf-gcc -pg hello.c -o hello # 在开发板上运行后会生成gmon.out ./hello # 在主机上分析 arm-linux-gnueabihf-gprof hello gmon.out > analysis.txt6.2 常见问题解决方案
程序运行时报"no such file or directory":
- 检查是否使用了动态链接但目标板缺少库
- 解决方案:静态编译或复制缺失的库到开发板
段错误(Segmentation fault):
- 使用gdb调试
- 检查指针操作和数组越界
系统卡顿:
- 检查内存使用情况
- 优化程序算法
在实际项目中,我发现EASY EAI Nano的GPIO操作需要特别注意电平转换,直接操作可能会损坏芯片。建议在操作硬件前仔细阅读数据手册,必要时添加电平转换电路。