Network programming 区别于;“初始化每个设备”;

Network programming 区别于;“初始化每个设备”;,network-programming,linux-device-driver,Network Programming,Linux Device Driver,各位。我正在学习LDD3。对下面的陈述有疑问 “请注意,struct net_设备始终在运行时放在一起;它不能在编译时以与文件_操作或块_设备_操作结构相同的方式进行设置” 那么,造成这种差异的根本原因是什么呢?btw网络驱动程序和字符驱动程序的不同行为??有人能解释一下吗?感谢差异的根本原因是存储在这些结构中的数据的性质 是特定设备的某种全局回调集,具有明确定义的用途(如.open、.mmap等),并且在编译时可用(已知)。 它不假设任何在模块使用过程中可能发生变化的易失性数据字段。因此,只有

各位。我正在学习LDD3。对下面的陈述有疑问

“请注意,struct net_设备始终在运行时放在一起;它不能在编译时以与文件_操作或块_设备_操作结构相同的方式进行设置”


那么,造成这种差异的根本原因是什么呢?btw网络驱动程序和字符驱动程序的不同行为??有人能解释一下吗?感谢

差异的根本原因是存储在这些结构中的数据的性质

是特定设备的某种全局回调集,具有明确定义的用途(如
.open
.mmap
等),并且在编译时可用(已知)。 它不假设任何在模块使用过程中可能发生变化的易失性数据字段。因此,只有一组在编译时已知的回调

反过来,是一种旨在使数据能够适应大量运行时更改的结构。只需说一句,诸如、和其他许多领域都是不言自明的。它们在编译时未知,需要在整个运行时进行初始化/更改。 换句话说,该结构遵循设备探测/配置/启动顺序的严格接口,相应的字段在相应的步骤上初始化。比如说,没有人知道编译时接收或发送队列的数量。驱动程序根据操作系统的一些限制和要求,在初始化时计算这些值。在示例中,同一网络适配器可能会发现在单核CPU系统上分配1个Rx队列和1个Tx队列是可行的,而它可能会决定在四核系统上设置4个队列。在编译时预测这一点并将结构初始化为一些无论如何都会更改的值是没有意义的

btw网络驱动程序和字符驱动程序的不同行为


所以,把它放在一起,就是这两种结构的目的不同。在一种情况下保留有关回调的静态信息,在另一种情况下维护易失性设备状态(名称、可调属性、计数器等)。我希望您能弄清楚。

差异的根本原因是存储在这些结构中的数据的性质

是特定设备的某种全局回调集,具有明确定义的用途(如
.open
.mmap
等),并且在编译时可用(已知)。 它不假设任何在模块使用过程中可能发生变化的易失性数据字段。因此,只有一组在编译时已知的回调

反过来,是一种旨在使数据能够适应大量运行时更改的结构。只需说一句,诸如、和其他许多领域都是不言自明的。它们在编译时未知,需要在整个运行时进行初始化/更改。 换句话说,该结构遵循设备探测/配置/启动顺序的严格接口,相应的字段在相应的步骤上初始化。比如说,没有人知道编译时接收或发送队列的数量。驱动程序根据操作系统的一些限制和要求,在初始化时计算这些值。在示例中,同一网络适配器可能会发现在单核CPU系统上分配1个Rx队列和1个Tx队列是可行的,而它可能会决定在四核系统上设置4个队列。在编译时预测这一点并将结构初始化为一些无论如何都会更改的值是没有意义的

btw网络驱动程序和字符驱动程序的不同行为

所以,把它放在一起,就是这两种结构的目的不同。在一种情况下保留有关回调的静态信息,在另一种情况下维护易失性设备状态(名称、可调属性、计数器等)。我希望你能明白