В многих заголовках ядра присутствует символ препроцессора __user. Насколько я знаю, он имеет смысл только для ядра. Поэтому софт (конкретно - kvm), который пытается скомпилироваться с таким заголовком, валится с ошибкой. /usr/include/linux/usbdevice_fs.h:49: error: variable or field `__user' declared void
На самом деле макрос __user определяется в <linux/compiler.h>; можно либо добавить #include <linux/compiler.h> в файлы, использующие __user, либо пропустить файлы заголовков через sed, чтобы убрать эти конструкции: # Eliminate the contents of (and inclusions of) compiler.h HDRSED := sed -e "s/ inline / __inline__ /g" \ -e "s/[[:space:]]__user[[:space:]]\+/ /g" \ -e "s/(__user[[:space:]]\+/ (/g" \ -e "s/[[:space:]]__force[[:space:]]\+/ /g" \ -e "s/(__force[[:space:]]\+/ (/g" \ -e "s/[[:space:]]__iomem[[:space:]]\+/ /g" \ -e "s/(__iomem[[:space:]]\+/ (/g" \ -e "s/[[:space:]]__attribute_const__[[:space:]]\+/\ /g" \ -e "s/[[:space:]]__attribute_const__$$//" \ -e "/^\#include <linux\/compiler.h>/d" (из linux-2.6.18/scripts/Makefile.headersinst). Вариант "добавить #include <linux/compiler.h> в файлы, использующие заголовки ядра" не годится, поскольку linux/compiler.h не входит в набор файлов, которые разработчики ядра считают допустимыми для использования в userspace (этот файл не устанавливается по make headers_install).
Hopefully fixed in 2.6.17-alt4.