Как сопоставить 1 ГБ (или более ) физической памяти

У меня есть установка с 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 для приложений). Поэтому мне было интересно, можно ли сопоставить физический адрес с виртуальным адресом пользовательского пространства без сопоставления этих физических адресов в ядре?

Заранее спасибо.

7
задан user1259743 10 March 2012 в 10:03
поделиться