<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>开发 &#8211; 张三太爷</title>
	<atom:link href="https://www.somedoc.net/tag/%E5%BC%80%E5%8F%91/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.somedoc.net</link>
	<description>看前面，黑洞洞</description>
	<lastBuildDate>Mon, 29 Dec 2014 15:16:39 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://www.somedoc.net/wp-content/uploads/2016/12/cropped-dandycheung-1-32x32.jpg</url>
	<title>开发 &#8211; 张三太爷</title>
	<link>https://www.somedoc.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ubuntu 下小度 Wifi 的 64 位驱动</title>
		<link>https://www.somedoc.net/2014/12/29/ubuntu-%e4%b8%8b%e5%b0%8f%e5%ba%a6-wifi-%e7%9a%84-64-%e4%bd%8d%e9%a9%b1%e5%8a%a8/</link>
					<comments>https://www.somedoc.net/2014/12/29/ubuntu-%e4%b8%8b%e5%b0%8f%e5%ba%a6-wifi-%e7%9a%84-64-%e4%bd%8d%e9%a9%b1%e5%8a%a8/#comments</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Mon, 29 Dec 2014 15:16:39 +0000</pubDate>
				<category><![CDATA[[未分类]]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[小度 Wifi]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[无线网卡]]></category>
		<guid isPermaLink="false">http://www.somedoc.net/?p=2994</guid>

					<description><![CDATA[我们已经知道，小度Wifi 使用的芯片是 MT7601U，网 <a href="https://www.somedoc.net/2014/12/29/ubuntu-%e4%b8%8b%e5%b0%8f%e5%ba%a6-wifi-%e7%9a%84-64-%e4%bd%8d%e9%a9%b1%e5%8a%a8/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>我们已经知道，小度Wifi 使用的芯片是 MT7601U，网上能够找到的对应驱动的源代码包名为 D-PO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2，有的下载链接里没有那个减号。</p>
<p>这个源代码要想能够编译成功，要针对几个问题进行修订（共涉及 4 个文件）：<br />
1、增加小度 Wifi 的识别；<br />
2、对 64 位系统兼容。</p>
<p>首先是增加小度 Wifi 的识别。这个需要对 common/rtusb_dev_id.c 进行改动，在 {USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */ 这一行下新增以下三行代码：<br />
	{USB_DEVICE(0x2955,0x0001)}, /* XiaoDu Wifi */<br />
	{USB_DEVICE(0x2955,0x1001)}, /* XiaoDu Wifi */<br />
	{USB_DEVICE(0x148f,0x760b)}, /* 360 Wifi */<br />
能看出来，支持的小度 Wifi 有两个版本，最后一行是对 360 Wifi 进行支持的（未测试）。</p>
<p>对 common/mlme.c 作一个小修订，找到 MlmeResetRalinkCounters 函数，把原来的 (UINT32)&#038;pAd->RalinkCounters.OneSecEnd &#8211; (UINT32)&#038;pAd->RalinkCounters.OneSecStart) 语句修改为 (UINT32)(&#038;pAd->RalinkCounters.OneSecEnd &#8211; &#038;pAd->RalinkCounters.OneSecStart) 即可，这是一个指针差的计算，原来的前强转后相减，在 32 位系统上问题不大，在 64 位系统上则会产生错误。</p>
<p>接下来要修改 include/os/rt_linux.h，主要涉及到对数据包的数据结构进行访问的几个操作宏，把：<br />
#define GET_OS_PKT_DATATAIL(_pkt) \<br />
		(RTPKT_TO_OSPKT(_pkt)->tail)<br />
#define SET_OS_PKT_DATATAIL(_pkt, _start, _len)	\<br />
		((RTPKT_TO_OSPKT(_pkt))->tail) = (PUCHAR)((_start) + (_len))<br />
改为<br />
#define GET_OS_PKT_DATATAIL(_pkt) \<br />
		(skb_tail_pointer(RTPKT_TO_OSPKT(_pkt)))<br />
#define SET_OS_PKT_DATATAIL(_pkt, _start, _len)	\<br />
		(skb_set_tail_pointer(RTPKT_TO_OSPKT(_pkt), \<br />
		(int)((_start) &#8211; GET_OS_PKT_DATAPTR(_pkt)) + (_len)))<br />
，再把：<br />
#define GET_OS_PKT_END(_pkt) \<br />
		(RTPKT_TO_OSPKT(_pkt)->end)<br />
改为<br />
#define GET_OS_PKT_END(_pkt) \<br />
		(skb_end_pointer(RTPKT_TO_OSPKT(_pkt)))<br />
，即可。</p>
<p>最后修改 os/linux/rt_linux.c。定位到函数 duplicate_pkt，把其中的两处 skb->tail 改为 GET_OS_PKT_DATATAIL(skb)。定位到函数 ClonePacket，把：<br />
		pClonedPkt->dev = pRxPkt->dev;<br />
		pClonedPkt->data = pData;<br />
		pClonedPkt->len = DataSize;<br />
		pClonedPkt->tail = pClonedPkt->data + pClonedPkt->len;<br />
改为<br />
		SET_OS_PKT_NETDEV(pClonedPkt, pRxPkt->dev);<br />
		SET_OS_PKT_DATAPTR(pClonedPkt, pData);<br />
		SET_OS_PKT_LEN(pClonedPkt, DataSize);<br />
		SET_OS_PKT_DATATAIL(pClonedPkt, pData, DataSize);<br />
。定位到函数 wlan_802_11_to_802_3_packet，把：<br />
	pOSPkt->dev = pNetDev;<br />
	pOSPkt->data = pData;<br />
	pOSPkt->len = DataSize;<br />
	pOSPkt->tail = pOSPkt->data + pOSPkt->len;<br />
改为<br />
	SET_OS_PKT_NETDEV(pOSPkt, pNetDev);<br />
	SET_OS_PKT_DATAPTR(pOSPkt, pData);<br />
	SET_OS_PKT_LEN(pOSPkt, DataSize);<br />
	SET_OS_PKT_DATATAIL(pOSPkt, pData, DataSize);<br />
。定位到函数 RtmpOsSetPacket，把：<br />
	pOSPkt->dev = pNetDev;<br />
	pOSPkt->data = pData;<br />
	pOSPkt->len = DataSize;<br />
	pOSPkt->tail = pOSPkt->data + pOSPkt->len;<br />
改为<br />
	SET_OS_PKT_NETDEV(pOSPkt, pNetDev);<br />
	SET_OS_PKT_DATAPTR(pOSPkt, pData);<br />
	SET_OS_PKT_LEN(pOSPkt, DataSize);<br />
	SET_OS_PKT_DATATAIL(pOSPkt, pData, DataSize);<br />
。定位到函数 send_monitor_packets，把：<br />
		skb_put(pOSPkt, (pData &#8211; pOSPkt->data));<br />
		skb_pull(pOSPkt, (pData &#8211; pOSPkt->data));<br />
改为<br />
		skb_put(pOSPkt, (pData &#8211; GET_OS_PKT_DATAPTR(pOSPkt)));<br />
		skb_pull(pOSPkt, (pData &#8211; GET_OS_PKT_DATAPTR(pOSPkt)));<br />
。定位到函数 __RtmpOSFSInfoChange，把：<br />
		pOSFSInfo->fsuid = current_fsuid();<br />
		pOSFSInfo->fsgid = current_fsgid();<br />
改为<br />
		pOSFSInfo->fsuid = current_fsuid().val;<br />
		pOSFSInfo->fsgid = current_fsgid().val;<br />
。至此，所有修改完毕。</p>
<p>正常 make，sudo make install，然后再 sudo modprobe mt7601Usta 即可。</p>
<p>试用的感觉，这个驱动的效率应该很低。难道是我没有生成 release 的版本？</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2014/12/29/ubuntu-%e4%b8%8b%e5%b0%8f%e5%ba%a6-wifi-%e7%9a%84-64-%e4%bd%8d%e9%a9%b1%e5%8a%a8/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>正确引用 Android Support v7 兼容支持库</title>
		<link>https://www.somedoc.net/2014/10/03/%e6%ad%a3%e7%a1%ae%e5%bc%95%e7%94%a8-android-support-v7-%e5%85%bc%e5%ae%b9%e6%94%af%e6%8c%81%e5%ba%93/</link>
					<comments>https://www.somedoc.net/2014/10/03/%e6%ad%a3%e7%a1%ae%e5%bc%95%e7%94%a8-android-support-v7-%e5%85%bc%e5%ae%b9%e6%94%af%e6%8c%81%e5%ba%93/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Fri, 03 Oct 2014 02:15:52 +0000</pubDate>
				<category><![CDATA[[未分类]]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[备忘]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[技术]]></category>
		<guid isPermaLink="false">http://www.somedoc.net/?p=2956</guid>

					<description><![CDATA[这个问题昨天下午折腾了我老人家一下午，手动进行了各种组合，最 <a href="https://www.somedoc.net/2014/10/03/%e6%ad%a3%e7%a1%ae%e5%bc%95%e7%94%a8-android-support-v7-%e5%85%bc%e5%ae%b9%e6%94%af%e6%8c%81%e5%ba%93/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>这个问题昨天下午折腾了我老人家一下午，手动进行了各种组合，最终得以解决。现将步骤严格记录于此，以作备忘。</p>
<p>一、环境及前提<br />
1、Windows 7/Mac OS X 10.9；<br />
2、Eclipse 4.4.1（Luna）；<br />
3、ADT 23.0.3；<br />
4、Android Support Library 已经用 Android SDK Manager 下载完毕。</p>
<p>二、创建可引用的工程 android-support-v7-appcompat<br />
1、打开 eclipse，从 File 菜单选择 Import&#8230;；<br />
2、在想到中选择 Android 下的 Existing Android Code Into Workspace，点击 Next；<br />
3、点击 Root Directory 行尾的 Browse 按钮，选中 <SDK>\extra\android\compatibility\v7\appcompat，确定；<br />
4、在向导中点击 Finish，则一个名为 android-support-v7-appcompat 的工程会出现在 Package Explorer 中；<br />
5、在工程名上右击，打开关联菜单，选择 Properties；<br />
6、在 Properties 对话框左侧点选 Android 条目，此时右侧的 Project Build Target 列表中将列出 SDK 目录下所有已安装的条目，找到列表框下的 Is Library 的复选框（如果安装了很多版本的 SDK，则可能需要拖动滚动条才能看见此复选框）；<br />
7、将 Is Library 复选框点选为选中状态；<br />
8、点击 OK 确定。</p>
<p>三、配置要引用的工程<br />
1、在此工程名上，执行上面的 5、6 两个步骤；<br />
2、点击 Is Library 复选框下一行尾的 Add&#8230; 按钮，在弹出的 Project Selection 对话框中选中 android-support-v7-appcompat 并点击 OK 确认；<br />
3、点击 OK 关闭 Properties 对话框；<br />
4、至此，android-support-v7-appcompat.jar 应该出现在工程中的 Android Dependencies 文件夹下；<br />
5、而 Android Private Libraries 文件夹下则会出现 android-support-v7-appcompat.jar 和 android-support-v4.jar；<br />
6、请确保工程中没有以其他的形式对 5 中提到的两个 jar 进行引用设置；<br />
7、如果 eclipse 的 console 视图中出现类似于 styles_base.xml:24: error: Error retrieving parent for item: No resource found that matches the given name &#8216;android:Widget.Holo.ActionBar&#8217; 这样的错误，请将 AndroidManifest.xml 中的 minSdkVersion 和 targetSdkVersion 值调整为 7。</p>
<p>四、释疑和备注<br />
之所以要创建一个新的工程以供引用，主要原因在于 SDK 中提供的 jar 需要额外的资源文件，这些资源文件会被新工程包含进来，这样才能被引用工程使用到。</p>
<p>开始一直失败，主要在于 三.2 的步骤没有正确执行，而是一直在 Java Build Path 中配置；而没有正确执行的主要原因就在于三太爷的 SDK 版本太全，以至于 Project Build Target 列表把 Is Library 撑到了可视范围之外。基于此，还一度怀疑被引用的工程创建的有问题，在 Import 环节上做了很多次尝试，例如选择 General 下的 Archive 模式或者 Existing Projects Into Workspace，由此更是走到了邪路上。</p>
<p>要验证在引用的工程中配置是否正确非常简单，查看 三.4 和 三.5 中的三个文件的路径即可。对于 Android Dependencies 文件夹下的 android-support-v7-appcompat.jar，它是被引用的工程的输出，因此鼠标指针悬停于其上时，补全显示的全路径最后应该是 bin；而 Android Private Libraries 文件夹下的 android-support-v7-appcompat.jar 和 android-support-v4.jar，是被引用工程的引用，因此其显示的全路径最后应该是 libs，位于 SDK 目录之下。当然，更简单的验证方法就是工程是否能够编译成功。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2014/10/03/%e6%ad%a3%e7%a1%ae%e5%bc%95%e7%94%a8-android-support-v7-%e5%85%bc%e5%ae%b9%e6%94%af%e6%8c%81%e5%ba%93/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
