MODULE_DEVICE_TABLE 详解

目录

实例简述:

 定义

实操

1.  修改配置,编译为模块

 2. 查看模块的别名


实例简述:

static const struct i2c_device_id pca953x_id[] = {
	{ "pca6416", 16 | PCA953X_TYPE | PCA_INT, },
	{ "pca9505", 40 | PCA953X_TYPE | PCA_INT, },
	{ "pca9534", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca9535", 16 | PCA953X_TYPE | PCA_INT, },
    ...
}
 MODULE_DEVICE_TABLE(i2c, pca953x_id);

     1. 声明一个外部变量,且该变量引用了pca953x_id

               变量名: extern typeof(pca953x_id)    __mod_i2c__pca953x_id_device_table 
               变量属性: __attribute__ ((unused, alias(__stringify(pca953x_id))))

     2. file2alias.c 用于解析由 MODULE_DEVICE_TABLE 宏定义的设备表,

           从而生成设备别名,这些别名随后被用于自动模块加载。

     3. 查看驱动支持的设备(驱动别名)

                方式1: 执行 命令 modinfo xxx.ko

                方式2: 查看文件: /lib/modules/$(uname -r)/modules.alias

 定义

//file:  include/linux/module.h
#ifdef MODULE
/* Creates an alias so file2alias.c can find device table. */
#define MODULE_DEVICE_TABLE(type, name)					\
extern typeof(name) __mod_##type##__##name##_device_table		\
  __attribute__ ((unused, alias(__stringify(name))))
#else  /* !MODULE */
#define MODULE_DEVICE_TABLE(type, name)
#endif

实操

1.  修改配置,编译为模块

ni@ni-P3571:~/xxx/seperate/linux$ diff  -u  config_init  .config
--- config_init	2024-04-03 14:11:43.855620237 +0800
+++ .config	2024-04-03 14:14:09.224088600 +0800
@@ -2100,7 +2100,7 @@
 # CONFIG_GPIO_GW_PLD is not set
 # CONFIG_GPIO_MAX7300 is not set
 # CONFIG_GPIO_MAX732X is not set
-CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X=m
 # CONFIG_GPIO_PCA953X_IRQ is not set
 # CONFIG_GPIO_PCA9570 is not set
 # CONFIG_GPIO_PCF857X is not set

 2. 查看模块的别名

ni@ni-P3571:~/xxx/linux$ modinfo drivers/gpio/gpio-pca953x.ko
filename:       /xxxx/linux/drivers/gpio/gpio-pca953x.ko
license:        GPL
description:    GPIO expander driver for PCA953x
author:         eric miao <eric.miao@marvell.com>
alias:          i2c:xra1202
alias:          i2c:tca9554
alias:          i2c:tca9539
alias:          i2c:tca6424
...
alias:          acpi*:INT3491:*

alias:          of:N*T*Cexar,xra1202C*
alias:          of:N*T*Cexar,xra1202
alias:          of:N*T*Connn,pca9655C*
alias:          of:N*T*Connn,pca9655
alias:          of:N*T*Connn,pca9654C*
....
depends:        
intree:         Y
name:           gpio_pca953x
vermagic:       5.10.109-rt65 SMP preempt mod_unload aarch64

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐分享-程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值