vmalloc_to_pfn возвращает 32-битный адрес в системе Linux 32. Почему он отсекает старшие биты физического адреса PAE?

Я используюvmalloc_to_pfn() чтобы получить физический адрес в 32-битной системе PAE Linux. Похоже, что vmalloc_to_pfn () возвращает "unsigned long" это означает, что он 32-разрядный в 32-разрядной системе, 64-разрядный в 64-разрядной системе. В 64-битном Linux длинная без знака является 64-битной, и у меня нет проблем.

Проблема: Используя эту функцию для преобразования виртуального в физическое:

VA:0xf8ab87fc PA using vmalloc_to_pfn: 0x36f7f7fc, Но я на самом деле ожидаю:0x136f7f7fc.

Физический адрес находится в диапазоне от 4 до 5 ГБ. Но я не могу получить точный физический адрес, я получаю только отрубленный 32-битный адрес. Есть ли другой способ получитьtrue physical address?

Ответы на вопрос(1)

Ваш ответ на вопрос