How can I test if a physical address is already mapped or not.

Jeff Haran jharan at bytemobile.com
Tue Oct 18 21:16:07 EDT 2011


> -----Original Message-----
> From: StephanT [mailto:stman937-linewbie at yahoo.com]
> Sent: Tuesday, October 18, 2011 6:01 PM
> To: Jeff Haran; kernelnewbies
> Subject: Re: How can I test if a physical address is already mapped or not.
> 
> 
> 
> >>  Yes you are right when you are in user space. However in a kernel
> >>  module this would be physical address.
> >
> > Nope. Unless you are using some really strange processor that I am not
> familiar
> > with, a memory read is a memory read. *pReg is going to read what's at
> > virtual address 0xc0000000 regardless of whether you are executing in user
> or
> > kernel context. I know it's going to work this way on a PC with an Intel x86
> > processor.
> >
> 
> 
> OK, but how do you explain I can read 0xC0000000 and I get kicked out if
> I try 0x00100000.

I can only assume that there is nothing mapped to virtual address 0x00100000. On a 32 bit PC, the bottom 3 GB of virtual memory is by default mapped to user space, so if anything you are accessing memory in the current process' virtual memory.

> 
> >>  The 0xC0000000 falls under PCI address range. I guess on a PC Linux
> >>  just doesn't map this address range or it maps it one2one (phys==virt)
> >>  I can dereference this address and I get something plausible.
> >
> > On most 32 bit Intel processors running "standard" Linux 0xC0000000 is
> > the first address of kernel VM. This is a function of kernel configuration, but
> > it's this way by default. It's still a virtual address. So yes, on your
> > PC virtual address 0xC0000000 is mapped to physical RAM.
> >
> 
>
> Would this mean by reading the 0xC0000000 I am reading the Linux code not
> PCI registers?

First part of the page table, I think. I don't really remember what the kernel maps down there but I don't think its code.
Read the Gorman book. It's a lot to get through, but you'll likely learn a lot. There might even be something newer out there.

Jeff Haran






More information about the Kernelnewbies mailing list