The most widely supported form of IO is memory mapped IO. That is, a part of the CPU's address space is interpreted not as accesses to memory, but as accesses to a device. Some architectures define devices to be at a fixed address, but most have some method of discovering devices. The PCI bus walk is a good example of such a scheme. This document does not cover how to receive such an address, but assumes you are starting with one. Physical addresses are of type unsigned long.
This address should not be used directly. Instead, to get an
address suitable for passing to the accessor functions described
below, you should call
An address suitable for accessing the device will be returned to you.
After you've finished using the device (say, in your module's
exit routine), call
iounmap in order to return
the address space to the kernel. Most architectures allocate new
address space each time you call
they can run out unless you call