Зависит от ядра, от того в какой памяти у тебя буфер, т.е. как ты её выделял и т.д. Оно от ядра к ядру менялось.
Ищи чтонибудь типа
virt_to_page()
vmalloc_to_page()
Плюс ещё нюансы типа того что kmalloc() возвращает хоть и
виртуальный адрес но с подряд идущими в физ памяти страницами, vmalloc() может вернуть каждую страницу откуда угодно.
Плюс если эта память может быть засвоплена, то каждую страницу надо лочить, после использования разблокировать..
Есть доступная в инете книга Linux Device Drivers от O`reilly, в часности 2nd по 2.4 ядру но и про предыдущие немного есть. Про 2.6 я не в курсе.
PS Если чё не так не пинайте, я только на x86 PC с линуксом дел имел. Подозреваю что в ембеддед системах некоторых типав памяти может не быть, ну или того же swap-инга нет.