Профилирование Модулей Ядра Linux
меня интересует профилирование модуля для ядра Linux. Я попробовал так:
- построил ядро с
CONFIG_PROFILING=y
- загрузил ядро с помощью
profile=2
- сброс профилировщика на
echo 123 > /proc/profile
- модуль был успешно загружен демон
- запустите приложение пользовательского пространства, которое использует модуль через определенный
ioctl
звонки. Тестовое приложение работало так, как ожидалось, поэтому модуль работал ЛАДНО. - прочитайте данные профилирования с помощью
readprofile -p /proc/profile -m System.map
здесь .app был создан вместе с ядром.
пока все хорошо. Почти все работало, как и ожидалось. Что?!--21-->не работа, однако, заключается в том, что я не получил никакой информации о моем модуле, т. е. не было упоминания о какой-либо функции из модуля.
однако, подумав, я вспомнил, что забыл перекомпиляция модуль с помощью CONFIG_PROFILING=y
.
Итак, мой вопрос: модуль не отображался в журнале профилирования, потому что он не был скомпилирован с помощью CONFIG_PROFILING=y
или есть какая-то другая более очевидная причина, о которой я не знаю?
если кто-то задается вопросом, почему я спрашиваю, а не пробую сразу, это потому, что я не могу сделать это дома, и я бы хотел услышать, что посмотреть сказал бы, прежде чем я снова получу доступ к коду.
2 ответов
кажется невозможным профилировать модули таким образом, поскольку они загружаются динамически, что означает, что они являются отсутствует в системе.файл карты.
решением было бы встроить драйвер в ядро. К сожалению, это не всегда работает как система может быть предназначена для работы только с драйвером, встроенным в модуль.