Google
  Web www.spinics.net

Re: Mapping virtual addresses to physical

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


>>On Wed, Jul 02, 2008 at 11:01:50PM +0100, Alan Casey wrote:
>>> >On Wed, Jul 02, 2008 at 09:42:26PM +0100, Alan Casey wrote:
>>> >>   I have used code similar to the devmem2.c example at
>>> >>   www.simtec.co.uk/appnotes/AN0014/ to map physical
>>> >>   addresses to virtual addresses (i.e. user space pointers)
>>> >>   but am just wondering how do you do the reverse - i.e.
>>> >>   map virtual addresses to physical addresses in a user
>>> >>   space program without writing a device driver??
>>> >
>>> >What kind of interface to this functionality are you expecting?  What
>>> >use case would such an interface have?
>>>
>>>   I need to get the virtual address of a file on a Linux filesystem
>>
>>Hmm.  Not sure how to break this to you, but files on a Linux filesystem
>>don't have virtual addresses.  The only time that they live in memory
>>is when they're loaded into the page cache.
>>
>>At any moment in the future, data in the page cache can be evicted.  So,
>>even if you could work out where a file was, it'd be entirely useless
>>because you can't guarantee (from userspace) that it'll stay there.
>>
>>>   or a memory buffer and convert it to a physical address for the
>>>   purposes of programming a custom DMA Controller (on an FPGA) with
>>>   source read (+destination write) addresses.
>>
>>It's far better to write a small device driver for your FPGA to do this.
>>
>>Essentially, you want the device driver to provide a character special
>>device.
>>
>>Your userspace program opens the device, and then calls mmap() on it to
>>map some memory into its address space.  In response, the device driver's
>>mmap method allocates the requested memory (using dma_alloc_coherent())
> and
>>maps it into userspace using dma_mmap_coherent().
>>
>>You could then have an ioctl method to say "start DMA" and "stop DMA"
>>which'd control the DMA operation.  Please ensure that you use numbers
>>defined using the macros in asm-generic/ioctl.h.
>
> Thanks for the info - looks like i better start reading the Linux Device
> Drivers book, but if you have any links to good examples that have the
> functionality that i need, let me know please.

It's really more easy to write a device driver. I have written a kernel 
module for accessing (read/write) GPIO pins in AT91SAM926x boards. It took 
me less time to study how to write a kernel module than studying 
virtual/physical addresses.
Good luck. 


-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php

[Site Home]     [Linux ARM Kernel]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Tools]     [DDR & Rambus]     [Monitors]

Add to Google

Google PageRank Checking tool