<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/329</link>
<title><![CDATA[linux内核扩展模块编译tun.ko-源码版本不匹配问题解决]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[linux操作系统]]></category>
<pubDate>Fri, 05 Jul 2013 17:32:13 +0000</pubDate> 
<guid>http://www.snooda.com/read/329</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;最近arm盒子想用下tun功能。结果发现内核编译时没开tun，所以决定编译一个。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;先去找到了当前内核的config文件。打开了tun支持。下一步就是去找内核的源码。找了半天。发现没有完全一样的。于是找了个版本相近的，编译完载入。显然加载不了。提示insmod: error inserting 'tun.ko': -1 Invalid module format。在dmesg里提示tun: no symbol version for module_layout。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;很多资料在这里提示没有Module.symvers云云。但我的编译目录是有这个文件的。所以不是这个问题。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;由于内核源码版本和当前内核版本并不完全一致。所以尝试关闭CONFIG_MODVERSIONS。编译后加载。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;insmod依旧提示invalid module format。dmesg里改为提示version magic 'xxxxxxxxxxxxxxxxxxxxxx' should be 'xxxxx'。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;modprobe是可以强制忽略version magic的。即--force-vermagic参数，使用后成功载入tun.ko。由于内核源码非常相近。故工作正常。<br/>&nbsp;&nbsp;&nbsp;&nbsp;查阅了一下2.4内核源码中对CONFIG_MODVERSIONS的说明，该参数有四种可能。即内核是否开启与要加载的扩展是否开启2*2。经观察发现在3时代内核上这个特性跟之前的文档不太一致。由于时间关系没有详细研究。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;modprobe还有个参数，即--force-modversion。是在编译时开启了CONFIG_MODVERSIONS的情况下忽略接口不一致的。这个参数没有实验。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;也就是说如果想给一个内核编译扩展。最好的方式当然是找到当时编译的环境。或者编译一个新内核+扩展给系统装上。但现实中往往无法这样做。这时找到相近的源码编译。最后强制载入也就行了。（生产环境不推荐）<br/><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;happy，tun可以用了。<br/>Tags - <a href="http://www.snooda.com/tags/tun/" rel="tag">tun</a> , <a href="http://www.snooda.com/tags/%25E5%2586%2585%25E6%25A0%25B8/" rel="tag">内核</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/329#blogcomment129</link>
<title><![CDATA[[评论] linux内核扩展模块编译tun.ko-源码版本不匹配问题解决]]></title> 
<author>John &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 07 Nov 2013 02:42:11 +0000</pubDate> 
<guid>http://www.snooda.com/read/329#blogcomment129</guid> 
<description>
<![CDATA[ 
	你好，楼主，很高心看到你分享的文章。我最近也在arm板linux下使用tun功能，将PC机上运行的tunnel程序移植到ARM板上使用，移植过来后，发现创建的tun接口能够从内核TCP/IP协议栈发送IP数据出去，但不能反方向的接收。不知道你遇到这样的问题没有
]]>
</description>
</item>
</channel>
</rss>