如何将宏调用程序函数转换为内核函数?

时间:2019-03-30 23:35:12

标签: c kernel

我需要删除内核模块中使用的CEIL宏,并在内核中使用ceil函数来替换宏的调用方。

我尝试参考Linux手册页替换ceil函数

http://man7.org/linux/man-pages/man3/ceil.3.html#DESCRIPTION

我的问题是是否可以将此宏转换为内核函数(即ceil)?同样,在这里,代码变量'o'和'rsz'被声明为unsigned int,其中ceil函数的返回类型为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

2 个答案:

答案 0 :(得分:0)

CEIL(a, b)内核宏与ceil() C库函数完全不同。甚至不需要相同数量的参数!

此外,内核中不提供浮点函数(通常是浮点数学运算)。 <math.h>标头不能在此环境中使用。

答案 1 :(得分:0)

不,不能将上述宏转换为ceil内核功能,因为内核中没有此类功能。尽管如果仔细看一下上面的宏,它就是

#define CEIL(a, b)     (((a) + (b-1)) / (b))

以上功能是DIV_ROUND_UP内核功能的替代方法。因此,可以将其置于内核的宏之上,并在调用程序函数中使用DIV_ROUND_UP。

如果a和b均为整数,则为true。