как выделить 4-8 МБ выровненного DMA Linux - PullRequest
4 голосов
/ 27 февраля 2012

Я использую Fedora 14 и создаю драйвер для PCI-коммутатора. для этого коммутатора мне нужно выделить 8 МБ памяти DMA (я могу обработать 2 * 4 МБ), но мне нужно выровнять его по объему памяти, например, если его 8 МБ, то первые 23 бита базового адреса должны быть 0.

как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

__get_free_pages можно выделить до 4 МБ, выделенных по размеру выделения.
Таким образом, вы можете выделить два блока по 4 МБ, каждый из которых выровнен по 4 МБ.

Невозможно выровнять по 8 МБтаким образом.
Во время загрузки, если вы выделите 3 * 4 МБ, весьма вероятно, что блоки будут смежными, поэтому либо первый и второй, либо второй и третий будут выровнены на 8 МБ.Но я бы не стал на это полагаться.

Обратите внимание, что вы должны делать это рано во время загрузки, в любом случае.В противном случае весьма вероятно, что память фрагментирована, и вы не сможете получить ее.

0 голосов
/ 28 февраля 2012

__get_free_pages дал мне максимум 4 МБ, но он был выровнен только по размеру страницы (4 КБ).

Мне удалось выделить 16 МБ прямого доступа к памяти с использованием pci_alloc_consistent, и по крайней мере 8 МБ выровнено по 8 МБ,Это решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...