#linux-kernel #acpi
#linux-ядро #acpi
Вопрос:
Я извлек acpidump в Ubuntu и пытаюсь понять, что устройство или BIOS предоставили хосту Linux.
Помимо IO
порта, который не работает, я вижу только ресурс Memeory32Fixed()
, базовый адрес которого 0x0
имеет допустимую длину _Y06
.
Я пытался читать / записывать с помощью виртуального адреса, полученного из ioremap(0x0, 0x10000)
(в пространстве ядра), но, похоже, это не работает.
Итак, что это означает и как я могу использовать его для связи с оборудованием, если оно вообще полезно?
Device (SOMETHING)
{
......
Name (RBUF, ResourceTemplate ()
{
Memory32Fixed (ReadWrite,
0x00000000, // Address Base
0x00010000, // Address Length
_Y06)
}
.......
Комментарии:
1. Где-то еще есть код (ASL-код), который добавляет смещение.
2. Чтобы ответить на ваш вопрос, вам необходимо зарегистрировать драйвер платформы, который будет вызываться
platform_get_resource(pdev, IORESOURCE_MEM, 0);
для получения фактических значений.3. @0andriy Я только что попробовал
platform_get_resource()
, и он возвращает тот же физический адрес, полученный сacpi_dev_get_resources()
которого я использовал ранее, но запись на этот адрес (после использованияioremap()
для преобразования их в виртуальный адрес, конечно) не работает.. Я могу найти этот адрес, который уже зарезервирован,/proc/iomem
но он ОТСУТСТВУЕТ вDSDT.dsl
извлеченном из acpidump. Есть идеи, что все еще может быть не так? Возможно ли, что BIOS / EFI неправильно назначили эти адреса?4. Прочитайте мои комментарии выше, трудно сказать, когда вы не предоставили достаточно контекста (полный ASL для этого узла устройства, исходный код пробной части драйвера и т. Д.) И отладочной информации (напечатанные значения ресурса структуры и т. Д.).