Chinaunix首页 | 论坛 | 博客
  • 博客访问: 44717
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-17 19:50
文章分类
文章存档

2015年(9)

分类: LINUX

2015-09-17 20:08:22

一,问题由来 

      第一次碰到该问题是初次使用linux时,许多资料上说linux下通过ifconfig命令可以查看到网卡名:eth0  可是我只看到以太网卡名:enp12s0  无线网卡:wlp3s0  虽然郁闷,但由于没有实际的需求,就没仔细研究。上学期老师让安装synopsys Design Complier时,破解文件对网卡有要求,必须绑定以太网卡地址,且网卡名必须是eth0.刚开始在网上得到的方法是修改网络配置的脚本 (/etc/sysconfig/network-scripts/脚本)。如:将ifcfg-enp12s0命名为ifcfg-eth0 然后修改该配置脚本,将脚本的NAME=enp12s0修改为NAME=eth0然后重启网络,可是ifconfig后发现该办法根本没用,最后在一篇博客偶看到说向内核传递 net.ifnames=0 biosdevnmae=0 可以解决,于是我修改/boot/grub2/grub.cfg文件,在内核启动加入该参数,重启。哈哈,真的解决了,虽然不知道为什么。可以郁闷的是无线网卡名被默认成eth1 ,不应该是wlan0吗?虽然这没实际影响,可就是让人不爽,wlan0这个名字明明看起来比eth1漂亮多了。于是有了下文:
后来在dmesg下发现这样一条信息:linux下的设备命名
这使我想到应该是系统启动时直接把网卡名修改了,可是是哪个程序修改的呢?该程序的配置文件又在哪里呢?没办法还是谷狗了,这次发现一个新的关键词  udev 那么udev是什么呢?网上解释udev是linux下新的设备管理工具:

,udev说明:
      udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目 录底下的设备节点。它同时也是用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括 加载firmware时。udev的最新版本依赖于升级后的Linux kernel 2.6.13的uevent接口的最新版本。使用新版本udev的系统不能在2.6.13以下版本启动,除非使用noudev参数来禁用udev并使用传 统的/dev来进行设备读取。

     解释的好专业,可是没有直接的帮助,还是请教linux最优秀的导师吧——man 。通过man  udev  我得到如下信息:
udev - Dynamic device management

       The udev rules are read from the files located in the system rules
       directory /usr/lib/udev/rules.d, the volatile runtime directory
       /run/udev/rules.d and the local administration directory
       /etc/udev/rules.d. All rules files are collectively sorted and
       processed in lexical order, regardless of the directories in which
       they live. However, files with identical filenames replace each
       other. Files in /etc have the highest priority,
基本意思好像是udev是一个动态设备管理工具,从 /etc/udev/rules.d/ ; /usr/lib/udev/rules.d/ ; /run/udev/rules.d/ 三个目录下读取规则文件,其中以/etc/udev/rules.d/ 目录下的规则文件优先级别最高。

三,解决过程

       /run/下的目录内容应该是系统运行动态产生的,不是问题所在。/etc/下都是配置文件,应该是问题所在,于是我进入该目录下,结果发现没结果,呵 呵,根本没任何东西;进入/usr/lib/udev/rules.d/下发现不少文件,我把带“net”的文件全部看了一边,在60- net.rules文件看到哦如下内容:
linux下的设备命名

这下问题很明白了,程序/lib/udev/rename_device重命名了网卡设备.然后,又查看了一下 50-udev-default.rules该文件有许多设备的udev默认读入规则,按照里面的规则,以及man udev得到的/etc/udev/rules.d/目录下的配置文件优先级最高,就在该目录下新建了一个60-persistent-net.rules 并在该文件中加入如下内容:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:88:e3:2e:8c:93",  ATTR{type}=="1", KERNEL=="enp12s0*", NAME="eth0"

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:ed:b9:e2:5f:e9",  ATTR{type}=="1", KERNEL=="eth*", NAME="wlan0"
内容的大致意思是启动系统在添加新网络设备时,mac地址符合上述地址,且设备名含有enp12s0 ,eth*;就将其重新命名为eth0 ,wlan0 。上述第一个网卡设备之所以用enp12s0而非eth*时因为系统已经默认将eth0改为enp12s0,这里再次将其修改回去。保存后,重启电脑再次ifconfig结果很nice 。由此来看其它设备的命名也是同理。
阅读(2803) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~