在linux内核中分区

是否有可能在linux内核中分割并使用double值? 当我尝试:

typedef struct{ ... long long int sbe; ... }connection; hook_func(){ connection* found ... uint32_t time_misec .. uint32_t bytes_diff .. ... double be = bytes_diff / time_misec; found->sbe = be / 2 + found->sbe / 2; ... } 

我有错误:

 WARNING: "__fixunsdfsi" [/home/kir/netfilter/hello.ko] undefined! WARNING: "__adddf3" [/home/kir/netfilter/hello.ko] undefined! WARNING: "__floatdidf" [/home/kir/netfilter/hello.ko] undefined! WARNING: "__muldf3" [/home/kir/netfilter/hello.ko] undefined! WARNING: "__floatunsidf" [/home/kir/netfilter/hello.ko] undefined! 

对于大多数CPU来说,Linux内核中没有浮点支持。 原因是为了避免保存FPU寄存器的高成本。

即使你的机器支持浮点,并且即使你懂得如何正确使用kernel_fpu_begin()...end() ,内核代码仍然不应该使用浮点代码,如果你这样做,你的代码可能会被拒绝。

看来你上面的代码只是测量一个简单的比例,就像字节随着时间的推移? 你当然不需要浮点的东西琐碎 – 只要选择一个合理的比例因子,并在固定点。

您只需要累积信息并使用整数除法在最后生成结果(测量)。

这样可以将错误降到最低。 您测量的时间越长,近似误差越小。