当前位置: 首页 > news >正文

海思AI芯片(Hi3559/Hi3516)开发(一):开发环境搭建——从零配置网络与文件共享

1. 开发环境搭建前的准备工作

第一次拿到海思Hi3559或Hi3516开发板时,很多开发者会感到无从下手。我刚开始接触这块板子时也踩过不少坑,最头疼的就是如何快速建立稳定的开发环境。与常见的树莓派等开发板不同,海思芯片的开发环境配置有其特殊性,需要特别注意网络和文件共享的设置。

开发板通常有两种连接方式:串口和网络。串口连接虽然简单,但只能进行基础操作,效率低下。真正的开发效率提升来自于稳定的网络连接和便捷的文件共享。我建议新手开发者按照这个顺序操作:先通过串口完成基础网络配置,再建立网络连接,最后配置NFS文件共享。这样能避免很多后期调试的麻烦。

在开始之前,你需要准备以下硬件和软件:

  • 海思Hi3559/Hi3516开发板(以EMB-7540为例)
  • 串口转USB线(建议使用FT232芯片的稳定型号)
  • 网线(建议Cat5e及以上)
  • Ubuntu主机(推荐18.04或20.04 LTS版本)
  • 串口调试工具(推荐使用MobaXterm或SecureCRT)

2. 基础串口连接与网络配置

2.1 串口连接实操

开发板通常会引出两个串口:UART0用于系统调试,COM3供用户程序使用。我习惯使用UART0进行初始配置,因为这是最可靠的连接方式。连接时要注意三个关键参数:波特率115200、8位数据位、无校验位。很多新手遇到的第一个坑就是波特率设置错误,导致接收到的全是乱码。

接线时有个小技巧:先用万用表确认开发板串口的TX和RX引脚,避免接反。我遇到过因为线序接反导致一整天调试无果的情况。连接成功后,打开串口工具应该能看到类似这样的启动日志:

[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Initializing cgroup subsys cpu ...

2.2 网络接口配置

通过串口登录后,首先用ifconfig查看网络接口。海思开发板通常有eth0和eth1两个接口,eth0是主要使用的网口。如果开发板没有获取到IP(常见于新板子),需要手动配置:

ifconfig eth0 192.168.1.100 netmask 255.255.255.0 route add default gw 192.168.1.1

这里有个实际项目中的经验:建议将开发板IP设置为与主机同网段的静态IP,避免DHCP分配的IP发生变化影响开发。我曾经因为IP变动导致NFS挂载失效,浪费了半天时间排查。

测试网络连通性时,不要只用ping命令。我建议用以下组合命令全面检测:

ping 192.168.1.1 -c 3 # 测试网关 ping 192.168.1.9 -c 3 # 测试主机 telnet 192.168.1.9 22 # 测试端口连通性

3. 建立稳定的远程访问

3.1 Telnet服务配置

虽然SSH更安全,但很多海思开发板默认只开放Telnet服务。开启Telnet服务的方法如下:

# 开发板上操作 vi /etc/inetd.conf # 确保telnet服务未被注释 /etc/init.d/inetd restart

在主机端连接时,我强烈建议使用支持会话保存的工具如MobaXterm。它不仅能记录操作历史,还能方便地上传下载文件。连接成功后你会看到熟悉的Linux提示符:

[root@Hi3516]#

3.2 SSH服务进阶配置

如果条件允许,建议配置SSH服务提升安全性。先在开发板上安装openssh:

opkg update opkg install openssh-server

然后修改SSH配置允许root登录:

vi /etc/ssh/sshd_config # 修改PermitRootLogin为yes /etc/init.d/sshd restart

这里有个安全小技巧:修改默认的22端口能减少被扫描的风险。我在实际项目中会将端口改为5位数的随机端口,比如32456。

4. NFS文件共享深度配置

4.1 主机端NFS服务搭建

在Ubuntu主机上安装NFS服务时,很多人会漏装关键组件。完整的安装命令应该是:

sudo apt-get install -y nfs-kernel-server nfs-common rpcbind

配置/etc/exports文件时,我推荐使用以下参数组合,这是经过多个项目验证的最稳定配置:

/home/yourname/nfs 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)

参数说明:

  • insecure:允许非特权端口访问
  • no_root_squash:保持root权限
  • sync:同步写入,避免数据丢失

重启服务时要注意顺序,否则可能导致挂载失败:

sudo service rpcbind restart sudo service nfs-kernel-server restart

4.2 开发板挂载优化

在开发板上挂载NFS时,建议添加以下参数提升稳定性:

mount -t nfs -o nolock,tcp,rsize=32768,wsize=32768,timeo=14,intr 192.168.1.9:/home/yourname/nfs /mnt/nfs

参数解析:

  • rsize/wsize=32768:提高传输效率
  • timeo=14:优化超时设置
  • intr:允许中断挂载操作

我在项目中发现,不加tcp参数在WiFi环境下极易断开连接。另外,建议在/etc/fstab中添加自动挂载配置:

192.168.1.9:/home/yourname/nfs /mnt/nfs nfs nolock,tcp,rsize=32768,wsize=32768,timeo=14,intr 0 0

5. 常见问题排查指南

5.1 网络连接故障

当遇到网络不通时,建议按照以下步骤排查:

  1. 检查物理连接:网口指示灯是否亮起
  2. 用ifconfig确认IP配置正确
  3. 使用arp -a查看ARP表是否学习到主机MAC地址
  4. 用tcpdump抓包分析:
    tcpdump -i eth0 -nn host 192.168.1.9

5.2 NFS挂载失败

NFS问题通常出现在权限和版本兼容性上。首先确认:

  • 主机防火墙是否放行了NFS端口(建议暂时关闭测试)
  • showmount -e是否能显示共享目录
  • /var/log/syslog中的错误信息

我遇到过一个典型问题:Ubuntu 20.04默认使用NFSv4,而老版本开发板只支持NFSv3。解决方法是在主机端/etc/nfs.conf中添加:

[nfsd] vers3=y

5.3 性能调优技巧

对于大文件传输,可以通过以下设置提升NFS性能:

# 主机端 echo 32768 > /proc/sys/net/core/rmem_default echo 32768 > /proc/sys/net/core/wmem_default # 开发板端 mount -o remount,rsize=65536,wsize=65536 /mnt/nfs

在长期项目中,我建议使用自动化脚本完成环境配置。比如这个初始化脚本:

#!/bin/bash # 设置IP ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # 挂载NFS mkdir -p /mnt/nfs mount -t nfs -o nolock,tcp 192.168.1.9:/home/yourname/nfs /mnt/nfs # 设置环境变量 echo "export PATH=$PATH:/mnt/nfs/bin" >> /etc/profile
http://www.jsqmd.com/news/541129/

相关文章:

  • 终极指南:brpc跨平台兼容性测试与自动化测试框架搭建
  • 训练 Tokenizer - yi
  • Apache ShenYu API 网关项目教程
  • 如何使用Cobalt实现与Notion、Obsidian的无缝集成:完整指南
  • 基于YOLO Tracking的实时人体姿态跟踪实现教程
  • Go gRPC中间件v2升级指南:从v1到v2的完整迁移策略
  • HertzBeat高性能集群架构深度解析:如何支撑大规模监控场景的终极指南
  • SEO_详解SEO优化的常见误区及解决办法(474 )
  • Mermaid CLI终极指南:3分钟掌握命令行图表生成神器
  • 游戏模组革命:BepInEx插件框架如何彻底改变你的游戏体验?
  • MangoHud与HDR视频编码:质量与性能监控终极指南
  • 如何快速上手Apache OpenWhisk Python动作开发:完整指南与实战教程
  • Apache Kyuubi 核心技术术语解析
  • Markdown Viewer自定义主题:从样式定制到场景落地的全指南
  • HelloWorld.h:嵌入式LED硬件抽象库设计与实战
  • 对抗攻击新思路:为什么Diffusion模型比GAN更适合生成隐蔽攻击样本?
  • Nacos 1.4.0启动失败?可能是你的Tomcat嵌入式容器配置有问题
  • 超实用dc.js性能优化指南:让大数据可视化提速50%的终极技巧
  • 如何为Fantasque Sans字体项目贡献代码:完整开源字体开发指南
  • 3步精通pinyinjs:从基础转换到企业级应用
  • 人工智能入门学习DAY3
  • 英雄联盟智能工具League-Toolkit:效率提升与智能辅助完全指南
  • 白发转黑哪个品牌有效?黑奥秘头皮生态论,根源调理更专业 - 美业信息观察
  • TVM构建系统详解:CMake与Makefile配置最佳实践
  • TagStudio自定义主题开发终极指南:打造个性化视觉体验
  • 在 C# 中,原子操作主要通过 System.Threading 命名空间中的工具和 Interlocked 类实现,用于确保多线程环境下的线程安全操作
  • 白转黑哪个养发机构更专业?黑奥秘AI智能检测,千人千方更精准 - 美业信息观察
  • HertzBeat自定义监控模板开发终极指南:打造专属监控能力 [特殊字符]
  • 手把手教你用MATLAB读取南极洲流域边界SHP文件(附避坑指南)
  • Leaflet地图定位全攻略:从点位到多边形的4种实战方法(附代码)