Linux启动网卡:linux如何用同一个驱动驱动很多网卡

关于Linux启动网卡的问题,在linux device on my network中经常遇到, 我最近在学习 linux 网络驱动程序,我想知道如果我的板上有很多相同类型的网卡,内核如何驱动它们?内核需要多次加载相同的驱动程序吗?我认为这是不可能的,insmod 不会这样做,所以我怎样才能使所有相同的卡同时工作?

我最近在学习 linux 网络驱动程序,我想知道如果我的板上有很多相同类型的网卡,内核如何驱动它们?内核需要多次加载相同的驱动程序吗?我认为这是不可能的,insmod 不会这样做,所以我怎样才能使所有相同的卡同时工作?

问候

11

每个卡的状态(I / O 地址,IRQs,...)存储在特定于驱动程序的结构中,该结构(直接或间接)传递到驱动程序的每个入口点,从而可以区分卡。这样,完全相同的代码可以控制不同的卡(这意味着是的,内核仅保留驱动程序模块的一个实例,而不管它控制的设备数量如何)。

例如,看看drivers/video/backlight/platform_lcd.c,它是一个非常简单的 LCD 电源驱动程序。它包含一个名为platform_lcd的结构,该结构对该文件是私有的,并存储 LCD 的状态(是否通电以及是否挂起)。该结构的一个实例通过kzalloc在驱动程序的probe函数中分配到每个 LCD 设备中-即一个

struct platform_lcd *plcd = to_our_lcd(lcd);

to_our_lcd扩展为lcd_get_data,如果您查看include/linux/lcd.h,它本身扩展为dev_get_drvdata(platform_set_drvdata 的对应项)。然后,该函数可以知道设备的状态已被调用。

这是一个非常简单的示例,platform_lcd驱动程序不直接控制任何设备(这被推迟到平台数据中的函数指针),而是添加特定于硬件的参数(IRQ,I / O base 等),您将获得 Linux 中 99 % 的驱动程序的工作方式。

4

PCI 支持代码为每个卡调用一次探测函数,并调用alloc_etherdev为网络接口分配空间,以满足所需的任何专用上下文。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(918)
Fate hollow a tara xia:Linux上的Docker安装Mint 19Tara
上一篇
Linux启动服务器命令:如何在Linux中启动tomcat服务器
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(32条)