>> >> > unsigned long * const pReg = (unsigned long*) 0XC0000000 ; >> >> > >> > printk( KERN_INFO"** read (%p) %08lX.\n", pReg, *pReg) ; >> > > I am assuming the processor you are running this on has an MMU (Memory > Management Unit). This statement: > > unsigned long * const pReg = (unsigned long*) 0XC0000000 ; > > will cause the variable pReg to contain the constant 0xC0000000. > > When *pReg is evaluated in your printk(), the MMU will load the unsigned long > located at virtual address 0xC0000000 into some processor register. How the > mapping of the virtual address to physical address occurs is processor specific, > but in Linux ultimately the physical address to get the data from will be > derived from a page table that provides a mapping between the physical and > virtual addresses of 4KB (usually 4KB) pages . > Jeff, Thanks for your kind explanation. I understand now your comment. Yes you are right when you are in user space. However in a kernel module this would be physical address. I test on an embedded Linux board but I translated the problem to a PC which everyone can test. 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. The physical 0x00100000 is the Linux load address - see /proc/iomap. It was previously discussed on this group: (http://lists.kernelnewbies.org/pipermail/kernelnewbies/2011-October/003483.html) When I try to dereference it (physical level) I get the error listed in my first post and Linux kills my module (or if it is installed as a driver kills the application which uses the driver). I guess it is normal because this address range is already mapped by Linux - in virtual address Linux starts at 0xC0000000. By using ioremap I can ask for a second map of this physical address and I can dereference it without getting killed. To get back to my initial question I'd like to be able to check this status before dereferencing the physical address and avoid to be killed if the address is already mapped :) Are there any kernel calls allowing me to do so ? Thanks, Stephan. _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies