我试图从 linux 内核写入系统控制寄存器。但结果是分段错误:
无法处理虚拟地址 20050004 处的内核分页请求
内核模块中的代码:
#define REGBASE 0x20050000
void writeRegister(void){
__raw_writel( 0x00000002, REGBASE + 0x0004 );
}
Run Code Online (Sandbox Code Playgroud)
如何访问系统控制寄存器所在的片上存储器?
我猜 REGBASE 是一个物理地址而不是虚拟地址。您需要先让内核将其映射到地址空间中,然后才能使用它。大多数时候你会ioremap用来映射它。
例如:
void __iomem *io = ioremap(REGBASE, SZ_4K);
writel(0x00000002, io + 0x0004);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6461 次 |
| 最近记录: |