-------------------------------------
在进行树莓派驱动开发时报了 Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP 错误,使用 dmesg 命令观察到发生错误的地方是 readl 这个函数,提示空指针什么的。定位到错误坐标,打印通过 ioremap 函数返回的地址,发现全是 0😱,在网上搜索了大半天没找到原因,都是说怎么定位错误的。
于是打开 bcm2711 的手册,学了一会儿英语,发现第一部分有一个 address map 这个东西,之前忽略了(直接翻到 GPIO 就开始读),主要是 GPIO 这开始的第一句话就把我误导了,我翻译过来是 GPIO 基地址是 0x7e20 0000 就直接拿来用了,实际上,这是一个偏移地址,还需要加上外围设备的偏移地址 0x8000 0000 那就是 0xfe20 0000。修改地址后成功解决。
切记不要粗心大意!!!