Вам не нужно ioremap()
, если вы используете remap_pfn_range()
. ioremap()
отображает физический адрес в виртуальный адрес ядра. remap_pfn_range()
отображает физические адреса непосредственно в пользовательском пространстве. Просто передайте свой физический адрес (с пониженной передачей по PAGE_SHIFT для создания pfn) непосредственно на remap_pfn_range()
. Ваши вопросы по порядку:
- ядро виртуальный адрес
- kmalloc возвращает ядро виртуального, но гарантирует непрерывную память See question 116343
- вы могли бы сделать это, если вы звоните
virt_to_phys()
во-первых, для преобразования ядра виртуального адреса в физический. Но пропустить шаг, если вы на самом деле не нужен доступ ядра к этой области памяти
- физический адрес, понижающую передачу по PAGE_SHIFT для получения PFN
посмотреть на # 4 на исходное сообщение – shd