Подтвердить что ты не робот

Как сделать функцию ядра linux доступной для ftrace function_graph tracer?

Я хочу отслеживать функцию во время загрузки ядра с ftrace function_graph, чтобы понять, что она делает, но она недоступна в available_filter_functions.

Я попытался экспортировать его с помощью EXPORT_SYMBOL(), предположив, что он сделает его доступным, но это не тот случай.

У вас есть решение?

Для информации, функции, которые я хочу отслеживать, persistent_ram_init_ringbuffer и persistent_ram_early_init в ядре Android 3.4.

Я прочитал документацию, но ничего не нашел об этом, и grep больше не помог...

Спасибо

4b9b3361

Ответ 1

Проблема состоит в том, что эти функции аннотируются с __init и __devinit, которые черными перечислены в функции трассировки функции ftrace.

Почему? Поскольку в качестве функций инициализации модуля (или функций инициализации ядра) они загружаются во время инициализации и удаляются при завершении инициализации. Каждая функция, которая отслеживает трассировку ftrace, хранится в специальной компактной таблице. В настоящее время нет способа сказать ftrace, что эти функции были удалены (освобождены) и что ftrace должен удалить их из своей таблицы. Если бы мы просто проигнорировали это, тогда, когда функция отслеживания включена, ftrace попытается изменить местоположения, которые больше не существуют и могут вызывать всевозможные проблемы (помните ошибку e1000e?).

Если вы действительно хотите их отследить, удалите эти аннотации. Затем они должны появиться в списке функций для отслеживания.