C++ Raspberry PI 3-内核驱动程序-无法使用ioremap()访问GPIO
我正在尝试编写一个内核驱动程序(模块),用于读取RPI3上的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:
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好吧,我真蠢,我复制粘贴了错误的基本地址请编辑你的答案,不要发布你的“更正”