Hello,
I work on a MPC8347 processor and I found out a problem with
rtdm_event_wait(). I reproduce the problem with a simple code :
*driver.c* :
#include <rtdm/rtdm_driver.h>
MODULE_AUTHOR("P.Martignoni");
MODULE_LICENSE("GPL");
#define DEV_FILE_NAME "DspDev"
#define DRV_NAME "DspDrv"
#define DEV_FILE_DSP "dspdev0"
static rtdm_event_t s_ReadEvent;
static int Open(struct rtdm_dev_context *p_Context,
rtdm_user_info_t *p_UserInfo,
int Oflags)
{
int ret = 0;
rtdm_event_init(&s_ReadEvent,0);
// generates an error : Oops : Kernel access of bad area, sig : 11 [#1]
rtdm_event_wait(&s_ReadEvent);
return ret;
}
static int Close(struct rtdm_dev_context *p_Context,
rtdm_user_info_t *p_UserInfo)
{
rtdm_event_destroy(&s_ReadEvent);
return 0;
}
/*****************************************************/
/* Structures rtdm_device */
/*****************************************************/
static struct rtdm_device t_IdspDevice = {
struct_version: RTDM_DEVICE_STRUCT_VER,
device_flags: RTDM_NAMED_DEVICE,
context_size: 0,
device_name: DEV_FILE_DSP,
open_rt: NULL,
open_nrt: Open,
ops:{
close_rt: NULL,
close_nrt: Close,
ioctl_rt: NULL,
ioctl_nrt: NULL,
read_rt: NULL,
read_nrt: NULL,
write_rt: NULL,
write_rt: NULL,
recvmsg_rt: NULL,
recvmsg_nrt:NULL,
sendmsg_rt: NULL,
sendmsg_nrt:NULL,
},
device_class: RTDM_CLASS_EXPERIMENTAL,
device_sub_class: 222,
driver_name: DRV_NAME,
peripheral_name: DEV_FILE_NAME,
provider_name: "-",
proc_name: t_IdspDevice.device_name,
};
/**************************************/
/* Init Driver */
/**************************************/
static int ddsp_Init(void)
{
if(rtdm_dev_register(&t_IdspDevice)!=0)
rtdm_printk("Enregistrement impossible\n");
else
rtdm_printk("Initialisation OK\n");
return 0;
}
/*************************************/
/* Exit Driver */
/*************************************/
static void ddsp_Exit(void)
{
if(rtdm_dev_unregister(&t_IdspDevice,0))
rtdm_printk("Desabonnement KO\n");
else
rtdm_printk("Desabonnement OK\n");
}
module_init(ddsp_Init);
module_exit(ddsp_Exit);
*App.c* :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <sys/mman.h>
#include <native/task.h>
#define DEV_FILE_DSP "dspdev0"
#define TASK_PRIO 50
static RT_TASK s_TaskTest;
int main(int argc, char * argv[])
{
int ret = 0;
mlockall(MCL_CURRENT | MCL_FUTURE);
// set the currrent task in rt mode
ret = rt_task_shadow(&s_TaskTest,NULL,1,0);
rt_dev_open(DEV_FILE_DSP, 0);
return ret;
}
When I launch this code, I have this error : *Oops : Kernel access of bad
area, sig 11 [#1]
*I notice that if the rtdm_event_wait() is called in a kernel task, there is
no problem.
Have you any idea for my issue ?
Thanks in advance.
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help