1、ARRAY_SIZE 宏,是求设备结构体中设备的个数 定义在linux/kernel.h中 #define ARRAY_SIZE(arr)(sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr)) sizeof(arr)/sizeof((arr)[0])是求出设备的个数,__must_be_array(arr)是防止被吴用,比如用指针而不是数组上。
2、INT_WORK 以前内核里对这个函数是这样定义的 #define INIT_WORK(_work, _func, _data),可以理解为INIT_WORK会在你定义的_work工作队列里面增加一个工作任务,该任务就是_func。_func这个任务会需要一些数据作为参数,这个参数就是通过_data传递的。 do{ / (_work)->data = (atomic_long_t) WORK_DATA_INIT(); / INIT_LIST_HEAD(&(_work)->entry); / PREPARE_WORK((_work),(_func)); / } while (0) #define INIT_DELAYED_WORK(_work,_func) / do{ / INIT_WORK(&(_work)->work,(_func)); / init_timer(&(_work)->timer); / } while (0)
3、container_of() #define container_of(ptr, type, member)({ const typeof(((type *)0)->member ) *__mptr = (ptr); (type *)( (char*)__mptr - offsetof(type,member) );}) (char *)__mptr转换为字节型指针。(char *)__mptr -offsetof(type,member) )用来求出结构体起始地址(为char *型指针),然后(type*)( (char *)__mptr - offsetof(type,member) )在(type *)作用下进行将字节型的结构体起始指针转换为type *型的结构体起始指针。 它的作用显而易见,那就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。
时间: 2024-12-20 11:06:28