网口驱动有感

本文详细解析了网口驱动架构,解释了为何在dev目录下找不到网口节点的原因,并介绍了dm9000驱动作为典型例子,展示了如何通过平台设备进行注册及驱动的工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网口驱动架构如上图,很清晰。一直怀疑为什么,在dev目录下找不到网口节点。现在明白了,设备节点一般是给用户层访问的。而根据上图,可得知,网口驱动主要是被网络协议栈调用,而用户层不会直接操作网口驱动,而是一层层的协议栈。

不同的网络控制器的驱动都是大致相同的,像dm9000的,

static struct platform_driver dm9000_driver = {
.driver = {
.name    = "dm9000",
.owner = THIS_MODULE,
.pm = &dm9000_drv_pm_ops,
},
.probe   = dm9000_probe,
.remove  = __devexit_p(dm9000_drv_remove),
};

static struct platform_device dm9000x_device = {
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(dm9000_resources),
.resource = dm9000_resources,
.dev = {
.platform_data = &dm9000_setup,
}
};

dm9000驱动比较标准,通过平台设备来注册。先register device和driver。然后匹配后调用driver里面的probe,platform_driver等等之类的总线driver都是类似的,里面的probe最重要,该函数注册真正的设备驱动。probe会生成一个net_device,然后各种初始化,最后register。

一个net_device就是代表网卡了,通过它可以控制网口。

有些网卡驱动写的不标准,没有什么平台设备,只是胡乱的在内核启动时,调用一个XX_init函数,注册net_device结构,当然效果都是一样的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值