Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C linux内核中的分区_C_Linux_Kernel - Fatal编程技术网

C linux内核中的分区

C linux内核中的分区,c,linux,kernel,C,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->s

是否可以在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寄存器的高成本。

即使您的特定计算机支持浮点,即使您了解如何正确使用
内核\u FPU\u begin()…end()
,内核代码仍然不应该使用浮点代码,如果您这样做,您的代码可能会被拒绝


上面的代码似乎只是测量了一个简单的比率,比如字节随时间移动?对于这样琐碎的事情,您当然不需要浮点运算——只需选择一个合理的比例因子,并在定点中进行操作。

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

这样,您可以将错误最小化到可能的程度 最低限度测量的时间越长,测量的结果越小
近似错误。

即使我使用以下命令:kernel\u fpu\u begin(); ... kernel_fpu_end()?@caps_lock用于某些处理器是的,我不知道您的特定CPU。是的,您说得对,我只是测量了一些比率。但为此,我需要一个除法运算,即使是在固定点上。当我这样做时,我得到了一个错误:“警告:”[home/kir/netfilter/hello.ko]未定义!”这是一个没有分区的微型嵌入式处理器?或者你可能链接到了错误的库?我的Makefile:obj-m:=hello.o KDIR:=/lib/modules/$(shell uname-r)/build PWD:=$(shell PWD)默认值:$(MAKE)-C$(KDIR)SUBDIRS=$(PWD)modules clean:$(MAKE)-C$(KDIR)SUBDIRS=$(PWD)clean对64位值进行整数除法,
\include
,并使用该头文件定义的函数之一。不同的宽度除数有不同的函数,不同的宽度结果,有符号或无符号算术,以及是否需要余数。最后,我使用了
do\u div()
函数进行除法运算