Прошло много времени, но я обновлял ответ здесь для справки.
Вот что я в итоге и сделал:
Включены метки времени на моем клиенте последовательного терминалана ПК (TeraTerm).
Фактически активирована запись журнала в файл на диске и
выбранная опция для добавления метки времени к каждой строке.
Добавлено printk()
операторов в ядре.
- 1-й в начале блока, который я пытался профилировать.
- 2-й в конце блока, который я пытался профилировать.
Хотя существует небольшая задержка между тем, когда происходит событие на устройстве, и когдажурналы принимаются на главном ПК через последовательный порт, это довольно постоянное значение для данной аппаратной настройки.Следовательно, разница между двумя временными метками точно соответствует фактической разнице во времени между событиями на устройстве, которое сгенерировало эти журналы.Кроме того, накладные / побочные эффекты от 2 printk
операторов минимальны.
ОБНОВЛЕНИЕ: 2 года спустя, и сотни часов отладки ядра позже, я бырекомендуем использовать трассировщики функций .Это требует немного усилий, чтобы учиться, хотя.Как хорошо объяснено здесь , необходимо:
- Включить
CONFIG_FUNCTION_TRACER
в .config
- Использовать
trace_printk()
вместоиз printk()
- Проверьте выходные журналы по
cat /sys/kernel/debug/tracing/trace