Я работаю над модулем Linux для IA64. Моя текущая проблема заключается в том, что драйвер использует макросы PAGE_SIZE и PAGE_SHIFT для распределения страниц dma. Проблема, с которой я столкнулась, заключается в том, что машина, компилирующая драйвер, не те, которые необходимы для запуска драйвера. Итак, если PAGE_SIZE на компиляторе составляет 2^14K, а машина назначения - 2^16K, тогда драйвер не работает.Как получить размер страницы ядра linux программно
Я не хочу превращать этот вопрос в вопрос «лучшей практики» о компиляции модулей на машинах, которые не являются модулями. Я понимаю вопросы об этом. Я обнаружил, что люди в основном используют getpagesize() или sysconf (_SC_PAGE_SIZE). Эти два варианта находятся вне заголовков ядра iia64, поэтому я не могу их использовать. Есть ли другой способ, которым я мог бы получить время выполнения PAGE_SIZE?
Варианты Я смотрю на:
- Чтение какой-либо файл в/Proc?
- syscall?
- Другие функции, которые позволяют мне рассчитать PAGE_SIZE путем вывода (например, ORDER, getpageshift и т. Д.)?
- Другое?
ты говоришь о 'PAGE_SIZE' настраивается для архитектуры IA64, а не фиксировано? Я думал, что PAGE_SIZE был исправлен для данной архитектуры (например, всегда '4096' для x86). –
IA64 действительно поддерживает несколько размеров страниц: http://www.informit.com/articles/article.aspx?p=29961&seqNum=3 – mdiener