#c #linux-kernel #x86 #kernel-module #device-driver
#c #linux-ядро #x86 #kernel-module #драйвер устройства
Вопрос:
Я хочу написать функцию в моем пользовательском модуле ядра, которая может выполнять «обход всех устройств, подключенных к системе, и получать их struct device*
«, чтобы отменить регистрацию всех драйверов устройств, используя driver_unregister(struct device_driver *drv)
device_driver*
поле with struct device
в качестве аргумента.
Ожидая найти list_head head_of_all_devices
что-то вроде глобальной переменной (чтобы я мог использовать такие вещи, как list_for_each_entry
доступ к каждому устройству), я заглянул struct device_node *of_node
внутрь struct device
, что, к сожалению, закончилось тем, что оно используется только в архитектуре ARM, а не в x86.
Подводя итог, существует ли какая-либо структура данных или функция API ядра, которая позволяет программисту модуля ядра простым способом просматривать все устройства struct device*
?
Комментарии:
1. В ядре Linux такого нет.
2. Это печально: (хотя спасибо за комментарий
3. Вы можете попытаться пройти по каждой шине, доступной в ядре, но она может не охватывать 100% устройств, зарегистрированных в ядре.