慢慢欣赏linux 网络协议栈二 net_device以及初始化注册

Linux 操作系统原理 — 网卡驱动程序初始化流程 Init 系统的入口在 linux/init/main.c start_kernel(),是 Kernel 真正的初始化流程入口,start_kerenl() 将会调用一系列的初始化函数,包括:CPU 平台初始化,Memory 初始化,Interrupt 初始化,Process Scheduling 初始化,TCP/IP Stack 初始化等,目的是最终建立起基本完整的 Linux Kernel ENV。:在 /proc/net/ 目录下创建各类协议文件,注册相关的协议文件操作函数。 阅读详情

两个基本的数据结构之一:net_device

net_device注册

int register_netdev(struct net_device *dev)
	rtnl_lock();
	if (strchr(dev->name, '%'))
		dev_alloc_name(dev, dev->name);
	register_netdevice(dev);
	=>int register_netdevice(struct net_device *dev)
		//初始化结构体配置
		dev->iflink = -1;
		if (dev->netdev_ops->ndo_init)
			ret = dev->netdev_ops->ndo_init(dev);
		ret = dev_get_valid_name(net, dev->name, dev->name, 0);
		dev->ifindex = dev_new_index(net);
		if (dev->iflink == -1)
			dev->iflink = dev->ifindex;
		netdev_initialize_kobject(dev);
		ret = call_netdevice_notifiers(NETDEV_POST_INIT, dev);
		ret = netdev_register_kobject(dev);
		dev->reg_state = NETREG_REGISTERED;
		//设置初始化状态和队列
		set_bit(__LINK_STATE_PRESENT, &dev->state);
		dev_init_scheduler(dev);
		dev_hold(dev);
		list_netdevice(dev);//真正注册,加到3个表里面,一个链表,两个hash表
		ret = call_netdevice_notifiers(NETDEV_REGISTER, dev);
	rtnl_unlock();

参考文章
网络设备模块初始化(net/core/dev.c/net_dev_init)
https://blog.youkuaiyun.com/sun172270102/article/details/80643164

Linux eth0, eth1, ..., eth%d 的生成
https://blog.youkuaiyun.com/xiruanliuwei/article/details/78765255

linux 内核协议栈 网络设备抽象 net_device 目录 1 数据结构 net_device 1.1 设备属性 1.2结构管理 1.3接口及其上下文 2相关 API 说明 2.1 net_device 分配alloc_etherdev_mqs()->alloc_netdev_mqs 2.2 net_device 注册register_netdev() 2.3 端口状态管理api 2.3.1 设备状态变迁​ 1 数据结构 net_device 设备无关层一个重要的数据抽象是net_device{},net_devic... 阅读详情

相关推荐

Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family

注册协议族,提供套接字创建入口。proto_ops实现协议对套接字操作的支持,处理用户空间数据。管理物理/虚拟设备的数据收发。通过分层次实现并确保各层间的正确交互,可以构建高效可靠的自定义网络协议栈。在 Linux 内核网络协议栈中,数据发送是一个涉及多个层次的复杂过程。用户空间的send调用最终需要通过内核中的多个关键函数协作,才能将数据传递到物理网络设备。其中,sendmsg和是两个核心函数,分别负责套接字层和网络设备层的数据处理。本文将深入解析这两个函数的作用、协作流程以及它们在协议栈中的重要性。

数字人生 937

net_device的注册与注销

net_device对象只有通过register_netdev()注册到系统后才能被外部感知到。类似的,在释放之前需要通过unregister_netdev()将net_device对象先从系统中注销。这篇笔记分析了这两个过程的实现。

九天小哥的专栏 5378

rsyslog交叉编译(armv7、armv8、aarch64、arm32平台通用)

该文档描述了如何交叉编译rsyslog到arm64嵌入式平台。

sinat_33909696的博客 1560

深入理解Linux网络技术内幕-设备注册和初始化(四)

在内核中,网络设备通过函数register_netdev和unregister_netdev在内核中注册和注销,这两个函数对实际操作函数register_netdevice和unregister_netdevice进行封装,在调用这两个函数之前负责上锁。            在分析网络设备的注册状态改变时,注销时多了一个NETREG_UNREGISTERING状态,这个状态表示将设备从内核

风之伤 2286

【人工智能AI】是什么?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的一门新的技术科学。(百度百科)人工智能的基本原理:机器从「特定的」大量数据中总结规律,形成某些「特定的知识」,然后将这种「知识」应用到现实场景中去解决实际问题。在这个基本原理的基础上,有3个特征:1、人工智能本质上是一种工具2、人工智能技能只能解决特定的问题,而不是什么都能做3、人工智能属于归纳逻辑,可以告诉你是什么,但是不能告诉你为什么。

KJCZ.AK的博客 2万+

分布式存储系统关于GDPR条例中的数据清除原则

文章目录前言HDFS存储系统数据的完全删除基于加解密的输入输出流的数据保护方案 前言 关于GDPR是什么,可能许多同学之前并不太了解,至少笔者在之前也是不清楚的。GDPR全称为通用数据保护条例,General Data Protection Regulation。它是一项来自欧盟的关于计算机数据保护相关的条约,旨在规范系统如何收集,管控用户私人数据的种种行为。但是当前的一些存储系统并没有完全符合...

走在前往架构师的路上 3627

网络驱动- register_netdevice

2. 在 alloc_netdev_mqs 把init_net 赋值给 dev->nd_net->net。把net_device插入到全局变量init_net的dev_base_head 链表中。1. 定义init_net。

2401_83458819的博客 513

银河麒麟V10 SP3离线安装Nginx1.21.5全记录(附11个rpm包下载清单)

本文详细记录了在银河麒麟V10 SP3操作系统上离线安装Nginx 1.21.5的全过程,包括11个必备rpm包的下载清单。通过分步骤的实战指南,帮助用户在国产化环境中高效部署Nginx服务,涵盖安装、配置、调优及故障排查等关键环节,特别适合金融、政务等对安全性要求高的场景。

weixin_30872337的博客 606

Linux网络协议栈之网络设备管理

<br />成都的天气好像越来越好了,前几天还穿着穿着外套直打哆嗦,到今天已经“拨开阴云见太阳”,暖洋洋的,心情也暖洋洋的。暖和的正好想睡觉。打个呵欠,把网络设备管理这部份总结下吧。    <br />     Linux素以优秀的网络管理能力而著称,linux为何具有这么高的效率?我们从网络设备的管理说起。<br />     Linux为何要对网络设备单独管理呢?这是因为。协议栈很多地方都会涉及到网络设备。小至IP地址的设置。大至IP路由的更新。都离不开高效的网络设备管理。将网络设备单独管理可以提高效率

嵌入精灵 1167

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3843

【Halcon-2D测量】add_metrology_object_rectangle2_measure 函数功能(用于向2D计量模型中添加旋转矩形(rectangle2类型)计量对象)

HALCON算子add_metrology_object_rectangle2_measure解析摘要 该算子是HALCON 2D计量模块的核心算子,用于添加旋转矩形计量对象并配置测量参数。主要功能包括:定义旋转矩形几何轮廓(中心坐标、主轴角度、长短半长);生成垂直于矩形边界的测量区域;设置边缘提取预处理参数(高斯平滑、振幅阈值)。关键注意事项:MeasureLength1必须小于矩形长短半长;角度参数Phi需使用弧度单位;多线程需同步模型句柄。该算子适用于方形螺母、PCB板边框等矩形零件的精密测量,需与a

weixin_45590420的博客 1225

深入理解Linux网络技术内幕——设备的注册与初始化(二)

设备注册于设备除名 设备注册与设备除名一般有register_netdev和unregister_netdev完成。这两个是包裹函数,负责上锁,真正起作用的是其调用的register_netdevice和unregister_netdevice。参见:net/core/dev.c。 下图描述了设备注册过程中的一些状态变化 ...

aidixi4007的博客 729

【信息科学与工程学】【物理/化学科学和工程技术】第八篇 光学07

对于光源-探测器距离 ρ, 稳态漫反射率 R(ρ) ≈ (1/(4π)) [ z₀ (μ_eff + 1/r₁) exp(-μ_eff r₁)/r₁² + (z₀ + 2z_b) (μ_eff + 1/r₂) exp(-μ_eff r₂)/r₂² ], 其中 μ_eff = √(3μ_a(μ_a+μ_s’)), z₀=1/μ_s’, z_b 与边界条件有关。通过测量光纤各点的布里渊频移 ν_B(z) 来得到应变/温度分布:Δν_B(z) = C_ν,ε Δε(z) + C_ν,T ΔT(z)。

weixin_49199313的博客 330

慢慢欣赏linux 网络协议栈二 net_device以及初始化注册 (4.19版本)

XXX$ ls /proc/net/ anycast6 dev fib_trie icmp6 igmp6 ip6_mr_vif ip_tables_matches ipv6_route netfilter packet ptype route rt_cache sockstat stat udp udplite6 xfrm_stat arp dev_mcast fib_trie...

shipinsky的博客 2666

30、航空公司调度问题的数学模型解析

本文详细解析了航空公司调度问题中的核心数学模型,包括航班时刻表生成、机组人员排班和飞机调度的建模方法与求解技术。通过定义变量、约束条件及目标函数,结合线性规划、整数规划等方法,帮助航空公司实现高效调度。文章还探讨了模型的优化策略、简化方法以及实际应用案例,为提升航空运营效率提供了理论支持和实践指导。

beer8的博客 259

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

如何学习 Linux 内核网络协议栈

下面将介绍一些内核网络协议栈中常常涉及到的概念。内核显然需要一个数据结构来表示报文,这个结构就是 sk_buff ( socket buffer 的简称),它等同于在<TCP/IP详解 卷2>中描述的 BSD 内核中的 mbuf。sk_buff 结构自身并不存储报文内容,它通过多个指针指向真正的报文内存空间:sk_buff 是一个贯穿整个协议栈层次的结构,在各层间传递时,内核只需要调整 sk_buff 中的指针位置就行。内核使用 net_device 表示网卡。网卡可以分为物理网卡和虚拟网卡。

baimao__Ch的博客 597

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux内核网络协议栈笔记

Linux内核网络协议栈笔记0:序言(附参考书籍) 自己是研究网络的,但实际上对Linux中网络协议栈的实现知之甚少。最近看完《深入理解Linux内核》前几章之后(特别是与网络子系统密切相关的软中断),觉得可以而且应该看一下网络协议栈了。这部分网上的文章大部分都没有什么结构和思路,很少有能够条分缕析的把协议栈讲述明白的。当然,个人水平有限,还是希望朋友们能够批评指正。 参考书籍《Under

hushup的专栏 2536

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux网络协议栈之驱动框架

Linux网络协议栈之驱动框架 作者:bullbat         网卡驱动可以以模块的方式加载也可以内核初始化的时候加载,我们选定e100系列的网卡进行说明网卡驱动的一般框架。 网卡设备通用数据结构: struct net_device {          /*           * This is the first field of the "visible" par

bullbat的专栏 1万+

Linux 网络协议栈收包过程

title: Linux-net-stack date: 2020-10-03 categories: Linux tags: Linux-networking Linux-net-stack 重要的结构 net_device & sk_buff , 这两个结构分别抽象了网络设备 和 网络数据包。是两个特别大的数据结构,分别位于 include\linux\netdevice.h 和 include\linux\skbuff.h 中。 初始化过程 网卡初始化 从开机一直到初始化网络设备的过程.

Megahertz66的博客 998

Linux内核网络设备(net_device)篇

网络设备在Linux内核中定义为struct net_device类型对象,也就是我们常说的网络接口(即一个网卡),通俗来讲,我们在Linux系统中执行ifconfig -a 命令所列出来的每个网络接口对象在内核中都对应一个net_device类型对象。网络设备驱动一般会提供一个私有操作流程(不同的设备驱动可以自定义具体的操作),所以内核协议栈的ioctl定义一个命令字的边界值,即SIOCDEVPRIVATE值,小于它的命令字为内核保留的通用cmd值,大于等于它则由具体网络设备驱动自定义实现。

jungangli的专栏 275

Linux网卡注册流程深度解析: 从硬件探测到网络栈

表4: Linux网卡注册流程关键阶段阶段核心函数主要任务涉及子系统硬件探测发现PCI设备, 读取配置空间PCI子系统驱动匹配比较设备ID与驱动ID表设备模型设备初始化probe()分配资源, 映射寄存器, 获取IRQ总线驱动net_device创建分配网络设备结构体网络核心操作函数绑定netdev_ops设置初始化操作函数集设备驱动设备注册添加到全局列表, 创建sysfs网络栈协议栈连接dev_open()启动设备, 连接协议栈TCP/IP栈数据传输数据包发送/接收中断处理。

X 1678

网络设备结构体net_device介绍

Struct net_devie结构体 一、struct net_device结构体 (1)简述  Linux系统为了支持各种硬件设备,又要屏蔽网络硬件与驱动程序的实现细节,而把网络设备抽象为struct net_device数据结构。 不同的厂商的网络设备配置器在物理层和数据链路层肯能由差别,这就需要网路驱动程序,linux网路体系中可有多个协议栈,这需要网络设备和上层协议栈之间有

City_of_skey的博客 4249

linux内核网络协议栈学习笔记(2)

这篇主要介绍net_device设备的注册,初始化等流程 如今的网卡无论是千兆卡还是万兆卡,基本都是pci设备(万兆卡基本上都是pcie设备),我们首先来看下pci设备相关的操作 struct pci_device_id {       __u32 vendor, device;       /* Vendor and device ID or PCI_ANY_ID*/     __u

majieyue的专栏 4019

Linux内核网络协议栈笔记1:协议栈分层/层次结构

Linux内核网络协议栈笔记1:协议栈分层/层次结构 大家都知道TCP/IP协议栈现在是世界上最流行的网络协议栈,恐怕它的普及的最重要的原因就是其清晰的层次结构以及清晰定义的原语和接口。不仅使得上层应用开发者可以无需关心下层架构或者内部机制,从而相对透明的操作网络。这个明显的层次结构也可以在Linux内核的网络协议栈中观察到。 主要的参考文献是:Linux网络栈剖析(中文版)/Anatomy

rheostat的专栏 3822
上一篇: 慢慢欣赏linux 网络协议栈一 全景图
下一篇: 慢慢欣赏linux 网络协议栈三 监听链路状态
天麓
博客等级 码龄22年 323粉丝 437原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值