Working with I/O memory to talk with hardware
Apart from performing data RAM-oriented operations, you can perform I/O memory transactions to talk with the hardware. When it comes to the access device's register, the kernel offers two possibilities depending on the system architecture:
- Through the I/O ports: This is also called Port Input Output (PIO). Registers are accessible through a dedicated bus, and specific instructions (
in
andout
, in assembler generally) are needed to access those registers. This is the case on x86 architectures. - Memory Mapped Input Output (MMIO): This is the most common and most used method. The device's registers are mapped to memory. Simply read and write to a particular address to write to the registers of the device. This is the case on ARM architectures.
PIO devices access
On a system in which PIO is used, there are two different address spaces, one for memory, which we have already discussed, and the other one for I/O ports, called the port address space, limited...