Профилирование Модулей Ядра Linux

меня интересует профилирование модуля для ядра Linux. Я попробовал так:

  1. построил ядро с CONFIG_PROFILING=y
  2. загрузил ядро с помощью profile=2
  3. сброс профилировщика на echo 123 > /proc/profile
  4. модуль был успешно загружен демон
  5. запустите приложение пользовательского пространства, которое использует модуль через определенный ioctl звонки. Тестовое приложение работало так, как ожидалось, поэтому модуль работал ЛАДНО.
  6. прочитайте данные профилирования с помощью readprofile -p /proc/profile -m System.map здесь .app был создан вместе с ядром.

пока все хорошо. Почти все работало, как и ожидалось. Что?!--21-->не работа, однако, заключается в том, что я не получил никакой информации о моем модуле, т. е. не было упоминания о какой-либо функции из модуля.

однако, подумав, я вспомнил, что забыл перекомпиляция модуль с помощью CONFIG_PROFILING=y.

Итак, мой вопрос: модуль не отображался в журнале профилирования, потому что он не был скомпилирован с помощью CONFIG_PROFILING=y или есть какая-то другая более очевидная причина, о которой я не знаю?

если кто-то задается вопросом, почему я спрашиваю, а не пробую сразу, это потому, что я не могу сделать это дома, и я бы хотел услышать, что посмотреть сказал бы, прежде чем я снова получу доступ к коду.

2 ответов


кажется невозможным профилировать модули таким образом, поскольку они загружаются динамически, что означает, что они являются отсутствует в системе.файл карты.

решением было бы встроить драйвер в ядро. К сожалению, это не всегда работает как система может быть предназначена для работы только с драйвером, встроенным в модуль.


Я предлагаю, используя oprofile должны работать.