Linux 内核游记 (1)

本文从网络设备驱动入手,探讨Linux内核中的loopback设备。介绍了如何向网络命名空间注册,详细解析了设备初始化过程,包括结构体分配、设备注册以及关键的钩子函数如ndo_init()、ndo_start_xmit()和ndo_get_stats64()。文章以代码注释和实际操作为例,帮助读者理解设备驱动的工作原理。
摘要由CSDN通过智能技术生成

网络设备驱动

为什么从网络设备入手?

不为什么。

loopback 设备

我们要探访的第一个目的地位于源码目录的drivers/net/loopback.c。200行左右的代码量很适合作为第一个分析的目标。执行

ifconfig lo

你就可以看到这个设备的信息。没错,它就是将所有发出数据包再发给自己的"回环"接口,网络地址127.0.0.1。一起来看看这是怎么实现的吧。

向网络命名空间注册

从代码的最后一段可以看到,该设备通过pernet_operations结构进行注册,其初始化函数为loopback_net_init()函数。

/* Registered in net/core/dev.c */
struct pernet_operations __net_initdata loopback_net_ops = {
   
	.init = loopback_net_init,
};

从注释看到,该结构体是在net/core/dev.c进行注册的,过去看一下,果不其然

	if (register_pernet_device(&loopback_net_ops)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值