Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: __pa()?  (Прочитано 5869 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anonymous
Гость
« : 19-04-2004 10:30 » 

как преобразовать херь, которую возвращает __pa() в нормальный физадрес?

линейный адрес получаю kmalloc
_pa возвращает например 0х90с0000
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 19-04-2004 10:50 » 

Если верить документации:
Цитата
Kernel logical addresses
These make up the normal address space of the kernel. These addresses map most or all of main memory, and are often treated as if they were physical addr esses. On most architectures, logical addresses and their associated physical addresses differ only by a constant offset. Logical addresses use the hardwar e s native pointer size, and thus may be unable to address all of physical memory on heavily equipped 32-bit systems. Logical addresses are usually stored in variables of type unsigned long or void *. Memory returned from kmalloc has a logical address.

Цитата
If you have a logical address, the macro __pa( ) (defined in <asm/page.h>) will return its associated physical address. Physical addresses can be mapped back to logical addresses with __va( ), but only for low-memory pages.

См. asm/page.h:
Код:

#define __pa)x:  ))unsigned long:)x:-PAGE_OFFSET:


Для не low memory страниц: зафиксируй страницу и возьми виртуальный адрес из структуры этой страницы. А проще, потребуй у kmalloc() low memory. Биты GFP можно посмотреть в linux/mm.h .
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anonymous
Гость
« Ответ #2 : 19-04-2004 12:38 » 

GFP_KERNEL GFP_ATOMIC! И ура  :wink1:   Вероятно в этом то и было дело...Хотя я тут еще напортачил со сбросом дма
RXL спасибо тебе  :l_mad:
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 19-04-2004 12:47 » 

Как видишь, дело не в знаниях, а в умении искать информацию. Самый лучший ее источник - исходники ядра.
Кстати, если посмотреть linux/mm.h , то можно увидеть из чего состовляются GFP_* - это набор их нескольких флагов.

Если кинешь сюда кусок того кода, то может еще ошибок найдем.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anonymous
Гость
« Ответ #4 : 19-04-2004 15:18 » 

спасибо  Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines