C++ Raspberry PI 3-内核驱动程序-无法使用ioremap()访问GPIO

C++ Raspberry PI 3-内核驱动程序-无法使用ioremap()访问GPIO,c++,raspberry-pi,kernel,driver,gpio,C++,Raspberry Pi,Kernel,Driver,Gpio,我正在尝试编写一个内核驱动程序(模块),用于读取RPI3上的GPIO 我使用ioremap访问GPIO的内存,但显然它崩溃了 我在/var/log/messages日志文件中得到一个异常 Aug 6 14:07:58 raspberrypi kernel: [ 220.900252] Exception stack(0xa796ffa8 to 0xa796fff0) Aug 6 14:07:58 raspberrypi kernel: [ 220.900264] ffa0:

我正在尝试编写一个内核驱动程序(模块),用于读取RPI3上的GPIO

我使用
ioremap
访问GPIO的内存,但显然它崩溃了

我在/var/log/messages日志文件中得到一个异常

Aug  6 14:07:58 raspberrypi kernel: [  220.900252] Exception stack(0xa796ffa8 to 0xa796fff0)
Aug  6 14:07:58 raspberrypi kernel: [  220.900264] ffa0:                   fe5f5100 7eff8714 00000003 0002d064 00000000 00000004
Aug  6 14:07:58 raspberrypi kernel: [  220.900277] ffc0: fe5f5100 7eff8714 0003fce8 0000017b 007e47d8 00000000 00000002 00000000
Aug  6 14:07:58 raspberrypi kernel: [  220.900286] ffe0: 7eff8548 7eff8538 00022cb8 76cb9af0
这是我的模块代码:

#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/io.h>

#define BCM2708_PERI_BASE        0x20000000
#define GPIO_BASE                (BCM2708_PERI_BASE + 0x200000) /* GPIO controller */

static int __init driver_init(void)
{
    if ((gpio = ioremap(GPIO_BASE, 0xB0)) == NULL) {
        printk(KERN_INFO "io remap failed\n");
        return -EBUSY;
    }

    return 0;
}

static void __exit driver_exit(void)
{
    iounmap(gpio);
}

module_init(driver_init);
module_exit(driver_exit);
#包括
#包括
#包括
#定义BCM2708_PERI_BASE 0x20000000
#定义GPIO_基地(BCM2708_PERI_基地+0x200000)/*GPIO控制器*/
静态整数初始化驱动程序初始化(void)
{
if((gpio=ioremap(gpio_BASE,0xB0))==NULL){
printk(内核信息“io重新映射失败\n”);
返回-EBUSY;
}
返回0;
}
静态无效\退出驱动程序\退出(无效)
{
iounmap(gpio);
}
模块初始化(驱动程序初始化);
模块出口(司机出口);
有人能告诉我我做错了什么吗


是否与其他驾驶员发生冲突?我怎么能检查这个?

基本地址是0x3F000000,不是0x2000000

好吧,我真蠢,我复制粘贴了错误的基本地址请编辑你的答案,不要发布你的“更正”