2013-10-29 3 views
0

커널 안에 부동 값을 기록/인쇄하는 방법이 있습니까? 커널이 실행중인 FPU에 따라 다릅니 까? printk(KERN_DEBUG "error = %f " ,floatvalue)를 컴파일하는 동안Printk for 커널 내부의 값

, 나는 오류가 점점 오전 :

정의되지 않은 참조

답변

2

을 __aeabi_f2d하는 리눅스 커널 내부에 소수점 연산 부동의 어떤 종류를 사용하는 것은 버그입니다.

실행중인 프로세서에 FPU가없는 경우 수행하려는 계산을 수행 할 항목이 없습니다 (소프트웨어 FPU는 커널에서 구동되며 그 내부에서 작동하지 않습니다).

실행중인 프로세서에 FPU가있는 경우 상황에 따라 커널이 각 태스크의 컨텍스트 (레지스터 세트)를 저장하는 데 필요한 작업 사이에서 컨텍스트를 전환하므로 상황이 더욱 악화됩니다. conetxt 전환에 걸리는 시간은 컨텍스트가 얼마나 저장되어야하는지에 달려 있습니다. 최적화로서, 커널은 PFU를 사용하는 태스크를 안팎으로 스케줄링 할 때 FPU의 컨텍스트를 저장하고 복원 만하지만 시스템 호출이나 인터럽트가 커널로의 컨텍스트 전환을 트리거 할 때가 아니라 동일한 태스크가 현재의 상태를 유지합니다 태스크.

즉, 커널 내부에서 FPU를 사용하는 코드를 작성하면 현재 실행중인 사용자 공간 태스크의 FPU 상태가 손상되었을 수 있습니다.

1

나는 그것을 생각했다. 하지만 사실 부동 소수점 은 가끔입니다. 그것은 CPU 아키텍처와 커널 버전에 달려 있습니다. 예 : Linus's answer. 나는 당신에게 을 말하지 않고 FP를 사용해야하지만 가능합니다. 커널 2.6.32에 들어갔을 수도 있습니다 (lxr.free-electrons 참조).

Raulp, 정의되지 않은 참조 오류가 lib 루틴을 사용하는 것처럼 보입니다. Linus는 gcc를 인라인으로 처리합니다. 나는 너무 익숙하지 않지만 this 또는 this을 볼 수 있습니다.

+0

"내가 생각하기에"사용했던 것은 무엇입니까? 다른 대답을 참조하는 경우 응답이 순서대로 표시되는지 확인해야합니다. StackOverflow는 토론 사이트가 아니며 질문은 토론 스레드가 아닙니다. 자급 자족 답변을 작성하십시오. 기존 질문에 댓글을 달려면 해당 기능을 사용하십시오 (아마도 해당 기능을 사용할 수있는 평판에 도달 한 후). –