AnsweredAssumed Answered

"Kernel access of bad area" in kernel module

Question asked by jack rubby on Oct 7, 2013
Latest reply on Dec 18, 2013 by Alan Wang

Hi,

I want to set/reset GPIO registers in freescale p1022 processor. I saw a

hello-mod kernel module in yocto and I added it to my image and it worked.

According to hello-mod kernel module, I created GPIO module like hello-mod.

But it GPIO module failed when I run it in kernel level. I checked several

times addresses of registers and it seems accurate.

My code is here :

 

#include <linux/module.h>

 

int init_module(void)

{

volatile uint32_t * Guts_Pmuxcr;

volatile uint32_t * Gpio3_Gpdir;

volatile uint32_t * Gpio3_Gpdat;

 

// e500 Core View To Power Architecture CCSR: 0x0_FF70_0000

 

  // GUTS_PMUXCR:Alternate Function Signal Multiplex Control Register

Guts_Pmuxcr = (volatile uint32_t *)(0xFF7E0060);

 

  // GPIO3_GPDIR: GPIO3 direction register

Gpio3_Gpdir = (volatile uint32_t *)(0xFF70F200);

 

  // GPIO3_GPDAT: GPIO3 data register

Gpio3_Gpdat = (volatile uint32_t *)(0xFF70F208);

 

 

// Enable GPIO3[10]: IRQ_DEBUG1_GPIO FIELD [BIT 26] set to "1"

*(Guts_Pmuxcr) = 0x00000010;

 

 

// Set Direction for GPIO3[10] to Output: FIELD DR10 [BIT 10] set to '1'

*(Gpio3_Gpdir) = 0x00200000;

 

 

// Set GPIO3[10] to '0': FIELD D10 [BIT 10] set to '0'

*(Gpio3_Gpdat) = 0x00000000;

 

printk("Hello World!\n");

return 0;

}

 

void cleanup_module(void)

{

printk("Goodbye Cruel World!\n");

}

 

MODULE_LICENSE("GPL");

 

When I write insmod GPIO.ko in the terminal I get error these errors:

 

Unable to handle kernel paging request for data at address 0xff7e0060

faulting instruction address: 0xf107e05c

Oops: Kernel access of bad area, sig: 11 [#1]

..........

.........

 

How can I solve this problem?

Outcomes