Re: Calling function from address

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

 



For ARM, MMU info can be found here:

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0333h/Babbhigi.html

That is the theory behind MMU in ARM....but if u want the high level API, look
 under the arch/arm/mm directory lots of examples there.   Otherwise u
might try the following steps as proposed by "Marco Wang" - google for
it.   To quote:

phys_to_virt() only works with directly mapped physical address. I
don't think using phys_to_virt() is the best idea, anyway. Usually you
do this in several steps in a device driver:

1. Call request_mem_region() to request virtual memory region;
2. Call ioremap() to map physical address to virtual address;
3. Read/write mapped virtual address by using iowriteXX() /
ioreadXX(), etc. Here XX can be 8, 16, or 32 for example, represents
bit width.
4. Call iounmap() and release_mem_region() to release memory mapping;

Thanks,
Marco Wang

On Fri, Jun 10, 2011 at 3:46 PM, Micha M. <kernelnewbies@xxxxxxxxxxx> wrote:
> On Fri, Jun 10, 2011 at 07:30:46AM +0800, Gavin Guo wrote:
>> > So maybe I have to explain some more. There is some code located in the
>> > pysical address space and I need to call it from a kernel module. The
>> > problem is, that the code must be run from that location it is stored (it
>> > contains absolute jumps). So I'd like to be able to run that code in that
>> > address space, or to "tell" the keeernel to ignore page faults/memory
>> > protection on a certain address range, so that I can jump there run the
>> > code and return to the caller (kernel module)
>>
>> What is the architecture do you use? ex: x86, arm, mips,...
>
> ARM.
>
>> I know in some platform like andes, it is possible to turn off the
>> virtual memory.
>> Then you can jump to the physical address. After doing what you want, turning on
>> virtual memory again. Finally, system return to the normal operation.
>> However, the
>> code is a little tricky. Before turning off the virtual memory, you
>> must lock the
>> code jumping to physical address in cache. Otherwise, behaviors, after
>> turning off
>> the cache, is unpredictable.
>>
>> Gavin Guo
>


-- 
Regards,
Peter Teoh

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[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