Chapter 11. Data Types in the Kernel
Before we go on to more advanced topics, we need to stop for a quick
note on portability issues. Modern versions of the Linux kernel are
highly portable, running on numerous different architectures. Given
the multiplatform nature of Linux, drivers intended for serious use
should be portable as well.
But a core issue with kernel code is being able both to access data
items of known length (for example, filesystem data structures or
registers on device boards) and to exploit the capabilities of
different processors (32-bit and 64-bit architectures, and possibly
16 bit as well).
Several of the problems encountered by kernel developers while
porting x86 code to new architectures have been related to incorrect
data typing. Adherence to strict data typing and compiling with the
-Wall -Wstrict-prototypes flags can prevent most
bugs.
Data types used by kernel data are divided into three main classes:
standard C types such as int, explicitly sized
types such as u32, and types used for specific
kernel objects, such as pid_t. We are going to see
when and how each of the three typing classes should be used. The
final sections of the chapter talk about some other typical problems
you might run into when porting driver code from the x86 to other
platforms, and introduce the generalized support for linked lists
exported by recent kernel headers.
If you follow the guidelines we provide, your driver should compile
and run even on platforms on which you are unable to test it.
|