Hi Dave,<br><br>Thanks for reply. My English is not very good, and so I want to ask about a term:map. Does map mean that create a relationship between the virtual space and physical memory?<br><br>Thanks again!<br><br><div class="gmail_quote">
在 2012年4月18日 下午4:17,Dave Hylands <span dir="ltr">&lt;<a href="mailto:dhylands@gmail.com">dhylands@gmail.com</a>&gt;</span>写道:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi ,<br>
<div><div class="h5"><br>
On Wed, Apr 18, 2012 at 12:44 AM, 夏业添 &lt;<a href="mailto:summerxyt@gmail.com">summerxyt@gmail.com</a>&gt; wrote:<br>
&gt; Hi everyone,<br>
&gt;<br>
&gt; there are some functions can alloc memory in kernel, but it seems that I<br>
&gt; cannot use it directly. Here is my code:<br>
&gt;<br>
&gt; static int mytest_vm(){<br>
&gt;<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct vm_struct *v_start;<br>
&gt;<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_start=alloc_vm_area(PAGE_SIZE,NULL); //the kernel api has changed,<br>
&gt; I don&#39;t understand why there is a second parameter<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(v_start==NULL){<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printk(&quot;cannot alloc page\n&quot;);<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt;<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprintf((char *)v_start-&gt;addr,&quot;this is a test.\n&quot;);<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printk(&quot;after sprintk:%s&quot;,(char *)v_start-&gt;addr);<br>
&gt;<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free_vm_area(v_start);<br>
&gt;<br>
&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
&gt; }<br>
&gt; module_init(mytest_vm);<br>
&gt;<br>
&gt; but it just got a kernel Oops. Can anyone explain this to me? Thanks very<br>
&gt; much!<br>
<br>
</div></div>If my understanding of things is correct, this just allocates virtual<br>
space. That virtual space isn&#39;t backed by any physical pages.<br>
<br>
The normal kernel allocators are things like kmalloc and vmalloc.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Dave Hylands<br>
Shuswap, BC, Canada<br>
<a href="http://www.davehylands.com" target="_blank">http://www.davehylands.com</a><br>
</font></span></blockquote></div><br>