Before enabling MMU, you can directly access it using a physical address. After MMU is enabled, You need to map the physical address to a virtual address and then access it with the virtual address. For example, if the physical address of a peripheral register is regaddr = 0x0200000 and the value to be read/written is value (unsigned int type), then:
Before enabling MMU:
Read:
Value = * (volatile unsigned int *) regaddr;
Write:
* (Volatile unsigned int *) regaddr = value;
After MMU is Enabled:
You must use ioremap for ing.
Unsigned int regaddr = 0;
Performance_regaddr = ioremap (regaddr, sizeof (unsigned INT ));
Read:
Value = * (volatile unsigned int *) pai_regaddr;
Write:
* (Volatile unsigned int *) pai_regaddr = value;
Of course, if you do not use it, remember to use iounmap () to recycle resources.
PS: if some physical memory segments have completed this ing during kernel initialization, you can use the mapped virtual address directly.