当前位置: 技术问答>linux和unix
寄存器映射方法
来源: 互联网 发布时间:2016-12-07
本文导语: 写按键驱动时,用到GPIO7组寄存器,首先我要配置IO config寄存器,控制IO口的复用关系, 然后配置GPIO7寄存器的控制相应位的读写状态等, 但是,应为在系统下编写驱动,往寄存器里写数据之前,首先要进行地址转...
写按键驱动时,用到GPIO7组寄存器,首先我要配置IO config寄存器,控制IO口的复用关系,
然后配置GPIO7寄存器的控制相应位的读写状态等,
但是,应为在系统下编写驱动,往寄存器里写数据之前,首先要进行地址转换(映射),
请教地址转换的方法?
然后配置GPIO7寄存器的控制相应位的读写状态等,
但是,应为在系统下编写驱动,往寄存器里写数据之前,首先要进行地址转换(映射),
请教地址转换的方法?
|
根据体系结构的不同IO寄存器的访问方式不同:
1)如果是IO和MEM独立编址,例如X86,对IO寄存器的访问在内核直接采用inb方式;
2)如果是IO和MEM统一编址,例如ARM等RISC处理器,在内核里采用ioremap重新映射,然后用writeb等方式。
在核外X86也可以直接访问IO和MEM,具体方法不记得了。
如果采用Ioremap和writeb等方式可以进行内核访问的寄存器,也可以采用mmap方式直接映射给核外用户。
1)如果是IO和MEM独立编址,例如X86,对IO寄存器的访问在内核直接采用inb方式;
2)如果是IO和MEM统一编址,例如ARM等RISC处理器,在内核里采用ioremap重新映射,然后用writeb等方式。
在核外X86也可以直接访问IO和MEM,具体方法不记得了。
如果采用Ioremap和writeb等方式可以进行内核访问的寄存器,也可以采用mmap方式直接映射给核外用户。
|
访问前调用ioremap();退出前调用iounmap();