VNC-сервер и замазка

Технически возможно вызвать ioctl внутри кода ядра. Он называется ksys _ioctl().[ *] Обратите внимание, что init/— это единственный другой код, который вызывает ksys _ioctl (). Это, мягко говоря, необычно. Вызов perf ioctl внутри ядра звучит еще более сомнительно.

Чтобы начать понимание того, почему это необычно, я хотел бы отметить, что ksys_ioctl()по-прежнему принимает fdаргумент. Это номер файлового дескриптора в контексте текущей задачи(процесса/потока ).

[edit] My goal is that, at every context switch get the count of an event and store it in the task structure. Hence eventually I want the counter to be called from the context_switch() function in the kernel.

АААААА.

Итак, вы не хотели вызывать ioctl ()из ядра. (У вас не будет файлового дескриптора для вызова ioctl (). И я не верю, что вы хотите начать открывать файловые дескрипторы в таблице файлов текущей задачи при каждом переключении контекста _(). Даже если вы их потом закроете ).

На данный момент вы спрашиваете о реализации (уменьшенной версии )системы Linux perfsub -. Подсистема perfвладеет счетчиками производительности. Если вы хотите использовать счетчики производительности без подсистемы perf, вы должны начать с отключения поддержки perfв ядре. На каком-то более позднем этапе процесса вам следует потратить время на просмотр соответствующих материалов в SDM(или соответствующих руководствах -, которые я не проверял ).


[ *] Примечание :существуют ограничения при передаче указателей в ksys_*()функции. В основном они ожидают __userпамяти, а не памяти ядра, если только вы не играете в игры с использованием set_fs()...


Работа над кодом perf— это другое дело. Вы можете легко найти код, чтобы начать смотреть там, например. нажав PERF _EVENT _IOC _RESET . А также конкретная строка, которая даст вам исходный файл (и каталог )для просмотра, и вы также можете продолжать щелкать по :-). Поэтому я предполагаю, что это не ваш вопрос.

0
14.06.2020, 08:04
0 ответов

Теги

Похожие вопросы