在使用/dev/mem设备节点将寄存器地址映射到用户空间时使用mmap函数将寄存器地址映射到用户空间,但是在使用mmap函数时需要注意一下一点:
使用mmap函数时物理地址的起始地址有一些讲究,不是随便给个地址就直接映射了而是给的地址需要是页对齐的,即4K
对齐例如下面的例子中,某个gpio的地址是0x + 0x100基地址是0x,偏移昰0x100但是当我直接映射0x地址到用户空间,然后对返回的虚拟地址进行读写操作这是不对的,因为在/dev/mem的驱动中会把0x地址进行4K对齐,然后給返回用户空间此时放回的地址不是我们想要的。正确的做法是应该映射0x地址到用户空间然后在返回的虚拟机地址vadd加上0x100即可。