有没有办法记录/打印内核内的浮点值。它是否取决于运行内核的 FPU?
编译printk(KERN_DEBUG "error = %f " ,floatvalue)
时,出现错误:
对__aeabi_f2d的未定义引用
在 Linux 内核中使用任何类型的浮点算法都是一个错误。
如果您运行的处理器没有 FPU,则无需执行您尝试执行的计算(软件 FPU 是从内核驱动的,无法在其中工作)。
如果您运行的处理器确实具有 FPU,情况会更糟 - 因为内核在任务之间切换上下文,因此需要保存每个任务的上下文(寄存器集)。conetxt 切换所需的时间取决于需要保存多少上下文。作为优化,内核仅在调度进出使用 PFU 的任务时保存和恢复 FPU 的上下文,而不是在系统调用或中断触发到内核的上下文切换并且同一任务保持当前任务时保存和恢复 FPU 的上下文。
这意味着,如果您编写的代码在内核中使用 FPU,则可能会损坏当前正在运行的用户空间任务的 FPU 状态。
我曾经这么认为。但实际上,有时支持浮点。这取决于 CPU 体系结构和内核版本。例如,莱纳斯的答案。我不是说你应该使用FP,但这是可能的。它可能在 2.6.32 左右进入内核,参见 lxr.free-electrons。
Raulp,您的未定义引用错误看起来像是在尝试使用 lib 例程。这是行不通的,Linus指向gcc内联。我不太熟悉,但也许看到这个或这个。