MODULE_DEVICE_TABLE
__attribute__((alias(__stringify(A)))) 设置函数、变量的别名
#include <stdio.h> #define __stringify_1(x...) #x #define __stringify(x...) __stringify_1(x) void a(int n) __attribute__((alias(__stringify(A)))); //void sys_socket(int n) __attribute__((alias("SyS_socket"))); void A(int num) { printf("%d\n", num); } int main(void) { a(1); }
驱动程序里经常看到MODULE_DEVICE_TABLE这个宏定义,一般用于动态加载驱动也就是热插拔的时候使用
#define MODULE_DEVICE_TABLE(type, name) \ extern typeof(name) __mod_##type##__##name##_device_table \ __attribute__ ((unused, alias(__stringify(name))))
在编译时,从所有驱动程序中提取此信息,并创建一个设备表。
插入设备时,内核会引用设备表,并且如果找到与添加设备的设备/供应商ID匹配的条目,则将加载驱动