0

有没有办法记录/打印内核中的浮点值。它取决于内核运行的 FPU 吗?

编译printk(KERN_DEBUG "error = %f " ,floatvalue)时,我收到错误:

对 __aeabi_f2d 的未定义引用

4

2 回答 2

1

我以前是这么想的。但实际上,有时支持浮点。它取决于 CPU 架构和内核版本。例如,Linus 的答案。我并不是说你应该使用 FP,但这是可能的。它可能在 2.6.32 左右进入内核,请参阅lxr.free-electrons

Raulp,您的未定义引用错误看起来像是在尝试使用 lib 例程。那行不通,Linus 指向 gcc in-line。我不太熟悉,但也许看到这个这个

于 2013-10-29T12:58:31.617 回答
1

在 Linux 内核中使用任何类型的浮点运算都是一个错误。

如果您正在运行的处理器没有 FPU,那么您将无法执行您正在尝试执行的计算(软件 FPU 是从内核驱动的,并且在内核内部不起作用)。

如果您正在运行的处理器确实有 FPU,情况会更糟——因为内核在任务之间切换上下文,它需要保存每个任务的上下文(寄存器集)。conetxt 切换所需的时间取决于需要保存多少上下文。作为一种优化,内核仅在调度进出使用 PFU 的任务时才保存和恢复 FPU 的上下文,而不是在系统调用或中断触发上下文切换到内核并且同一任务保持当前状态时才保存和恢复 FPU 的上下文任务。

这意味着,如果您在内核中编写使用 FPU 的代码,您可能会破坏当前正在运行的用户空间任务的 FPU 状态。

于 2013-10-29T10:53:36.263 回答