From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <53C550DF.4090500@axelsw.it> Date: Tue, 15 Jul 2014 18:03:43 +0200 From: Marco Tessore MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: [Xenomai] Question about rtdm_mmap_to user List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xenomai@xenomai.org Good morning, I would like to share a buffer between user space task and kernel space realtime driver. I used the function rtdm_mmap_to user in the following way: In the driver, in the function myDriver_ioctl_rt I have the code: spild->agg_write_frame_buffer allocated with kalloc ret = rtdm_mmap_to_user( user_info, spild->agg_write_frame_buffer, agg_fun_local.data_size, PROT_READ|PROT_WRITE , &tmpPtr, NULL, NULL ); agg_fun_local.data_buffer = (uint8_t *) tmpPtr; rtdm_printk("mmap = %X\n", (unsigned) agg_fun_local.data_buffer); // print the returned address if (ret) { rtdm_printk("mmap error1\n"); kfree(spild->agg_write_frame_buffer); return ret; } // check data spild->agg_write_frame_buffer[0] = 0xBE; spild->agg_write_frame_buffer[1] = 0xEF; // then returned the agg_fun_local structure to userspace In the user space process I have the following code: ret = rt_dev_ioctl( device, IOCTL_MYDRIVER, &agg_fun ); if (ret) { printf("PREP_AGG_WRITE failed, ret = %X", (int) ret); } printf("USER = Address = %X\n", (unsigned) agg_fun.data_buffer); printf("USER check %X%X\n", pAggFun->data_buffer[0], agg_fun.data_buffer[1]); I have verified that the address in userspace is the same of the one returned by the rtdm_mmap_to_user. The problem is that in the process I cannot see the check data written in the driver. Is there something wrong in my code? Are there some constraints tha I haven't took into account? Thank you very much Best regards Marco Tessore