Есть ли способ регистрировать / печатать плавающие значения внутри ядра. Зависит ли это от FPU, на котором работает ядро?
При компиляции printk(KERN_DEBUG "error = %f " ,floatvalue)
получаю ошибку:
неопределенная ссылка на __aeabi_f2d
Есть ли способ регистрировать / печатать плавающие значения внутри ядра. Зависит ли это от FPU, на котором работает ядро?
При компиляции printk(KERN_DEBUG "error = %f " ,floatvalue)
получаю ошибку:
неопределенная ссылка на __aeabi_f2d
Использование любой арифметики с плавающей запятой внутри ядра Linux является ошибкой.
Если процессор, на котором вы работаете, не имеет FPU, то нечего выполнять вычисления, которые вы пытаетесь сделать (программные FPU управляются из ядра и не работают внутри него).
Если процессор, на котором вы работаете, имеет FPU, ситуация еще хуже — поскольку ядро переключает контексты между задачами, ему необходимо сохранять контекст (набор регистров) каждой задачи. Время, необходимое для переключения контекста, зависит от того, сколько контекста необходимо сохранить. В качестве оптимизации ядро сохраняет и восстанавливает контекст FPU только тогда, когда оно планирует вход и выход задачи, которая использовала PFU, но не тогда, когда системный вызов или прерывание вызвали переключение контекста в ядро, и та же задача остается текущей. задача.
Это означает, что если вы пишете код, который использует FPU внутри ядра, вы потенциально испортили состояние FPU текущей задачи пользовательского пространства.
Раньше я так думал. Но на самом деле иногда поддерживается число с плавающей запятой . Это зависит от архитектуры процессора и версии ядра. Например, ответ Линуса. Я не говорю, что вы должны использовать FP, но это возможно. Возможно, он появился в ядре около 2.6.32, см. lxr.free-electrons а>.
Раульп, твоя ошибка с неопределенной ссылкой выглядит так, как будто она пытается использовать подпрограмму библиотеки. Это не сработает, Линус указывает на встроенный gcc. Я не слишком хорошо знаком, но, возможно, увижу это или это.