Заставить Linux использовать только память свыше 4G? - PullRequest
9 голосов
/ 16 декабря 2009

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 16 декабря 2009

/ USR / SRC / Linux / Документация / ядро-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 вашего драйвера.

0 голосов
/ 16 декабря 2009

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

make clean && make menuconfig

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

...