<p dir="ltr">Kernel physical addr : 0x32d01fe0<br>
Platform phys offset : 0x30000000<br>
Page offset : 0xc0553fb4</p>
<p dir="ltr">The page offset looks weird, since 32bit kernel has 2/2 or 3/1 or 1/3 user/kernel virtual address  split. It is not reasonable to have 0xc0553fb4 as page offset. You should c0000000 for 3/1 split.</p>
<div class="gmail_quote">2014/9/13 下午8:59 於 &quot;mind entropy&quot; &lt;<a href="mailto:mindentropy@gmail.com">mindentropy@gmail.com</a>&gt; 寫道:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sat, Sep 13, 2014 at 2:01 PM, Miles MH Chen &lt;<a href="mailto:orca.chen@gmail.com">orca.chen@gmail.com</a>&gt; wrote:<br>
&gt; Hi,<br>
&gt;<br>
&gt; Do you know the value of PHYS_OFFSET of your platform?<br>
&gt; PHYS_OFFSET defines the starting physical address of your DRAM.<br>
&gt;<br>
&gt; physical address = kmalloc&#39;ed address - PAGE_OFFSET + PHYS_OFFSET<br>
&gt;<br>
&gt; MH<br>
&gt;<br>
&gt; On Sat, Sep 13, 2014 at 4:02 PM, mind entropy &lt;<a href="mailto:mindentropy@gmail.com">mindentropy@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt;<br>
&gt;&gt;   I want to know the physical address [just for debugging and info.Not<br>
&gt;&gt; for DMA etc] of a particular virtual address allocated via kmalloc.<br>
&gt;&gt;<br>
&gt;&gt;    I am running the below code on S3C2440 with 64MB of RAM. The<br>
&gt;&gt; /proc/meminfo returns<br>
&gt;&gt;<br>
&gt;&gt; MemTotal:          59164 kB<br>
&gt;&gt; MemFree:           35884 kB<br>
&gt;&gt; MemAvailable:      47148 kB<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;   I run the following module for printing the addresses. [This module<br>
&gt;&gt; is only for test. So excuse if I have cut corners].<br>
&gt;&gt;<br>
&gt;&gt; ------------------------------------------------<br>
&gt;&gt;<br>
&gt;&gt; #include &lt;linux/init.h&gt;<br>
&gt;&gt; #include &lt;linux/kernel.h&gt;<br>
&gt;&gt; #include &lt;linux/printk.h&gt;<br>
&gt;&gt; #include &lt;linux/module.h&gt;<br>
&gt;&gt; #include &lt;linux/gfp.h&gt;<br>
&gt;&gt; #include &lt;linux/types.h&gt;<br>
&gt;&gt; #include &lt;linux/mm.h&gt;<br>
&gt;&gt; #include &lt;linux/mm_types.h&gt;<br>
&gt;&gt; #include &lt;linux/slab.h&gt;<br>
&gt;&gt;<br>
&gt;&gt; static int vm_mem_test_init(void)<br>
&gt;&gt; {<br>
&gt;&gt;<br>
&gt;&gt;     void *km;<br>
&gt;&gt;<br>
&gt;&gt;     printk(KERN_ALERT &quot;vm mem test init\n&quot;);<br>
&gt;&gt;<br>
&gt;&gt;     km = kmalloc(1,GFP_KERNEL);<br>
&gt;&gt;<br>
&gt;&gt;     if(km == NULL) {<br>
&gt;&gt;         printk(KERN_ALERT &quot;Could not kmalloc\n&quot;);<br>
&gt;&gt;         return -1;<br>
&gt;&gt;     } else {<br>
&gt;&gt;         printk(KERN_ALERT &quot;Allocated\n&quot;);<br>
&gt;&gt;         printk(KERN_ALERT &quot;Virtual addr : %x\n&quot;,(unsigned int)km);<br>
&gt;&gt;         printk(KERN_ALERT &quot;Kernel physical addr :<br>
&gt;&gt; 0x%x\n&quot;,virt_to_phys(km));<br>
&gt;&gt;         kfree(km);<br>
&gt;&gt;     }<br>
&gt;&gt;<br>
&gt;&gt;   return 0;<br>
&gt;&gt;<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; The output for the following is:<br>
&gt;&gt;<br>
&gt;&gt; Virtual addr : c2c080e0<br>
&gt;&gt; Kernel physical addr : 0x32c080e0<br>
&gt;&gt;<br>
&gt;&gt; -----------------------------------------------------------<br>
&gt;&gt;<br>
&gt;&gt; The kernel physical address is wrong as I only have 64MB. Should I be<br>
&gt;&gt; doing a kernel page table walk to get the associated physical address?<br>
&gt;&gt;<br>
&gt;&gt; Thanks<br>
&gt;&gt; Gautam.<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Kernelnewbies mailing list<br>
&gt;&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;<br>
&gt;<br>
<br>
Miles,<br>
<br>
  I tried printing it. The output is as follows:<br>
<br>
Kernel physical addr : 0x32d01fe0<br>
Platform phys offset : 0x30000000<br>
Page offset : 0xc0553fb4<br>
<br>
The S3C2440 is an ARM9TDMI processor.<br>
<br>
<br>
-Gautam.<br>
</blockquote></div>