X86: Как Linux узнает, какая область памяти используется для ввода-вывода, отображаемого в памяти (MMIO)? ⇐ Linux
X86: Как Linux узнает, какая область памяти используется для ввода-вывода, отображаемого в памяти (MMIO)?
В настоящее время я изучаю процесс инициализации ядра Linux. Меня немного смущает, откуда ядро узнает о конкретной области памяти, используемой для MMIO. У меня следующие гости.
Сначала ядро запросит службы BIOS, чтобы определить, какая область памяти используется для нормальной работы, а какая зарезервирована для других целей (например, через INT 0x15, EAX = 0xE820). Но, насколько мне известно, BIOS предоставляет лишь минимальную информацию об этом (зарезервировано, APIC и нормально).
Почему первый вопрос: если драйвер устройства обязан знать, какая область памяти сопоставлена с его устройством, как он может узнать, какая область памяти ему подходит? (возможно, через таблицы APIC или что-то еще)
Далее, если ядро Linux не использует BIOS, какой механизм отвечает за определение структуры памяти для всех устройств, подключенных к компьютеру? И существует ли какой-либо механизм динамической настройки MMIO в драйверах устройств?
Последний вопрос более широкий: я хочу знать, как ядро узнает, подключено ли к нему устройство, есть ли в ядре какой-то процесс сканирования для него или устройства будут генерировать прерывания, чтобы сигнализировать ядру? или это зависит от конкретного устройства, у каждого будут разные подходы (последовательный порт, клавиатура, мышь, PCIe и т. д.).
P/S: Не могли бы вы порекомендовать какие-нибудь ресурсы/статьи, в которых подробно объясняется взаимодействие ввода-вывода или периферийных устройств?
Я действительно хочу найти опытного разработчика ядра Linux, который поможет мне подробно ответить на эти вопросы.
В настоящее время я изучаю процесс инициализации ядра Linux. Меня немного смущает, откуда ядро узнает о конкретной области памяти, используемой для MMIO. У меня следующие гости.
Сначала ядро запросит службы BIOS, чтобы определить, какая область памяти используется для нормальной работы, а какая зарезервирована для других целей (например, через INT 0x15, EAX = 0xE820). Но, насколько мне известно, BIOS предоставляет лишь минимальную информацию об этом (зарезервировано, APIC и нормально).
Почему первый вопрос: если драйвер устройства обязан знать, какая область памяти сопоставлена с его устройством, как он может узнать, какая область памяти ему подходит? (возможно, через таблицы APIC или что-то еще)
Далее, если ядро Linux не использует BIOS, какой механизм отвечает за определение структуры памяти для всех устройств, подключенных к компьютеру? И существует ли какой-либо механизм динамической настройки MMIO в драйверах устройств?
Последний вопрос более широкий: я хочу знать, как ядро узнает, подключено ли к нему устройство, есть ли в ядре какой-то процесс сканирования для него или устройства будут генерировать прерывания, чтобы сигнализировать ядру? или это зависит от конкретного устройства, у каждого будут разные подходы (последовательный порт, клавиатура, мышь, PCIe и т. д.).
P/S: Не могли бы вы порекомендовать какие-нибудь ресурсы/статьи, в которых подробно объясняется взаимодействие ввода-вывода или периферийных устройств?
Я действительно хочу найти опытного разработчика ядра Linux, который поможет мне подробно ответить на эти вопросы.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение