Chapter 8. Kernel Interfaces
In the last chapter, you learned about developing software to extend or otherwise modify the Linux kernel. You learned that the Linux kernel is, fundamentally, a mere collection of useful (and privileged) library routines that you can utilize through your program to carry out some operation on your behalf. You also learned how to write Linux kernel modules of your own. The brief examples of the previous chapter demonstrated some limited ways to interface between user programs (userland) and the kernel.
This chapter builds upon the knowledge you've already gained from previous chapters and explains what kinds of interfaces exist within the Linux kernel and also those interfaces that exist between the Linux kernel and other user-level application software. The term interface is a little ambiguous, but in the context of this chapter, it refers both to the range of interfaces between the kernel and user, and the internal API of the kernel itself. Both are discussed in this chapter, along with an explanation of key concepts—such as the lack of a stable kernel ABI against which to write Linux kernel modules.
After reading this chapter, you'll have a better understanding of how the kernel fits into a typical Linux system. Even if you're not writing your own kernel modules, the information in this chapter will aid your understanding of tools—such as the udev dynamic device filesystem daemon—and how messages are passed around the lower levels of the system. This ...