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

#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% устройств, зарегистрированных в ядре.