Я работаю над модулем Linux для IA64. Моя текущая проблема заключается в том, что драйвер использует макросы PAGE_SIZE и PAGE_SHIFT для распределения страниц dma. Проблема, с которой я сталкиваюсь, заключается в том, что машина, компилирующая драйвер, не та, которая нужна для запуска драйвера. Таким образом, если PAGE_SIZE на компилирующей машине составляет 2 ^ 14 КБ, а на целевой машине — 2 ^ 16 КБ, драйвер не работает.
Я не хочу превращать этот вопрос в вопрос о «лучшей практике» компиляции модулей на машинах, на которых эти модули не запущены. Я понимаю вопросы по этому поводу. Я обнаружил, что люди в основном используют getpagesize() или sysconf(_SC_PAGE_SIZE). Эти два параметра отсутствуют в заголовках ядра ia64, поэтому я не могу их использовать. Есть ли другой способ получить среду выполнения PAGE_SIZE?
Варианты, которые я рассматриваю:
- Чтение какого-то файла в /proc?
- системный вызов?
- Другая функция, которая позволяет мне вычислить PAGE_SIZE по выводу (например, ORDER, getpageshift и т. д.)?
- Другой?
PAGE_SIZEнастраивается для архитектуры IA64, а не фиксируется? Я думал, чтоPAGE_SIZEисправлено для данной архитектуры (например, всегда4096для x86). - person Craig McQueen   schedule 10.04.2013