RK3588修改eth0和eth1,对调这两个网卡设备的名称

1、以太网卡的名称一般是ethX(X可以是0,1,2,3…),一般我们的设备只有一个网卡,并且一般也不会改变它的网卡名称,所以不需要关注此问题,但是有一些设备有两三个网卡,有时候我们需要eth0是指定的硬件网卡设备,此时我们就需要人为干预一下,修改一下网卡的名称,使其满足我们的使用场景。
2、在rk平台,假如你的两个网卡都是使用的gmac口,例如gmac0和gmac1口,此时只需要在dts适当调整一下位置,让gmac1放在dts比较靠前的位置,在gmac0之前,让gmac1端的网卡先被注册,即可对调eth0和eth1网卡设备;

3、如果你的网卡设备一个是接的gmac0,一个是其他的接口,比如pcie的网卡,那么2的方法就不管用了。
此时需要去到驱动端去修改。
例如我这里,主控平台是rk3588,kerne版本是5.1,gmac0端的网卡注册成了eth0,对应pcie网卡只能注册成eth1了,
我这里由于设备使用要求,要把pcie网卡命名成eth0,才能满足要求,此时就需要把gmac端对应的网卡命名成eth1。
修改如下:在注册网卡设备之前使用strcpy去修改,例如我这里, 分别找到gmac端和pcie端网卡注册的地方,在网卡注册之前去修改好它的设备名称:

gmac端网卡注册的地方(网卡设置注册接口:register_netdev):

+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -5198,12 +5198,15 @@ int stmmac_dvr_probe(struct device *device,
                goto error_phy_setup;
        }

+       printk("czd: _%s_ %d 1111 ndev->name is %s\n", __func__, __LINE__, ndev->name);
+        strcpy(ndev->name, "eth1"); //rename eth0 to eth1 by caizd
        ret = register_netdev(ndev);
        if (ret) {
                dev_err(priv->device, "%s: ERROR %i registering the device\n",
                        __func__, ret);
                goto error_netdev_register;
        }
+       printk("czd: _%s_ %d 2222 ndev->name is %s\n", __func__, __LINE__, ndev->name);

pcie端网卡注册的地方:

+++ b/kernel/drivers/net/ethernet/realtek/r8125/r8125_n.c
@@ -14065,12 +14066,15 @@ rtl8125_init_one(struct pci_dev *pdev,
         }

         rtl8125_tally_counter_clear(tp);
-
+       printk("czd: _%s_ %d 1 pdev-name is %s\n", __func__, __LINE__, dev->name);
         pci_set_drvdata(pdev, dev);
+        strcpy(dev->name, "eth0"); //add by caizd
+       printk("czd: _%s_ %d 2 pdev-name is %s\n", __func__, __LINE__, dev->name);
         rc = register_netdev(dev);
         if (rc)
                 goto err_out;
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 这是不正确的。在许多Linux系统中,eth是默认的网络接口名称,用于连接以太网。但是,如果系统中有多个网络接口,则可能会使用其他名称,例如eth1或enps3。因此,eth不是必须的,但它是常见的。 ### 回答2: Linux系统中没有eth0这个设备是因为在目前流行的Linux发行版中,eth0被废除了,取而代之的是更加通用的设备命名规则。 在早期的Linux发行版中,网络接口设备的命名规则是基于硬件设备的MAC地址来进行命名的,例如eth0eth1等。然而,随着时间的推移,由于硬件设备的更新换代和增多,基于MAC地址的命名规则越来越难以维护。此外,在虚拟机、容器等虚拟化环境中,MAC地址会被动态生成,这样也导致了eth0eth1等命名规则的不确定性。 因此,新一代Linux内核采用了更加通用的设备命名规则,将设备命名与设备属性、位置等联系起来。新命名方式与底层硬件无关,使得用户可以更加容易地识别和管理网络设备,例如enp2s0、wlp3s0等。其中,“en”表示设备网卡;“p2”表示设备为PCI总线上的第二个设备;“s0”表示设备位于总线上的第一个插槽上。 综上所述,Linux中没有eth0这个设备是因为新一代Linux内核采取了更加通用的、更易于维护的设备命名规则,以适应现代化的硬件设备和虚拟化环境的需求。 ### 回答3: eth0 是一种网络设备名称,用来表示一块以太网网卡。然而,在某些情况下,你可能会发现你的系统中并没有一个叫做 eth0设备,这可能会让你困惑。实际上,这是因为 Linux 中的网络设备名称可能会因许多因素而变化,其中一个因素就是系统内核的网络驱动程序。 在以前的 Linux 内核中,网络设备的命名是由内核模块和驱动程序的加载顺序来确定的。因此,如果你插入了一个 USB 网络适配器,它可能会被命名为 eth1,因为内核中已经有 eth0 这个设备了。这样可能会导致一些问题,因为一些应用程序或者配置文件可能会假定 eth0 总是存在的。 为了解决这个问题,Linux 内核的版本 2.6.17以及之后的版本,引入了一种新的命名方式,称为Consistent Network Device Naming,简称 CN::DN。这种命名方式使用了物理位置和设备种类等属性来为网络设备命名,以保证设备名称具有唯一性和可预测性。因此,现在的网络设备名称可能会是 enp0s3 或者 wlp2s0(其中 en 表示 Ethernet,wl 表示无线网卡,p0 表示位置 0)。这些名称虽然不同于历史上的 eth0,但却更具有意义,能够为用户提供更好的体验。 综上所述,如果你发现 Linux 系统中没有 eth0 这个设备,不必惊慌和困惑,你需要明白的是,Linux网络设备名称是可以根据设备的属性和驱动程序的情况而变化的,你只需要根据实际情况来查找和配置网络设备即可。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

零意@

您的打赏将是我继续创作的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值