2013-10-29 100 views
0

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

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

未定义参考__aeabi_f2d

回答

2

使用任何种类的浮点运算的Linux内核中的一个bug。

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

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

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

1

我曾经这么认为。但实际上,浮点数有时支持。它取决于CPU架构和内核版本。例如,Linus's answer。我不是说你应该使用FP,但它是可能的。它可能会在2.6.32左右进入内核,请参阅lxr.free-electrons

Raulp,你的未定义的引用错误看起来像它试图使用lib例程。这是行不通的,Linus指出gcc在线。我不太熟悉,但可能会看到thisthis

+0

“我曾经认为这个”是指什么?如果它提到另一个答案,则应该知道答案是乱序显示的。 StackOverflow不是讨论网站,问题不是讨论主题。编写自包含的答案。如果您想对现有问题发表评论,请使用相应的功能(可能在达到允许使用它的信誉之后)。 –