《rk3399:基于一个物理网卡设置两个网络接口》

一、前言

针对需要在系统中(只有一个物理网卡),添加一个虚拟网卡并给定其一个静态IP以供调试使用,同时不影响另一个正常的网卡进行DHCP获取IP的需求,可以在系统中增加一个macvlan虚拟网卡。macvlan 一种虚拟网卡解决方案。

二、什么是macvlan

macvlan 一种虚拟网卡解决方案

三、内核修改配置

可以执行以下命令测试内核是否支持
sudo ip link add macvlan0 link enp1s0 type macvlan mode bridge
如未支持,需要修改内核设置
CONFIG_MACVLAN=y
CONFIG_MACVTAP=y
修改/etc/network/interfaces
增加以下内容,给添加的虚拟网卡设置一个静态IP

auto macvlan0
iface macvlan0 inet static
    address 192.168.200.4
    netmask 255.255.255.0
    #gateway 192.168.1.1
    #dns-nameservers 8.8.8.8
    pre-up ip link add macvlan0 link enp1s0 type macvlan mode bridge
	post-down ip link del macvlan0

四、开机执行脚本

macvlan虚拟网卡是基于网卡enp1s0的,所以必须得enp1s0 up后才能upmacvlan。该脚本开机后检测enp1s0是否up,如果已经up,则up macvlan0。

#!/bin/bash

MAX_RETRIES=10
DELAY_SEC=1

counter=0

while true; do
	if ip link | grep -q enp1s0; then
		break
	fi

	((counter++))
	if [ $counter -eq $MAX_RETRIES ]; then
		echo "Interface not found after maximum attempts. Exiting..."
		exit 1
	else
		echo "Interface not found yet. Waiting for ${DELAY_SEC}s (attempt ${counter})..."
		sleep $DELAY_SEC
	fi
done

# Enable macvlan0 interface
ifup macvlan0

echo "Enabled macvlan0 interface."

exit 0

比如在 rc.local或者其他开机启动脚本中 增加
sudo createMacvlan.sh &
开机自启动 createMacvlan.sh

五、最终效果

enp1s0 DHCP动态获取IP,macvlan0使用静态IP,两者互不影响。
image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,首先我们需要了解一下 rk3399 的架构和 dma-buf 机制。 rk3399 是一款64位六核处理器,其中包含了两个 Cortex-A72 核和四个 Cortex-A53 核,还有一个 Mali-T860MP4 GPU,可以支持多种操作系统,例如 Ubuntu、Android、Debian 等。 dma-buf 机制是 Linux 内核中的一种机制,用于在不同的设备之间共享内存,可以很方便地实现高效的数据传输。 接下来我们来创建一个字符设备,并利用 dma-buf 机制从网卡读取数据的流程如下: 1. 首先,我们需要创建一个字符设备,可以使用 Linux 内核中的 misc 设备(miscdevice)来实现。在 misc 设备中,我们需要实现 open、release、read、write 函数,这些函数用于打开设备、释放设备、读取数据、写入数据等操作。 2. 接下来,我们需要使用 dma-buf 机制从网卡读取数据。首先,我们需要申请一个 dma-buf,可以使用 dma_alloc_coherent 函数来实现。然后,我们需要将网卡接收到的数据复制到 dma-buf 中,可以使用 skb_to_sgvec 函数将 sk_buff(套接字缓冲区)中的数据复制到 scatterlist 中,然后使用 dma_map_sg 函数将 scatterlist 映射到 dma-buf 中。 3. 最后,我们需要将 dma-buf 中的数据传输到用户空间。可以使用 mmap 函数将 dma-buf 映射到用户空间,然后用户空间就可以直接访问 dma-buf 中的数据了。 以上就是从网卡读取数据并使用 dma-buf 机制进行传输的流程。需要注意的是,在实现过程中需要考虑到多线程同步、内存泄漏等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程界的小学生、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值