如何将宏调用函数转换为内核函数?
How to convert a macro caller function into an in-kernel function?
我需要删除内核模块中使用的 CEIL 宏,并使用内核中的 ceil 函数来替换宏的调用者。
我尝试参考 Linux 手册页
替换 ceil 函数
http://man7.org/linux/man-pages/man3/ceil.3.html#DESCRIPTION。
我的问题是是否可以将此宏转换为内核函数,即 ceil?此外,这里的代码变量 'o' 和 'rsz' 被声明为 unsigned int,其中 ceil 函数的 return 类型是 double。如果可以,我该如何更改?
#define CEIL(a, b) (((a) + (b-1)) / (b))
o += (((CEIL(rsz, 1024)) << 1) << n);
将以上代码编辑为
o += ((ceil(rsz) << 1) << n)
此外,我尝试在 .c 文件中包含数学头文件,即
# include <math.h>
执行时出现编译错误
fatal error: math.h: No such file or directory
CEIL(a, b)
内核宏 与 ceil()
C 库函数 完全不同。它甚至不需要相同数量的参数!
此外,floating-point 函数(和一般的 floating-point 数学)在内核中不可用。 <math.h>
header 无法在此环境中使用。
不行,不能将上面的宏转换成ceil内核函数,因为内核中没有这样的函数。虽然如果仔细看上面的宏,它是
#define CEIL(a, b) (((a) + (b-1)) / (b))
以上函数是DIV_ROUND_UP内核函数的替代函数。因此,可以在内核中删除上面的宏,并在调用函数中使用 DIV_ROUND_UP。
如果 a 和 b 都是整数,则成立。
我需要删除内核模块中使用的 CEIL 宏,并使用内核中的 ceil 函数来替换宏的调用者。
我尝试参考 Linux 手册页
替换 ceil 函数http://man7.org/linux/man-pages/man3/ceil.3.html#DESCRIPTION。
我的问题是是否可以将此宏转换为内核函数,即 ceil?此外,这里的代码变量 'o' 和 'rsz' 被声明为 unsigned int,其中 ceil 函数的 return 类型是 double。如果可以,我该如何更改?
#define CEIL(a, b) (((a) + (b-1)) / (b))
o += (((CEIL(rsz, 1024)) << 1) << n);
将以上代码编辑为
o += ((ceil(rsz) << 1) << n)
此外,我尝试在 .c 文件中包含数学头文件,即
# include <math.h>
执行时出现编译错误
fatal error: math.h: No such file or directory
CEIL(a, b)
内核宏 与 ceil()
C 库函数 完全不同。它甚至不需要相同数量的参数!
此外,floating-point 函数(和一般的 floating-point 数学)在内核中不可用。 <math.h>
header 无法在此环境中使用。
不行,不能将上面的宏转换成ceil内核函数,因为内核中没有这样的函数。虽然如果仔细看上面的宏,它是
#define CEIL(a, b) (((a) + (b-1)) / (b))
以上函数是DIV_ROUND_UP内核函数的替代函数。因此,可以在内核中删除上面的宏,并在调用函数中使用 DIV_ROUND_UP。
如果 a 和 b 都是整数,则成立。