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

Linux网络技术学习(六)—— 网络设备初始化(II)

文章目录

    • 初始化选项
    • 模块选项
    • 设备处理层初始化:net_dev_init
    • 用户空间辅助程序
    • kmod解析
    • 热插拔
    • 虚拟设备
    • 虚拟设备范例
    • 通过/proc文件系统调整


初始化选项

内核内建的组件以及模块加载的组件都能输入参数,使用户调整组件所实现的功能、重写默认值等

模块选项(module_param系列的宏)
使用module_param宏可以在文件系统中/sys文件夹下生成变量选项,通过这些文件在运行期间配置这些选项向内核提供这些配置选项。

引导期间内核选项(__setup系列的宏)
在引导加载程序引导期间可以提供这些定义选项。


模块选项

内核模块采用 宏的方式定义其参数。

// include/linux/moduleparam.h
#define module_param(name, type, perm)              \module_param_named(name, name, type, perm)module_param(rtw_tx_bw_mode, uint, 0644);

第一个输入参数是给用户使用的参数名称;第二参数类型(整形);第三个表示参数作为文件输出到/sys/时,分派给该文件的权限

root@linaro-alip:/sys/module/wlan/parameters# ls -l rtw_tx_bw_mode
-rw-r--r-- 1 root root 4096 Feb 14 18:58 rtw_tx_bw_mode

每个模块都在/sys/modules中分派一个目录。子目录/sys/module/对应模块/parameters中的每个文件就是该模块所输出的每个参数。组件程序员想让用户可以读取参数的值,至少必须给予读取权限。也可以提供写权限,允许用户可以修改参数的值。

/sys/中的文件和文件系统下的文件权限使用方法相同,使用拥有者权限对其修改也是可以的。


设备处理层初始化:net_dev_init

网络代码初始化的重要部分,包括流量控制和各个CPU入口队列,这个函数定义在<net/core/dev.c>

static int __init net_dev_init(void)
{
}subsys_initcall(net_dev_init);

subsys_initcall宏确保任何NIC设备驱动程序自行注册前net_dev_init会先执行

net_dev_init的主要部分:
1、由两个网络软件中断(softirq)所使用的对应各个CPU的数据结构被初始化。

    open_softirq(NET_TX_SOFTIRQ, net_tx_action);open_softirq(NET_RX_SOFTIRQ, net_rx_action);

2、当内核被编译为支持/proc文件系统时,文件会通过dev_proc_init添加到/proc

    if (dev_proc_init())goto out;

3、协议处理例程向量ptype_base初始化,用于分离入口流量的多路合并传输。


用户空间辅助程序

有些情况下,内核调用用户空间应用程序以处理事件也是可以的。这又两个重要的辅助程序:
/sbin/modprobe
  当内核需要加载模块时就会被调用
/sbin/hotplug
  当内核侦测到一个新设备已经插入或拔出系统时会被调用。主要工作是根据设备标识符加载正确的设备驱动程序。

内核提供一个名为call_usrmodehelper的函数,以执行这类用户空间辅助程序。
此函数允许调用者通过arg[ ] 传递给一些自变量,并通过env[ ] 传递一些环境变量给应用程序。
第一个自变量arg[0]通知call_usrmodehelper要启用哪个用户空间辅助程序,而arg[1]可以用于通知辅助程序该使用什么配置脚本。

两个内核函数request_moudle和kobject_hotplug如何调用call_usrmodehelper?以调用/sbin/modprobe和/sbin/hotplug。


kmod解析

kmod是内核模块加载程序,允许内核组件请求加载一个模块。内核提供的请求加载模块的函数不止一个,这里介绍request_moudle。
此函数用要加载的模块名字初始化arg[1]。/sbin/modprobe使用配置文件/etc/modprobe.conf去做各式各样的事情,其中之一就是去了解从内核所接收的模块名字实际上是否为其他模块的别名。
在这里插入图片描述
当管理员使用ifconfig配置一张设备驱动程序尚未加载的网卡
如:设备eth0,内核向/sbin/modprobe送出一个请求,以加载名称为字符串“eth0”的模块。如果/eth0/prorobe.conf(没有这个文件就是在/etc/modprobe.d文件夹下面)包含“alias eth0 3c59x”字符,则/sbin/modprobe会尝试加载模块3c59x.ko

当管理员以IPROUTE2包的tc命令配置一个设备的流量控制时,可能会涉及不在内核内的队列规则或分类器。在这种情况下,内核将回向/sbin/modprobe发送一个请求,以加载相关模块。


热插拔

Linux内核引入热插拔是为了实现消费者即插即用功能。这个功能让内核去检测可热插拔设备的插入或删除,然后通知应用层程序,给足够细节,使其在必要时加载相关联的驱动程序,或者当驱动存在时应用相关联的配置。

热插拔实际上也可在引导期间用于非可热插拔设备。无论一个设备是热插在运行中的系统上,或者在引导期间已插在系统上,用户空间辅助程序都会收到这两种情况的通知信息。用户空间应用程序再决定需要执行什么动作。

Linux系统在引导期间执行一组脚本对接口设备做初始化,包括网口设备在内。这些设备的配置会在/etc/rc.d/下的每个执行等级下都有一个目录。

当你编译内核模块时,目标文件默认放在/lib/modules/kernel_version/目录下,而kernel_version为内核版本号(如:2.6.12)。在同一目录下,有两个文件:
modules.pcimap和modules.usbmap : 内核所支持设备的PCI ID和USB ID。还包含了相关联的内核模块引用(每个设备ID都有)

当用户空间辅助程序接收到一个可热插拔设备正在插入的通知信息时,就会使用这些文件找出正确的设备驱动程序。

module.xxxmap文件的填写数据来自设备驱动程序所提供的ID向量,Vortex驱动程序会对其pci_device_id实例做初始化。因为驱动程序是针对PCI设备编写的,所以该表的内容会加入到modules.pcimap

/sbin/hotplug
Hotplug默认的用户空间辅助程序/sbin/hotplug,该脚本是Hotplug套件的一部分。
套件可以通过默认目录/etc/hotplug/和/etc/hotplug.d/中的文件进行配置。

内核会调用kobject_hotplug会把arg[0]的初值设为/sbin/hotplug,把arg[1]设为要使用的代理程序:/sbin/hotplug是一个简单的脚本,把事件的处理委托给arg[1]指定的另一个脚本。

当一块NIC添加到系统或从系统删除时,kobject_hotplug会把arg[1]的初值设为net,使得/sbin/hotplug去执行net.agent代理程序。(net.agent并不代表一种媒体或总线类型)虽然net代理程序可用于配置设备,但其他代理程序可根据设备标识符而加载正确的模块。设备标识符是由内核通过INTERFACE环境变量传入的。


虚拟设备

虚拟设备是建立在一个或多个真是设备之上的抽象。虚拟设备和真实设备之间的关联可以是多对多。
在这里插入图片描述


虚拟设备范例

Linux允许你定义多种不同的虚拟设备
绑定(bonding)

  利用这个功能,虚拟设备可以绑定一组物理设备
802.1Q
  这是一种IEEE标准,VLAN的报头扩充802.3/Ethernet帧头。
桥接
  桥接接口就是网桥的虚拟代表
别名接口
  原本这项功能的主要目的是允许单一真实的Ethernet接口横跨几个虚拟接口(eth0:0,eth0:1等等),每个接口都有自己的IP配置。
现在,由于网络代码的改进,在同一个NIC上配置多个IP地址已经不需要定义一个新的虚拟接口。然而有些情况下(特别是路由),让同一个NIC具有不同的虚拟NIC会轻松点。
普通均衡器
  这是队列规则,用于流量控制。、
接收
  因为虚拟设备都是软件对象,不需要与系统上真实资源的交互,如注册IRQ处理例程或者分配I/O端口以及I/O内存。其流量是间接获取的,来自执行这些任务的物理设备。不同类型的虚拟设备在封包接收时各有不同的行为。
外部通知信息
  内核中发生其他内核组件 对特定事件发出通知信息,对虚拟设备而言,就如同真实设备一样,有其利益所在。因为虚拟设备的逻辑是实现在真实设备之上的。真实设备对此逻辑毫无所知,因此无法把这些通知信息传出去。


通过/proc文件系统调整

/proc中的一些文件会输出内部数据结构和配置参数的值,有助于记录设备驱动程序分配了哪些资源。
在/proc/net中,可以找到由net_dev_init通过dev_proc_init和dev_mcast_init所创建的文件。
在这里插入图片描述
dev
  对每个已注册至内核的网络设备而言,会显示一些有关接收和传输的统计数据。(已接收或已传输的字节数、封包数目等)
dev_mcast
  对每个已注册至内核的网络设备而言,会显示一些由IP多播所使用的参数值。
wireless
  对每个无线设备而言,会打印出来自dev->get_wireless_stats虚拟函数所返回的无线区块中的一些参数值。(只包含无线设备)
softnet_stat
  输出有关由网络代码所用的软件中断的统计数据。

相关文章:

Linux网络技术学习(六)—— 网络设备初始化(II)

文章目录初始化选项模块选项设备处理层初始化&#xff1a;net_dev_init用户空间辅助程序kmod解析热插拔虚拟设备虚拟设备范例通过/proc文件系统调整初始化选项 内核内建的组件以及模块加载的组件都能输入参数&#xff0c;使用户调整组件所实现的功能、重写默认值等 模块选项&…...

一手教你如何搭建Hadoop基于Zookeeper的集群(5台主机)

文章目录一、设计集群图二、准备五台虚拟机2.1、下载安装文件2.2、创建虚拟机2.3、配置网络2.4、修改主机名称2.5、关闭防火墙2.6、同步时间2.7、设置/etc/hosts文件2.8、设置免密登录2.9、为后面可以主备替换安装psmisc三、安装JDK3.1、安装jdk3.2、测试jdk是否安装成功3.3、将…...

Spring Cloud是什么?怎么理解Spring Cloud?

简介Spring Cloud项目的官方网址&#xff1a;https://projects.spring.io/spring-cloud/ Spring Cloud 并不是一个项目&#xff0c;而是一组项目的集合。在 Spring Cloud中包含了很多的子项目&#xff0c;每一个子项目都是一种微服务开发过程中遇到的问题的一种解决方案。它利…...

robotframework + selenium自动化测试常见的问题

1、 插入中文数据提示 FAIL UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 92-107: ordinal not in range(25 DataBaseLibrary插入中文乱码的解决&#xff1a;修改D:\Python27\Lib\site-packages\DatabaseLibrary\connection_manager.py里的co…...

2023春招java面试题及答案

2023春招java面试题及答案总结1.以下Dubbo服务负载均衡策略中&#xff0c;哪一个策略的功能是相同参数的请求总是发到同一个提供者&#xff08;&#xff09;2.如下代码&#xff1a;请问编译运行的结果是什么&#xff1f;3.给出如下代码&#xff1a;请问编译运行的结果是什么&am…...

QT+OpenGL光照

QTOpenGL光照 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 颜色 现实生活中看到的物体的颜色并不是这个物体真正拥有的颜色&#xff0c;而是它所反射的颜色 太阳光能被看见的白光是多找演的的组合…...

OpenCV-PyQT项目实战(7)项目案例03:鼠标框选

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …...

vue2版本《后台管理模式》(上)

后台管理模式项目开发经验总结如下&#xff0c;希望对你们有些帮助&#xff1a; 文章目录一、app 出口位置二 、 index.js 路由配置三、package.json 文件四、 main.js 既然安装插件那就需要引入五、 跨域问题总结首先需要一个完整的v2版本的项目 vue2版本思路&#xff1a;首先…...

C++与C基础重叠部分

Cmake CPP程序开发过程 计算机硬件—>机器语言—>汇编—>cppcpp—>机器(gcc)Make(makefile)—>本地智能批处理翻译机制Cmake—>跨平台生成不同设备上的makefile进行执行 Cpp基础学习 基本知识 基本格式 #include<iostream> using namespace std;…...

神经网络基础部件-卷积层详解

前言 在全连接层构成的多层感知机网络中&#xff0c;我们要通过将图像数据展平成一维向量来送入模型&#xff0c;但这会忽略了每个图像的空间结构信息。理想的策略应该是要利用相近像素之间的相互关联性&#xff0c;将图像数据二维矩阵送给模型中学习。 卷积神经网络(convolu…...

【计算机网络】HTTPS协议原理

文章目录一、认识HTTPS协议二、为什么要发明HTTPS三、HTTP与HTTPS的区别四、常见的加密方式1. 对称加密2. 非对称加密3. 数据摘要4. 数字签名五、HTTPS的原理探究方案1&#xff1a;只使用对称加密方案2&#xff1a;只使用非对称加密方案3&#xff1a;双方都使用非对称加密方案4…...

21岁,华科博士在读,我的赛事Top经验

Datawhale干货 作者&#xff1a;vaew&#xff0c;华中科技大学&#xff0c;博士二年级在读简介笔者vaew&#xff0c;21岁&#xff0c;现为华中科技大学机械科学与工程学院陶波教授课题组博士二年级学生。主要研究方向是基于视触融合的机器人灵巧操作。学业之余的研究兴趣包括图…...

基于ThinkPHP6.0+Vue+uni-app的多商户商城系统好用吗?

likeshop多商户商城系统适用于B2B2C、多商户、商家入驻、平台商城场景。完美契合平台自营联营加盟等多种经营方式使用&#xff0c;系统拥有丰富的营销玩法&#xff0c;强大的分销能力&#xff0c;支持官方旗舰店&#xff0c;商家入驻&#xff0c;平台抽佣商家独立结算&#xff…...

Linux中断

文章目录 前言一、Linux 中断介绍二、中断上文和中断下文三、中断相关函数1 获取中断号相关函数2.申请中断3.释放中断4.中断处理函数四.中断下文之 tasklet1.概念2.Linux 内核中的 tasklet 结构体:3.使用步骤4.相关函数a.初始化 tasklet结构体b.调度 taskletc.杀死 tasklet总结…...

Excel+SQL实战项目 - 餐饮业日销售情况分析仪

目录1、要完成的任务2、认识数据3、SQL数据加工4、excel形成分析仪1、要完成的任务 目标&#xff1a;结合SQL和excel实现餐饮业日销售情况分析仪&#xff0c;如下表&#xff1a; 认识分析仪&#xff1a; 切片器&#xff1a;店面 分为四部分&#xff1a;KPI 、组合图、饼图、数…...

电商导购CPS,京东联盟如何跟单实现用户和订单绑定

前言 大家好&#xff0c;我是小悟 做过自媒体的小伙伴都知道&#xff0c;不管是发图文还是发短视频&#xff0c;直播也好&#xff0c;可以带货。在你的内容里面挂上商品&#xff0c;你自己都不需要囤货&#xff0c;如果用户通过这个商品下单成交了&#xff0c;自媒体平台就会…...

Redis学习【6】之BitMap、HyperLogLog、Geospatial操作命令 (1)

文章目录前言BitMap 操作命令1.1 BitMap 简介1.2 setbit1.3 getbit1.4 bitcount1.5 bitpos[pos:position]1.6 bitop1.7 应用场景二 HyperLogLog 操作命令2.1 HyperLogLog 简介2.2 pfadd2.3 pfcount2.4 pfmerge2.5 应用场景三 Geospatial【地理空间】操作命令3. 1 Geospatial 简…...

JAVA实现心跳检测【长连接】

文章目录1、心跳机制简介2、心跳机制实现方式3、客户端4 、服务端5、代码实现5.1 KeepAlive.java5.2 MyClient.java5.3 MyServer5.4 测试结果1、心跳机制简介 在分布式系统中&#xff0c;分布在不同主机上的节点需要检测其他节点的状态&#xff0c;如服务器节点需要检测从节点…...

python3.9安装和pandas安装踩坑处理

0、先决条件&#xff1a;系统内最好先安装有gcc、libffi-devel等 1、安装包下载 https://www.python.org/downloads/source/ 2、解压安装包并上传到/usr/local/python3.9 3、打开shell cd /usr/local/python3.9要先把python3.9的所有文件复制到/usr/local/python3.9才会成功…...

2023.2.15每日一题——867. 转置矩阵

每日一题题目描述解题核心解法一&#xff1a;二维表示 模拟解法二&#xff1a;一维表示 模拟题目描述 题目链接&#xff1a;867. 转置矩阵 给你一个二维整数数组 matrix&#xff0c; 返回 matrix 的 转置矩阵 。 矩阵的 转置 是指将矩阵的主对角线翻转&#xff0c;交换矩阵…...

【人脸识别】Partial-FC:让你在一台机器上训练1000万个id人脸数据集成为可能!

论文题目&#xff1a;”Killing Two Birds with One Stone: Efficient and Robust Training of Face Recognition CNNs by Partial FC“ -CVPR 2022 代码地址&#xff1a;https://arxiv.org/pdf/2203.15565.pdf 代码地址&#xff1a;https://github.com/deepinsight/insightfac…...

递归方法读取任意深度的 JSON 对象的键值

有以下json字符串 {"name":"John","age":30,"address":{"city":"New York","state":"NY","zip":"10001","coordinates":{"latitude":40.712776,&q…...

黑马redis学习记录:分布式锁

一、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xff0c;让程序串行…...

对React-Fiber的理解,它解决了什么问题?

对React-Fiber的理解&#xff0c;它解决了什么问题&#xff1f;Fiber用来解决什么问题&#xff1f;Fiber是什么&#xff1f;Fiber是如何解决问题的&#xff1f;Fiber用来解决什么问题&#xff1f; JavaScript引擎和页面渲染引擎两个线程是互斥的&#xff0c;当其中一个线程执行…...

【Linux】初学Linux你需要掌握这些基本指令(二)

目录 1.man指令 2.cp指令 3.mv指令 4.tree指令 5.echo指令 6.more指令 7.less指令&#xff08;重要&#xff09; 8.head与tail指令 9.date指令 显示时间常用参数&#xff1a; 设置时间常用参数&#xff1a; 10.cal指令 11.find & whereis & which指令 …...

Linux中VI/VIM 编辑器

1、概述所有Linux系统都会内置vi文本编辑器vim是vi的升级版&#xff0c;可以主动以字体颜色分辨语法的正确性&#xff0c;代码补完和编译&#xff0c;错误跳转等功能。2、vi和vim的三种模式基本上 vi/vim 共分为三种模式&#xff0c;分别是一般模式、编辑模式、命令模式2.1、一…...

PDF怎么转换成Word?两种PDF免费转Word方法推荐

不知道你们有没有发现&#xff0c;我们在网上下载的很多资料都是PDF格式的&#xff0c;尽管PDF文件也可以通过专门的PDF编辑器来编辑&#xff0c;但是PDF文档作为版式文档&#xff0c;编辑起来还是存在很多局限性&#xff0c;所有当我们需要大量编辑修改文档的时候&#xff0c;…...

极兔一面:Dockerfile如何优化?注意:千万不要只说减少层数

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;面试题是一个非常、非常高频的交流话题。 最近&#xff0c;有小伙伴面试极兔时&#xff0c;遇到一个面试题&#xff1a; 如果优化 Dockerfile&#xff1f; 小伙伴没有回答好&#xff0c;只是提到了减少镜像层数。…...

SpringBoot+Vue实现酒店客房管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…...

自适应多因素认证:构建不可破解的企业安全防线|身份云研究院

打开本文意味着你理解信息安全的重要性&#xff0c;并且希望获取行业最佳实践来保护你所在组织的信息安全。本文将带你了解多因素认证&#xff08;MFA&#xff1a;Multi-Factor-Authentication&#xff09;对于企业信息安全的重要性以及实施方法。 多因素认证&#xff08;MFA&…...

网站换域名后需要多长时间才能收录恢复正常/今日新闻头条大事

微信小程序常用的功能之一就是&#xff1a;使用微信登录微信小程序&#xff0c;但是登录之后拿到用户信息之后&#xff0c;缺少用户的唯一标识。 通常使用openid作为微信用户的唯一主键。受限于微信小程序的限制&#xff0c;不能直接通过小程序前端拿到openid&#xff0c;具体…...

wordpress 缩略图地址/seo排名点击器原理

作者&#xff1a; 中国科学院大气物理研究所  律成林 ————————————————2023年1月26日追加内容———————————————— 使用m_vec时的注意事项&#xff1a; 在使用m_vec函数时&#xff0c;输入数据要用双精度数组(double)。如果是单精度数组(sing…...

开展农业信息网站建设工作总结/营销策略分析

if (process.env.NODE_ENV "development"){// 开发环境 } if(process.env.NODE_ENV "production"){// 线上环境 }...

招聘网站企业招聘怎么做/竞价推广返点开户

安装Skywalking可以采用H2存储数据或者ElasticSearch存储&#xff0c;我们这里采用ElasticSearch存储&#xff0c;采用OAP处理数据&#xff0c;并基于Skywalking UI展示数据&#xff0c;所以安装的服务有多个&#xff1a; 安装ElasticSearch7安装Skywalking-OAP安装Skywalking…...

可以做动画的网站都有哪些/百度账号管理

精彩网址大全——生活资讯&文体娱乐卷 中国铁道出版社 随着网络的普及&#xff0c;网络上的信息以空前的速度膨胀&#xff0c;网络也从信息集散地变成的信息垃圾场。从前在网络上寻找信息时&#xff0c;可能找不到所需要的信息&#xff0c;要想找到所需要的有用信息就变得…...

上网行为管理系统/淘宝关键词优化推广排名

解决方法&#xff1a; 1。 改表法。 可能是你的帐号不允许从远程登陆&#xff0c;只能在localhost。这个时候只要在localhost的那台电脑&#xff0c;登入mysql后&#xff0c;更改 "mysql" 数据库里的 "user" 表里的 "host" 项&#xff0c;从&quo…...