lkml.org 
[lkml]   [2004]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjecthow to read the big buffer from kernel space to user applcation via mmap?
Hi driver experts,

I'm trying to use the mmap to let user application
read data from kernel buffer.

I have 700000 bytes data in the kernel buffer and user
application need to get it via mmap.

In driver code:
===============
I have alallocated 700000 bytes buffer and write
drive_mmap as the following:

char *kmalloc_area;

xxx_mmap(structile *file,
struct vmarea_struct *vma
{
int i;
vma->vm_flags |= VM_SHARED;


remap_page_range(vma->vm_start,
virt_to_phys(kmalloc_area),
700000,
PAGE_SHARED);
return 0;
}

and in the driver ininitunction:
=================================

kkmalloc_area=kmalloc(700000,GFP_KERNEL);
/* set first 100 bytes as 0x8 for testing */
for (i=0; i<100; i++)
kmalloc_area[i] = 0x8;

I have other routine to to mmap

static int xxx_mmap_buffers(void)
{
ststructage *page;
int i;


page = vivirto_page(kmalloc_area);
memap_reserve(page);
return 1;
}

in user application:
=====================
char *adaddr

addr = mmap(0, 700000, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);

if (adaddr= MAP_FAILED)
printf"****oops! error-->%d\n", ererrno;


printf"****adaddr>0x%x\n", adaddr);


for (i=0; i<100; i++)
printfuser addr[%d] --> 0x%x\n", i, addr[i]);

at the end of user app function
===============================


xxx_mmap_buffers()


Now I have 2 two issues:
1. since I set first 100 bytes to 0x8 in the kernel
buffer, I should read back when I run user app, but
after mmap all '0x0' in the first 100 bytes, can
someone tell me why and what's wrong?

2. Since my buffer is big, what I should to do to get
the right buffer pointer in user app function to read
ALL data back from the kernel space? can anyone give
me a real example?

Many thanks for your help!

-Lan



__________________________________
Do you Yahoo!?
The all-new My Yahoo! - Get yours free!
http://my.yahoo.com


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:08    [W:0.021 / U:0.100 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site