Hi,<br><br>I am new to linux device driver development and I'm trying to learn the memory mapping. Currently I have written a simple device driver(major number 251 and minor number 0) and in its mmap(struct file *file, struct vm_area_struct *vma) function, I am trying to memory map a global character array (defined in driver) to user space memory.This is my current implementation<br>
<br>char map[25];<br><pre class="code c"><font style="font-family: arial,helvetica,sans-serif;" size="2"><span class="kw4">static</span> <span class="kw4">int</span> test_mmap<span class="br0">(</span><span class="kw4">struct</span> file <span class="sy0">*</span>filp<span class="sy0">,</span> <span class="kw4">struct</span> vm_area_struct <span class="sy0">*</span>vma<span class="br0">)</span><br>
<span class="br0">{</span><br>            strcpy(map, "Hello World!!");<br> <span class="kw1">if</span> <span class="br0">(</span>remap_pfn_range<span class="br0">(</span>vma<span class="sy0">,</span> vma<span class="sy0">-></span>vm_start<span class="sy0">,</span><span style="font-family: arial,helvetica,sans-serif;"> </span></font><font style="font-family: arial,helvetica,sans-serif;" size="2">page_to_pfn(virt_to_page(map))</font><font style="font-family: arial,helvetica,sans-serif;" size="2"><span style="font-family: arial,helvetica,sans-serif;" class="sy0">,</span><br>
                            vma<span class="sy0">-></span>vm_end <span class="sy0">-</span> vma<span class="sy0">-></span>vm_start<span class="sy0">,</span> vma<span class="sy0">-></span>vm_page_prot<span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span><br>
                <span class="kw1">return</span> <span class="sy0">-</span>EAGAIN;<br> <span class="br0">}</span><br>      <span class="kw1">return</span> <span class="nu19">0</span>;<br><span class="br0">}</span><b><br></b></font></pre>
Now after compiling the driver successfully, I created a character device file /dev/test0 using mknod command (mknod /dev/test c 251 0). And in my C program I tried to memory map the /dev/test file.<br><br>Now what I want is that whenever I map /dev/test, internally that global char array gets memory mapped to the user space? Also what should I pass as the length parameter in the mmap() function? Currently I am passing 25(size of the array). My device gets memory map successfully but when I tried to read from it I get garbage value. Is there something that I am missing?<br>
<br>Thanks in advance<br>Ravi Gupta<br>