Implementing sys_mmap in kernel module

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi
 
I have implemented a pseudo char driver/kernel module and implemented the mmap operation for learning. When user-space program calls mmap, the kernel module maps a single page of memory allocated using get_zeroed_page.
 
From user space, I can read/write to the page. I also implemented read operation in my module. Now read method actually reads and returns the content of the same page that I mapped to user-space from mmap (the address is stored in the module structure). The problem is read function does not seem to see the changes made in user-space. It always gets the old value. For example if in userspace program I do,
 
         ptr = mmap (...)  /*  ptr is the mmapped address */
 
                                 /* modify the content of the page */ 
         for (i = 0; i < PAGE_SIZE; i++)
               *ptr++ = 1;
 
         fd = open("/dev/node", O_RDWR);  /* open the device node */
         read(fd, buf, PAGE_SIZE);             /* read from buf */
         
Inside the implementation of read system call, I print the contents of tha page in log using printk. But I don't see all 1s. Its just old content, zero filled page.
 
Aren't they both accessing the same page? What am I doing wrong?
 
Thanks,
Meraj
 
 
 
 
 
 


Catch up on fall's hot new shows on Yahoo! TV. Watch previews, get listings, and more!

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux