2013-10-29 36 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不是討論網站,問題不是討論主題。編寫自包含的答案。如果您想對現有問題發表評論,請使用相應的功能(可能在達到允許使用它的信譽之後)。 –