嵌入式
返回首页

瑞芯微RV1126B(EASY EAI平台)以太网通信方案

2025-12-03 来源:elecfans

本文档概述了系统的网络基础配置。为支持通过程序修改网络配置的需求,文档同时提供了使用yaml-cpp库进行配置修改的简明示例。

1.1 netplan与yaml文件

1.1.1 背景

本分析系统运行环境采用的是Ubuntu22.04系统。由于Ubuntu从18.04版本不再使用 ifupdown 配置网络,而改用 netplan,所以在 /etc/network/interfaces 配置固定IP是无效的,必须在/etc/netplan/xxxx.yaml中进行网络配置,即我们需要了解yaml文件的基础语法。

1.1.2 语法基础及注意事项

以下语法并不包含YAML的所有语法,只说明网络配置中所需语法。更详细的语法知识请参考YAML官网:https://yaml.org/

l 数据结构采用键值对的形式,即(键名称: 值),注意冒号后面要有空格。

l 数组有两种表达方式,例如配置双ip地址时每个元素单独一行,并以(- )开头;配置DNS时使用方括号,元素用逗号隔开。如下图所示。

wKgZPGkmcrqAZ7JIAAAnoRbZNfM541.jpg

l 使用缩进表示层级关系,缩进使用空格不推荐使用 tab,因为在不同系统 tab 长度可能不一样。

l 字母大小写敏感。

1.2 卡使用操作

1.2.1 网口接线

wKgZPGkmcruAe4rrABPbVQA5Vzk976.jpg

1.2.2 修改以太网配置

用以下命令查看开发板网络配置存放路径,会发现有4个配置文件。其中50-eth0-init.yaml是【NET0】相关的netplan配置,51-eth1-init.yaml是【NET1】相关的netplan配置。

ls /etc/netplan/wKgZO2kmcrqAFhwiAAAc0XJ7kCk426.jpg

内容如下:

wKgZO2kmcrqAfuRjAAAhFOpdIS8515.jpg

关于【DHCP】和【静态IP】分别的配置细节说明,如下图所示:

wKgZPGkmcrqAalBOAACjIxWnzfo667.jpg

注意:无论是【DHCP】还是【静态IP】,均需要插上网线才能生效,ifconfig那里才能查到配下去的IP地址。

网络配置既可以分开写,也可以写在同一个yaml文件里。下面是一个把NET0和NET1写在一起(99_config.yaml),并且把eth0配置成DHCP,把eth1配置成静态IP的示例:wKgZO2kmcrqAMIzGAABX57STmSw405.jpg

如果对yaml进行过了修改,则需要执行下方命令进行更新:

sudo netplan genera sudo netplan apply

2. 快速上手

2.1 开发环境准备

如果您初次阅读此文档,请阅读《入门指南/开发环境准备/Easy-E编译环境准备与更新》,并按照其相关的操作,进行编译环境的部署

在PC端Ubuntu系统中执行run脚本,进入EASY-EAI编译环境,具体如下所示。

cd ~/develop_environment ./run.shwKgZPGkmcrqAUDHhAAGt1XOkqw8819.jpg

2.2 源码下载以及例程编译

首先,在虚拟机后台终端,执行以下命令,创建外设单例源码管理目录:

cd /opt mkdir -p EASY-EAI-Nano-TB/demo

首先,到【百度网盘】上下载相关的单例程序:

链接:https://pan.baidu.com/s/1Br608Hiff2Xs65PzWO_qWQ?pwd=1234

提取码:1234

比如把单例程序下载到:此D:BaiduNetdisk (无规定,用户可自主选择),如下图所示。wKgZPGkmcrqAeQ1IAACltnsu3u4793.jpg

再将下载好的单例复制进入虚拟机的文件系统,过程如下图所示。

wKgZO2kmcrqAGhlVAAEnNvmgHow663.jpgwKgZO2kmcruAekwKAAEv5Q2aAtI194.jpgwKgZPGkmcruACD4tAAD8OEV-9Xc176.jpg

最后,进入到对应的例程目录执行编译操作,具体命令如下所示:

cd EASY-EAI-Nano-TB/demo/01_network ./build.sh

注:* 由于依赖库部署在板卡上,因此交叉编译过程中必须保持/mnt挂载。wKgZO2kmcruAGGktAAF8FhzNIJo512.jpg

若有以下报错则需要在【开发板上】安装一下libyaml-cpp-dev库

wKgZO2kmcruABBxzAACH-qZwRtQ486.jpg

sudo apt-get install libyaml-cpp-dev

2.3 例程运行

通过串口调试或ssh调试,进入板卡后台,定位到例程部署的位置,如下所示:

cd /userdatawKgZPGkmcruAf6txAAAhJ1hkYDs219.jpg

运行例程命令如下所示:

./test-

此demo的效果是把eth0的配置修改成【静态IP:192.168.1.170】,如果编译环境mount的是eth0或者是通过ssh调试,且之前DHCP到的IP不是192.168.1.170,此例程执行完毕后,所有链接会被断开。

2.4 运行效果

执行效果如下所示。

wKgZO2kmcruAHS4rAABANxODkck695.jpg

配置文件也同时被修改了:

wKgZPGkmcruAPiYGAABNPIW8joE398.jpg

3. 操作例程

例程位于01_network/test-ethernet/main.cpp

3.1 例程源码

以下代码展示了设置eth0的ip地址、DNS、网关参数的使用案例,供用户编码参考:

int main() { // 加载YAML文件 YAML::Node config = YAML::LoFile("/etc/netplan/50-eth0-init.yaml"); // =====================修改eth0的参数========================== //把DHCP禁用 config["network"]["ethernets"]["eth0"]["dhcp4"] = "false"; // 修改eth0的IP地址 //方式1:固定写入第一个位置 config["network"]["ethernets"]["eth0"]["addresses"][0] = "192.168.1.170/24"; //方式2:追加插入 // 输入 IP 地址和子网掩码 std::string eth0_ip_str = "192.168.1.171"; std::string eth0_mask_str = "255.255.255.0"; std::string eth0_cidr = mask_transition_cidr(eth0_ip_str, eth0_mask_str); //config["network"]["ethernets"]["eth0"]["addresses"].push_bk(eth0_cidr); // 修改eth0的DNS地址 YAML::Node addresses_eht0_dns = YAML::Load("[8.8.8.8,8.8.4.4]");//[8.8.8.8, 8.8.4.4]这是一个序列,需要转换 config["network"]["ethernets"]["eth0"]["nameserve"]["addresses"] = addresses_eht0_dns; // 修改eth0的routes地址 config["network"]["ethernets"]["eth0"]["routes"][0]["to"] = "0.0.0.0/0"; config["network"]["ethernets"]["eth0"]["routes"][0]["via"] = "192.168.1.1"; config["network"]["ethernets"]["eth0"]["routes"][0]["metric"] = "100"; #if 0 // =====================修改eth1的参数========================= config["network"]["ethernets"]["eth1"]["dhcp4"] = "false"; //方式1:固定写入第一个位置 config["network"]["ethernets"]["eth1"]["addresses"][0] = "192.168.1.172/24"; //方式2:追加插入 //std::string eth1_ip_str = "192.168.1.171"; //std::string eth1_mask_str = "255.255.255.0"; //std::string eth1_cidr = mask_transition_cidr(eth1_ip_str,eth1_mask_str); //config["network"]["ethernets"]["eth1"]["addresses"].push_back(eth1_cidr); YAML::Node addresses_eht1_dns = YAML::Load("[8.8.8.8,8.8.4.4]"); config["network"]["ethernets"]["eth1"]["nameservers"]["addresses"] = addresses_eht1_dns; config["network"]["ethernets"]["eth1"]["routes"][0]["to"] = "0.0.0.0/0"; config["network"]["ethernets"]["eth1"]["routes"][0]["via"] = "192.168.1.1"; config["network"]["ethernets"]["eth1"]["routes"][0]["metric"] = "150"; #endif // ==============将修改后的YAML文档写回到文件中================== std::ofstream fout("/etc/netplan/50-eth0-init.yaml"); fout << config; fout.close(); // =======================重启网卡=============================== system("sudo netplan generate"); system("sudo netplan apply"); return 0; }

进入嵌入式查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • FollowMe 第二季:3 - EK_RA6M5 开发板入门

  • FollowMe 第二季: 1 Adafruit Circuit Playground Express及任务讲解

  • Azure RTOS step by step workshop

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • 从0到1:树莓派与物联网教程(英文)

精选电路图
  • 设计汽车集群电源

  • 6晶体管H桥

  • USB自供电声卡

  • AVR LCD温度计—LM35

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

    相关电子头条文章