Device Initialization
In the section "When a Device Is Registered," we saw what needs to be initialized for the kernel to communicate to the NIC. In the rest of this chapter we will look at higher-level initialization tasks.
The net_device structure is pretty big. Its fields
are initialized in chunks by different routines, each one responsible for a different
subset of fields.[†] In particular:
- Device drivers
Parameters such as IRQ, I/O memory, and I/O port, whose values depend on the hardware configuration, are taken care of by the device driver. See Chapter 5.
- Device type
The initialization of fields common to all the devices of a device type family is taken care by the
xxx_setuproutines. For example, Ethernet devices useether_setup. See the section "Device Type Initialization: xxx_setup Functions."- Features
Mandatory and optional features also need to be initialized. For example, the queuing discipline (i.e., QoS) is initialized in
register_netdevice, as described in the section "register_netdevice Function." Other features can be initialized when the associated modules are notified about the registration of the new device (see the section "Device Registration Status Notification").
The device type initialization is done as part of the device driver initialization
(that is, xxx
_setup is called by xxx
_probe) so that the driver has a chance to overwrite
the default device type's initializations. See the section "Optional Initializations and Special
Cases" for an example.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access