我试图从Linux内核写入系统控制寄存器。但是结果是分割错误:
来自内核模块的代码:
#define REGBASE 0x20050000
void writeRegister(void){
__raw_writel( 0x00000002, REGBASE + 0x0004 );
}
如何访问系统控制寄存器所在的片上存储器?
最佳答案
我猜想REGBASE是一个物理地址,而不是虚拟地址。您需要先让内核将其映射到地址空间,然后才能使用它。大多数情况下,您会使用ioremap
进行映射。
例如:
void __iomem *io = ioremap(REGBASE, SZ_4K);
writel(0x00000002, io + 0x0004);