У меня есть установка с 2 ГБ памяти, и я хотел бы отобразить 1 ГБ (или более) физической памяти в виртуальный адрес пользовательского пространства. Теоретически это возможно, поскольку при 32-битной настройке 3 ГБ виртуального адреса доступны для пользовательских наземных приложений.
Я обновил командную строку ядра следующими параметрами: mem=1G memmap=1G$1G чтобы заставить ядро видеть 1 ГБ ОЗУ и резервировать последний 1 ГБ.
У меня есть собственный драйвер, который будет обрабатывать вызов mmap() пространства пользователя и сопоставлять физический адрес 0x40000000 (1G) с адресом пространства пользователя с помощью функции remap_pfn_range(). Но функция вызывает ошибку ядра() в remap_pte_range(). Тот же вызов работал с переназначением 300 МБ вместо 1 ГБ.
Я обычно использую вызов ioremap() в своем драйвере, чтобы сопоставить физический адрес с виртуальным адресом ядра. В этом случае я не могу из-за разделения виртуальных адресов 1G/3G (1G для ядра, 3G для приложений). Поэтому мне было интересно, можно ли сопоставить физический адрес с виртуальным адресом пользовательского пространства без сопоставления этих физических адресов в ядре?
Заранее спасибо.