module_param_array
时间: 2023-05-01 11:04:03 浏览: 156
b'module_param_array'是一个Linux内核编程中的函数,它可以使开发者在编写模块时定义和使用一个传递数组类型的模块参数。这个函数的作用是将用户空间传入的参数转换为一个数组,并让开发者可以在内核模块中使用这个数组。
相关问题
module_param代码实现
module_param是一个宏,它定义了一个静态变量,并自动生成了相关的get/set函数和show函数。下面是module_param的代码实现:
```
#define module_param(name, type, perm) \
module_param_named(name, name, type, perm)
#define module_param_named(name, value, type, perm) \
static type __param_ ## name ## _val = value; \
module_param_call(name, ¶m_ops_##type, &__param_ ## name ## _val, perm)
#define module_param_call(name, ops, arg, perm) \
param_check_##ops(&(ops), &(arg)); \
__module_param_call(name, &(ops), (arg), sizeof(*(arg)), perm)
#define __module_param_call(name, ops, arg, size, perm) \
__setup_param_call(setup_param_##name, ops, arg); \
__param_check_##name##_##ops((arg)); \
static struct kernel_param __param_arr_##name \
__used \
__attribute__((section(".param"), aligned(sizeof(void *)))) \
= { \
.name = __stringify(name), \
.ops = ops, \
.arg = (void *)arg, \
.size = size, \
.perm = perm, \
}; \
__setup_param(setup_param_##name, __param_arr_##name.ops, __param_arr_##name.arg);
#define __setup_param_call(fn, ops, arg) \
static int __init fn(void) \
{ \
param_array_ops(ops, arg); \
return 0; \
}
#define __setup_param(fn, ops, arg) \
core_param(fn, ops, arg, sizeof(*(arg)))
#define __param_check(name, p) \
__param_check_##name(p)
#define __param_check_string(name, p) \
__param_check_string_##name(p)
#define __param_check_charp(name, p) \
__param_check_charp_##name(p)
#define __param_check_bool(name, p) \
__param_check_bool_##name(p)
#define __param_check_invbool(name, p) \
__param_check_invbool_##name(p)
#define __param_check_invbool_y(name, p) \
__param_check_invbool_y_##name(p)
#define __param_check_invbool_n(name, p) \
__param_check_invbool_n_##name(p)
#define __param_check_int(name, p) \
__param_check_int_##name(p)
#define __param_check_long(name, p) \
__param_check_long_##name(p)
#define __param_check_ulong(name, p) \
__param_check_ulong_##name(p)
#define __param_check_byte(name, p) \
__param_check_byte_##name(p)
#define __param_check_short(name, p) \
__param_check_short_##name(p)
#define __param_check_ushort(name, p) \
__param_check_ushort_##name(p)
#define __param_check_uint(name, p) \
__param_check_uint_##name(p)
#define __param_check_intvec(name, p) \
__param_check_intvec_##name(p)
#define __param_check_charpvec(name, p) \
__param_check_charpvec_##name(p)
#define __param_check_boolvec(name, p) \
__param_check_boolvec_##name(p)
...
```
module_param宏的实现是比较复杂的,其中包含了大量的宏定义和函数调用。在使用module_param宏时,实际上只需要了解其基本用法,而不需要了解其详细实现。
Traceback (most recent call last): File "C:\Users\86188\PycharmProjects\pythonProject8\src\svm1.py", line 86, in <module> svm_model = GridSearchCV(svm_model, params, cv=5) File "C:\Python37\lib\site-packages\sklearn\model_selection\_search.py", line 1388, in __init__ _check_param_grid(param_grid) File "C:\Python37\lib\site-packages\sklearn\model_selection\_search.py", line 338, in _check_param_grid " with one element.".format(name, type(v)) ValueError: Parameter grid for parameter (kernel) needs to be a list or numpy array, but got (<class 'str'>). Single values need to be wrapped in a list with one element. hello Best Parameter: {'kernel': 'rbf', 'C': 1, 'gamma': 'auto', 'decision_function_shape': 'ovo', 'random_state': [2017]} 进程已结束,退出代码1
这个错误是因为在参数搜索的过程中,有一个参数(kernel)的值不是列表或者numpy数组,而是一个字符串。这个参数应该是一个列表或者numpy数组,即使只有一个值,也需要被包裹在一个列表中。你可以尝试修改参数grid的值,将kernel参数改为一个列表,例如:{'kernel':['rbf'], 'C':[1], 'gamma':['auto'], 'decision_function_shape':['ovo'], 'random_state':[[2017]]}。注意,这里的kernel参数是一个包含一个字符串的列表。
阅读全文