繁体   English   中英

在linux内核中划分

[英]Division in linux kernel

是否有可能在Linux内核中划分并使用双值? 当我尝试:

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() ,内核代码仍然不应使用浮点代码,如果您这样做,您的代码可能会被拒绝。

上面的代码似乎只是测量一个简单的比例,比如字节随时间变化? 对于那些微不足道的东西,你当然不需要浮点数 - 只需选择合理的比例因子并在固定点上进行。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM