LINUX.ORG.RU

Разработка драйвера, проблема с выделением определённой области физической памяти.


0

1

Дорабатываю драйвер для свитча, встроенного в проц adm5120. К процу подключено 64М оперативки. Свитч умеет обращаться только к первым 32-м метрам оперативки, такое вот ограничение DMA. Почему-то поддерживается только flat memory model.

Вопрос: какими стандартными средствами можно выделить кусок памяти под буфер, гарантированно находящийся в первых 32 метрах оперативки так, чтобы ядро этот кусок памяти потом не трогало?


Ответ на: комментарий от satanklaus

А на какие функции, выделяющие память эта маска будет распространяться? Там используются alloc_skb, dma_alloc_coherent, kzalloc. Мало того, там нет структуры типа dev, там есть net_device.

AiSee
() автор топика

> Вопрос: какими стандартными средствами можно выделить кусок памяти под буфер, гарантированно находящийся в первых 32 метрах оперативки так, чтобы ядро этот кусок памяти потом не трогало?

Сколько раз и для каких целей (кроме DMA) тебе нужно выделять память?

anonymous
()
Ответ на: комментарий от anonymous

У меня есть старый драйвер под 2.6.16 ядро, который выделяет память несколько раз для различных буферов и дескрипторов. И есть новый драйвер под 2.6.32, который мелкие куски памяти требует постоянно, типа под каждый пакет. Могу воспользоваться любым из них.

AiSee
() автор топика
Ответ на: комментарий от AiSee

>Мало того, там нет структуры типа dev, там есть net_device

Она содержит dev. net_device в сетевом драйвере всегда нужно выделять и заполнять самому. Как там выполняется инициализация? Наверняка, с помощью platform device.

Там используются alloc_skb, dma_alloc_coherent, kzalloc

1. dma_alloc_coherent - на основе 1-го параметра и маски DMA из него и определяется допустимый диапазон физических адресов. 2. alloc_skb и kmalloc нужно передать GFP_DMA во флагах - реализация этого платформо-зависима - надо смотреть, как зоны памяти распределены на целевой платформе.

satanklaus
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.