I for one agree that the documentation could be improved, in fact it's something that I whine about on a fairly regular basis. But as I've said repeatedly, BaseUnix is one of a number of thin wrappers around the OS, and I think it's entirely reasonable to expect a user to be able to use the OS documentation: manpages and, where necessary, references to system-level header files (from -dev packages on Debian and derivatives) etc.
There are however a couple of caveats there. The first is that there are a number of most unpleasant Linux-related subsystems and libraries where there are hacks to handle things like processor-specific alignment. HID handling is one of those, and in that case it's /much/ better to find a higher-level library maintained by people fairly close to the kernel developers (and built using the same tools) than to try to replicate a layer of C macros and data structures: you don't want to be making direct ioctl calls in that sort of case. Been there done that.
The second is that Linux has the peculiarity that on different CPUs you are likely to find different system call numbers and slightly different structures being returned by e.g. a stat() kernel call. The reason for that is that when Linux was ported beyond the original i386 architecture Torvalds et al. decided to use call numbers and data structures to match the dominant unix dialect on that CPU, generally speaking the FPC libraries "do the right thing" in these cases but be extremely careful if you find yourself having to define something yourself: if a kernel operation really is missing from BaseUnix etc. you'll be better conferring with the core developers so that it can be implemented across all CPUs rather than going it alone.
MarkMLl