- 论坛徽章:
- 0
|
On Mon, 2005-01-31 at 15:22 +0200, Ilan Finci wrote:
> I have some questions that might be the problem:
>
> 1. I didn't find anything about PageReserved(). Before I call the
> remap_page_range function, I set:
> vma->vm_flags = VM_RESERVED;
>
> is this the same?
Ilan Hi !
No. It's not the same. You should be using PG_Reserved (see the macro
SetPageReserved) *on each page* you want to map !
Also, you probably want to do this while initializing the driver... so
no vma's here...
> 2. I've tried to implement the nopage method, but got the exact same
> results (board hangs).
Both should work once you remap the pages and mark the them reserved (so
those are not swapped-out, etc.)
Though the nopage method may give you a bit more flexibility...
But, as you are using the card's memory, you probably don't need it.
> Do I need to call anything else before I can access the RAM at this
> address? Do I need to do ioremap (as I do before I can access the CPU's
> configurations)? and then, pass the resulted address to the
> remap_page_range function as the address?
Exactly. Also, make sure you use the phys or bus address, not the
virtual one. (Again, during init)
> 3, Is the way I'm trying to work, implementing mmap to give the user's
> application access to specific range of RAM the right way, or there is a
> better (or more correct) way to handle this?
If you want to provide the user with direct access to that memory, it's
fine.
Otherwise, you could implement some primitives in kernel space, and make
those accessible via ioctl.
Hope this helps !
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11445/showart_112031.html |
|