一般通过hotplug的设备会通过module.alias 中的信息来加载device对应的driver
linux-1wlr:/lib/modules/4.4.68-2-default # modinfo ipmi_ssif
filename: /lib/modules/4.4.68-2-default/kernel/drivers/char/ipmi/ipmi_ssif.ko
license: GPL
description: IPMI driver for management controllers on a SMBus
author: Todd C Davis <todd.c.davis@intel.com>, Corey Minyard <minyard@acm.org>
srcversion: A9EF83D2846A1E69D7C6090
alias: acpi*:IPI0001:*
alias: i2c:ipmi_ssif
depends: ipmi_msghandler
supported: yes
那这些信息是如何产生的呢?
static const struct acpi_device_id ssif_acpi_match[] = {
{ "IPI0001", 0 },
{ },
};
MODULE_DEVICE_TABLE(acpi, ssif_acpi_match);
static const struct i2c_device_id ssif_id[] = {
{ DEVICE_NAME, 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, ssif_id);
原来是通过MODULE_DEVICE_TABLE宏
如果是要手动insmod 这个ko的话,执行完成后通过depmod -a 命令也会更新module.alias
linux-1wlr:/lib/modules/4.4.68-2-default # modinfo ipmi_ssif
filename: /lib/modules/4.4.68-2-default/kernel/drivers/char/ipmi/ipmi_ssif.ko
license: GPL
description: IPMI driver for management controllers on a SMBus
author: Todd C Davis <todd.c.davis@intel.com>, Corey Minyard <minyard@acm.org>
srcversion: A9EF83D2846A1E69D7C6090
alias: acpi*:IPI0001:*
alias: i2c:ipmi_ssif
depends: ipmi_msghandler
supported: yes
那这些信息是如何产生的呢?
static const struct acpi_device_id ssif_acpi_match[] = {
{ "IPI0001", 0 },
{ },
};
MODULE_DEVICE_TABLE(acpi, ssif_acpi_match);
static const struct i2c_device_id ssif_id[] = {
{ DEVICE_NAME, 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, ssif_id);
原来是通过MODULE_DEVICE_TABLE宏
如果是要手动insmod 这个ko的话,执行完成后通过depmod -a 命令也会更新module.alias