A Question on Physical Memory Access from Applications

3 messages, 3 authors, 2001-08-08 · open the first message on its own page

A Question on Physical Memory Access from Applications

From: Karaaslan, Utku <hidden>
Date: 2001-08-08 13:38:02

Hello All,

I have ported the Linux bootloader/kernel to our home-made boards
(Motorola 860) and they have been running well up to now. However,
I have a problem: we've got a number of ADA applications which are
using direct memory access to certain hardware registers. Under
VxWorks, this is not a problem as it lacks kernelspace/userspace
separation. Under Linux, I know I can do direct memory access (through
/dev/mem), but in this case I want to use the applications as they are,
with no change to the ADA code. Is there any way to do physical memory
access transparently wrt the application? Many thanks in advance.

Regards,

Utku

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

Re: A Question on Physical Memory Access from Applications

From: Andrew Johnson <hidden>
Date: 2001-08-08 14:32:20

"Karaaslan, Utku" wrote:
I have a problem: we've got a number of ADA applications which are
using direct memory access to certain hardware registers. Under
VxWorks, this is not a problem as it lacks kernelspace/userspace
separation. Under Linux, I know I can do direct memory access (through
/dev/mem), but in this case I want to use the applications as they are,
with no change to the ADA code. Is there any way to do physical memory
access transparently wrt the application? Many thanks in advance.
If you don't mind inserting some code into the application startup then
you could probably do something with mmap(), either with /dev/mem or
(safer) by writing your own kernel driver for the relevent hardware that
supports mmap()ing just the relevent physical range into user-space (and
makes it non-cacheable).  It might be possible to use LD_PRELOAD to do
this at startup without changing the application at all, although I
suspect you might have to make some changes to get the address of the
mmapped region - I'm not sure that you could guarantee to place it where
you want in virtual memory.

HTH,

- Andrew
--
The world is such a cheerful place when viewed from upside-down
It makes a rise of every fall, a smile of every frown

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

Re: A Question on Physical Memory Access from Applications

From: Rabeeh Khoury <hidden>
Date: 2001-08-08 21:24:50

Hi,

We had such a problem few months ago ; what we've done is allocating
contigious physical memory using kmalloc in kernel space.
 From the pointer that you get from kmalloc remove the 4 MSB bits
(usually 0xc) and pass it (some how) to the user space application.
The user space application map the address that was passed from the
kernel, and it will get another virtual contigious memory space.

Now the memory area that you have in user space is contigious AND the
physical memory that the page tables points to is contigious (because it
was allocated in kernel space using kmalloc), therfore it is enough that
your ADA applications just refer to the allocated memory using a pointer
to the virtual memory.

Regards,
Rabeeh


Karaaslan, Utku wrote:
I have ported the Linux bootloader/kernel to our home-made boards
(Motorola 860) and they have been running well up to now. However,
I have a problem: we've got a number of ADA applications which are
using direct memory access to certain hardware registers. Under
VxWorks, this is not a problem as it lacks kernelspace/userspace
separation. Under Linux, I know I can do direct memory access (through
/dev/mem), but in this case I want to use the applications as they are,
with no change to the ADA code. Is there any way to do physical memory
access transparently wrt the application? Many thanks in advance.
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help