Вынудить Linux использовать только память по 4G?

У меня есть драйвер устройства Linux, который взаимодействует через интерфейс к устройству, которое, в теории, может выполнить DMA с помощью 64-разрядных адресов. Я хотел бы протестировать, чтобы видеть, что это на самом деле работает.

Существует ли простой способ, которым я могу вынудить машину Linux не использовать память ниже физического адреса 4G? Хорошо, если изображение ядра находится в низкой памяти; я просто хочу быть в состоянии вызвать ситуацию, где я знаю все свои динамично выделенные буферы, и любое ядро или пользовательские буферы, выделенные для меня, не адресуемы в 32 битах. Это - немного грубой силы, но было бы более всесторонним, чем что-либо еще, о чем я могу думать.

Это должно помочь мне поймать (1) аппаратные средства, которые не были настроены правильно или загружены полным адресом (или просто повреждается), а также (2) случайное и ненужное использование буферов возврата (потому что нет, чтобы нигде возвратиться к).

разъяснение: я выполняю x86_64, таким образом, я не забочусь о большинстве старых 32-разрядных проблем обращения. Я просто хочу протестировать это, драйвер может правильно взаимодействовать через интерфейс со множествами буферов с помощью 64-разрядных физических адресов.

9
задан Eric Seppanen 16 December 2009 в 01:37
поделиться

2 ответа

/usr/src/linux/Documentation/kernel-parameters.txt

        memmap=exactmap [KNL,X86] Enable setting of an exact
                        E820 memory map, as specified by the user.
                        Such memmap=exactmap lines can be constructed based on
                        BIOS output or other requirements. See the memmap=nn@ss
                        option description.

        memmap=nn[KMG]@ss[KMG]
                        [KNL] Force usage of a specific region of memory
                        Region of memory to be used, from ss to ss+nn.

        memmap=nn[KMG]#ss[KMG]
                        [KNL,ACPI] Mark specific memory as ACPI data.
                        Region of memory to be used, from ss to ss+nn.

        memmap=nn[KMG]$ss[KMG]
                        [KNL,ACPI] Mark specific memory as reserved.
                        Region of memory to be used, from ss to ss+nn.
                        Example: Exclude memory from 0x18690000-0x1869ffff
                                 memmap=64K$0x18690000
                                 or
                                 memmap=0x10000$0x18690000

Если вы добавите memmap = 4G $ 0 к параметрам загрузки ядра, нижние 4 ГБ физической памяти больше не будут доступны . Кроме того, ваша система больше не будет загружаться ... но некоторые его варианты ( memmap = 3584M $ 512M ?) Могут обеспечить достаточно памяти ниже 4 ГБ для загрузки системы, но недостаточно для того, чтобы буферы DMA вашего драйвера могли размещаться там.

7
ответ дан 4 December 2019 в 23:06
поделиться

IIRC. В конфигурации ядра есть опция для использования расширений PAE, которые позволят вам использовать более 4 ГБ (I Я немного ржавый в конфигурации ядра - последнее ядро, которое я перекомпилировал, было 2.6.4 - так что, пожалуйста, извините, что я не помню). Вы знаете, как запустить конфигурацию ядра

make clean && make menuconfig

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: