Тестирование модуля ядра

меня интересуют насмешливые функции и глобальные переменные для модульного тестирования модуля ядра.

первоначально пробовал с https://github.com/ThrowTheSwitch/CMock но столкнулись с проблемами. Любые ссылки на статьи о том, как это сделать, также будут отличными. (для модулей ядра). Чтобы дать более подробную информацию здесь: компиляция в качестве модуля ядра будет ошибкой, потому что stdio не будет доступен, компиляция для пользовательского пространства будет ошибкой, потому что она не найдет такие вещи, как printk.

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

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

1 ответов


Я бы действовал следующим образом:

  • реализуйте свой модуль ядра
  • определите API, чтобы программа пользовательского уровня тестировала ваш модуль, который может быть основан на:
    • устройство символов в /dev/ (где вы можете определить правильный ioctls);
    • файл /proc/ (уныние);
    • специфические системные вызовы (не рекомендуется);
    • запись /sys/
  • реализовать на уровне пользователя программы (в случае использования правильной структуры, такой как Кунит или googletest), который взаимодействует с модулем ядра, тестируя различные функциональные возможности