在Linux下使用“360随身WiFi 2”

某人说“360随身WiFi”价格还算良心,我也认同。昨天无意中看到2代开售,就随手撸了一个。当然,为了免邮费,不得不买了点别的东西凑单,于是还买了本价格是这个“360随身WiFi 2”近两倍《C语言点滴》回来看看。

到货,插到电脑上,Linux下没反应。Ralink的无线网卡系统不自带驱动我不惊呆,于是lsusb看了下。

Bus 001 Device 006: ID 148f:760b Ralink Technology, Corp.

好嘛,二代换芯片了,原来是RT5370的,现在换成不认识的了。不怕,把148f:760b放狗搜一下。不过搜完了就怕了,因为结果是0个。

打算先用Windows确认一下设备是好的,结果装了360官网的驱动后发现设备完全识别不出来……这可真是个大乌龙。到360官网的歪粉交流论坛上看看,有类似问题的看来不是个案。换了论坛上公布的新版本的驱动后Windows下工作正常。(截止我写这篇文章的时候,官网上的驱动已经更新成新的了,文件大小为10797000字节,论坛上讨论说设备识别不出来的那些贴子貌似也都直接消失了。)

继续回到Linux下折腾,可是不知道芯片是什么还是为难。从Ralink网站(现在叫Mediatek)上瞎找了几个Linux驱动,里面也没有符合760b这个idProduct的,抓瞎。

用百度搜了一下148f:760b,结果找到了360论坛上一篇新觧出炉的贴子,确认了芯片是MT7601。

剩下的事就简单了,在Ralink网站下载MT7601的Linux驱动,修改common/rtusb_dev_id.c文件,在

{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */

下面加一行

{USB_DEVICE(0x148f,0x760b)}, /* 360 Wifi */

按照README_STA_usb中的说明make和make install。然后modprobe一下mt7601Usta.ko这个内核模块,后面的事就妥妥的了。

还有个遗留问题,连不上WPA2 Enterprise的无线网络,暂时不管了,我对这个需求不强烈。

啥?这文章只说了怎么驱动这个网卡没说怎么在Linux实现AP的功能?哦,我本来也没打算用它在Linux下做AP来着。有兴趣的话可以试试hostapd/dnsmasq/iptables这老三样吧,我不知道能不能行,如果哪位朋友弄成了麻烦汇报一下,我很想学习学习,多谢了~

2013-10-12更新:MT7601的Linux驱动中似乎没有实现nl80211的接口,所以hostapd没法直接用。不知道还有什么办法能实现AP的功能,如有朋友知道,希望能不吝指教。

2014-08-12更新:留言区中的轩辕志瑜同学找到了一个支持AP模式的驱动,详细的信息请查看相关的文章:http://blog.csdn.net/sumang_87/article/details/38168877,github上的源代码:https://github.com/eywalink/mt7601u。感谢他的分享。

2015-03-12更新:如果是在Raspberry Pi上尝试编译驱动并且遇到困难,请参考《为Raspberry Pi 2编译内核模块

用Raspberry Pi打造真正的“豆瓣FM”

想用床头的收音机收听豆瓣FM吗?如果你有一台Raspberry Pi,这个愿望就可以满足。

Raspberry Pi,中文名树莓派,是一台廉价的单板机,ARM架构,可以运行Linux操作系统,它由英国的树莓派基金会开发,目的是以低价硬件及自由软件促进校园中的计算机科学教育。是的,它设计初衷其实是给小朋友们学电脑用的,不是给你们这些Geek来折腾玩的。

用Raspberry Pi搭建一个豆瓣FM的调频广播台其实并不是一件很困难的事情,为实现这个目标,要解决的两个问题是:

  • 从豆瓣FM网站上下载MP3音乐码流并解码
  • 把音频信号调制成调频信号发射出去

造轮子的事情不要自己做,这两个问题其实已经都解决了:Github上的fmd项目实现了一个通过本地声卡播放豆瓣FM的服务器;这篇文章则介绍了如何写程序对音频信号进行调制并控制Raspberry Pi的GPIO端口把信号发送出去。所以剩下的事就是把它们组合起来就可以了。

组合代码这种脏活累活我也给大家做好了,可以从Github上获取。嗯,这份代码目前的质量是It just works,各位make一下就好,没事就不要vim它了……

git clone git://github.com/lifanxi/fmd.git

代码下载后在Raspberry Pi上可以直接make编译,如果缺少依赖,可能需要安装libcurl4-openssl-dev, libjson0-dev, libmpg123-dev, libao-dev这些依赖包(我用的是Raspbian发行版)。

fmd的使用方法可以参考Github上的说明,我所实现的扩展就是在fmd.conf配置文件中可以把driver配成”pifm”,然后把device配成88MHz~108MHz之间的某个指定的调频发射频率值(这是大多数国家调频收音机所支持的频率范围,如果你有别的无线电接收设备,这个值也可以设成是<250的任意值)来实现FM广播的发射。当driver配成pifm而不是默认的alsa时,fmd就会工作在FM广播模式。

注意,由于FM发射的代码需要直接mmap /dev/mem设备,所以把driver配成pifm让fmd工作在FM广播模式时,需要以root权限来执行fmd。以root权限运行fmd时,注意HOME目录可能会变成/root,所以相关配置文件也得改放到/root/.fmd中。

fmd运行起来后,按照文档的说明,可以telnet到127.0.0.1:10098上或用fmc执行play命令开始广播,把收音机(带收音功能的手机当然也可以)调到device参数所指定的频率上就可以收听了。

如果你的收音机离你的Raspberry Pi太远,收音效果不好,可以在Raspberry Pi主板上的GPIO 4口上插一根20cm左右长的杜邦线做天线,广播范围和信号强度就会大大提高了。

Raspberry Pi正在102.4 MHz上播放豆瓣FM的音乐

Raspberry Pi正在102.4 MHz上播放豆瓣FM的音乐

目前这个豆瓣FM广播台还有两个大问题需要解决:

  • 立体声调频广播:现在实现的版本是单声道的,理论上应该也可以把音频调制成立体声的。这需要一些我所不具备的调频广播的知识,待我有空再钻研钻研。
  • CPU占用率:现在的版本在做调制和发射时,对CPU的占用率比较高。如果Raspberry Pi正在忙于做别的事情的话,你可能会听到一些杂音或者是唱机/磁带机没电了的时候的音响效果。

其实吧,这样收听豆瓣FM可真是多此一举。直接把耳机插在Raspberry的耳机插孔用fmd播放不就完事了么……天行健,君子以折腾不息!

yum复活

今天想用yum安装一个新的包,但是忽然发现yum命令一执行就hang在那里。Ctrl+c都没法退出,只能kill -9。

查看了网络连接,也一切正常。

后怀疑也许是rpm db有问题,使用rm -f /var/lib/rpm/__db*清空rpm db数据。

然后用rpm -vv –rebuilddb重建数据库。

最后yum clean all把yum用到的cache都清空。

一切就又恢复正常了。

4G,64bit,PAE

        上周末把内存加到了4G,缘由是在正常的工作环境下:win7下开着Outlook、Communicator,IE,Firefox,VMware或者某个IDE,后台运行着MSE、有道词典、wakoopa、Evernote、gae代理,进程总数70+,内存使用率会80%+,实在是高了点,而且Aero,这些特性都是关掉的。为了缓解这种情况,所以买了两根Kingston 2G 800,不过由于Intel GM965的白皮书上写着只支持DDR2 667和533,如下图,所以那两根条子是降频运行在667频率上的:

gm965_mem

CPU-Z检测出来为332.5MHz,因为是DDR,乘以2就是667.

dram_fre

如何使得内存工作在800Mhz呢?一开始我想使用SetFSB和SPD tool超频(overlook),说起SetFSB,还有个好玩的事情,若干年前好像就有中国用户fool了SetFSB作者一把,现在还需要激活码才能使用,而且还会弹出警告信息,下图:

setfsb_warning

后来一想,我从T5500升级到T8100,性能提升已经很明显了,就算超到T9300肯定也改观不大,更关键的是,SetFSB似乎不支持GM965。不过作者一直在更新,说不定支持了。

“当然,无论是用ClockGen还是SetFSB,要改变外频就必须知道PLL的型号。然而市面上有上千种规格不同的东西,ClockGen的作者因为这件令人头痛的事情已经暂停发布很长时间了。目前市面上的PM965 ,GM965系列总共在使用十几种PLL晶振芯片,像主流大厂:惠普,宏基,富士通,东芝的965系列的笔记本主板上基本上都是用的ICS9LPR363DGLF这个型号。还有一些国内厂商比如神州,七喜为了降低成本,PM965主板上用的是SLG8SP510T等廉价芯片,比如神州的825D系列L23XT/L5X5T/L7XXT系列。这些晶振芯片在日本市场上很稀少,目前还没有被SETFSB支持,其作者也增加和改进中”

“能不能用,跟CPU无关,关键是此软件中是否包含你主板上频率发生器的型号?
ICS型号,在CPU跟北桥附近,类似于“9LPRS365BGLF”之类的”

盗用神舟论坛的一张图:ppl

内存的话,就算通过修改SPD信息,在主板不支持的情况下也是很不稳定的,而且我的BIOS好像有点老,上次待机的时候蓝屏,windows提醒我考虑一下升级BIOS。

bios

上面好像有点扯远了,附一张现在的截图,还是正常的工作环境,效果很明显,响应速度明显变快,就算是高峰的情况也不过是60%+22

系统属性页上的信息如下,上周顺带更新到了windows 7 sp1

23

 

        我装的是32位的windows 7,默认情况下实际会显示“4.00GB(2.99GB Usable)”,当然32位肯定也是能够支持超过4G的内存的,要不然那些运行着32位的OS的服务器怎么解释呢(服务器技术比普通PC技术起码领先5年。。)。

说起64位,为了赶时髦,在win7刚出RC的时候我就告别了xp,安装的却是windows server 2008 x64,而且为了支持CPUVT技术才去换的cpu,当时对服务器的东西比较感兴趣,想法也很奇怪,就想用用服务器硬件、系统,当时还折腾过vmware esxi(硬件不支持啊),xen server,hyper-v(家里的台式安装过)。

我当时装着双系统,另一个是CentOS 64位,后来换过Gentoo的x64版本。虽然是基于64位的硬件,但是并没有觉得64位的OS运行的更快,就算是现在,原生支持64位的软件也是比较少的,如果通过32位子系统(SysWoW64目录有印象的吧)运行32位的应用程序,速度反而会有些损失,还有驱动程序,不当当是硬件驱动程序,连For ODBC的许多数据库连接驱动很多都没有64位的,不过可以运行32位的ODBC数据源管理程序就是了。

同样的,在linux下,情况稍微好一点,因为很多package都是可以从source编译安装的,但是也会有些程序需要32位的library,这样又会浪费不少硬盘空间(lib,lib32,lib64目录),算起来,我的笔记本除了主板,像cpu,硬盘,内存,风扇,蓝牙都换掉了,光驱还没想好,找到一个改下螺丝接口就可以换上去的光驱,之前的光驱刻录了几百张后牺牲了;也许还可以买个光驱位的硬盘盒,原来的硬盘位置可以考虑加块SSD硬盘,这样启动加载OS就更快了,而且现在使用USB装系统方便多了。

平时说的64位,大多数时候指的是Intel 64 (EM64T / AMD64 / x86-64 / x64),还有安腾处理的IA64,除了在服务器上,基本上碰不到;64位的优势在于,

1.64位的地址空间,理论上可以支持2的64次方,16 Eb的内存;

  • 2.扩展的寄存器集(extended register set),我的理解是这样可以使得函数的调用惯例一致,而且参数,返回值的指针都可以通过寄存器来传递,这样效率更高而且可以避免一些传统的栈溢出的漏洞
  • 3.对于开发者来说,cpu指令集变化不算大,相当于做了个并集;
  • 4.能通过WoW64 (Windows-on-Windows 64)类似技术来向前兼容应用程序和操作系统
  • windows_mem                                                          Windows实际能支持的最大内存

    32位OS如何支持超过4G的内存呢?通过PAE(physical address exetension)就可以实现,具体原理可以参考这篇文章,讲的非常到位。

    我使用的是ReadyFor4GB这个工具,patch完成重启动后右下角会显示“测试模式”的水印,这样:test_mode不过可以通过另一个starforce工具来去掉,留着不也挺cool的。

    12

                                                                          选择去掉水印

    至于在linux下,就简单了,可以参考这篇文章,Ubuntu下直接sudo apt-get install linux-server,重启就OK了。

    123

                                                                 默认32位的Ubuntu也只识别了3G

    221

            安装linux-image-server,linux-headers-generic-pae,package的名称说明了其主要用途

    1

                                                                             正常识别了

     

    4G,64bit,PAE

            上周末把内存加到了4G,缘由是在正常的工作环境下:win7下开着Outlook、Communicator,IE,Firefox,VMware或者某个IDE,后台运行着MSE、有道词典、wakoopa、Evernote、gae代理,进程总数70+,内存使用率会80%+,实在是高了点,而且Aero,这些特性都是关掉的。为了缓解这种情况,所以买了两根Kingston 2G 800,不过由于Intel GM965的白皮书上写着只支持DDR2 667和533,如下图,所以那两根条子是降频运行在667频率上的:

    gm965_mem

    CPU-Z检测出来为332.5MHz,因为是DDR,乘以2就是667.

    dram_fre

    如何使得内存工作在800Mhz呢?一开始我想使用SetFSB和SPD tool超频(overlook),说起SetFSB,还有个好玩的事情,若干年前好像就有中国用户fool了SetFSB作者一把,现在还需要激活码才能使用,而且还会弹出警告信息,下图:

    setfsb_warning

    后来一想,我从T5500升级到T8100,性能提升已经很明显了,就算超到T9300肯定也改观不大,更关键的是,SetFSB似乎不支持GM965。不过作者一直在更新,说不定支持了。

    “当然,无论是用ClockGen还是SetFSB,要改变外频就必须知道PLL的型号。然而市面上有上千种规格不同的东西,ClockGen的作者因为这件令人头痛的事情已经暂停发布很长时间了。目前市面上的PM965 ,GM965系列总共在使用十几种PLL晶振芯片,像主流大厂:惠普,宏基,富士通,东芝的965系列的笔记本主板上基本上都是用的ICS9LPR363DGLF这个型号。还有一些国内厂商比如神州,七喜为了降低成本,PM965主板上用的是SLG8SP510T等廉价芯片,比如神州的825D系列L23XT/L5X5T/L7XXT系列。这些晶振芯片在日本市场上很稀少,目前还没有被SETFSB支持,其作者也增加和改进中”

    “能不能用,跟CPU无关,关键是此软件中是否包含你主板上频率发生器的型号?
    ICS型号,在CPU跟北桥附近,类似于“9LPRS365BGLF”之类的”

    盗用神舟论坛的一张图:ppl

    内存的话,就算通过修改SPD信息,在主板不支持的情况下也是很不稳定的,而且我的BIOS好像有点老,上次待机的时候蓝屏,windows提醒我考虑一下升级BIOS。

    bios

    上面好像有点扯远了,附一张现在的截图,还是正常的工作环境,效果很明显,响应速度明显变快,就算是高峰的情况也不过是60%+22

    系统属性页上的信息如下,上周顺带更新到了windows 7 sp1

    23

     

            我装的是32位的windows 7,默认情况下实际会显示“4.00GB(2.99GB Usable)”,当然32位肯定也是能够支持超过4G的内存的,要不然那些运行着32位的OS的服务器怎么解释呢(服务器技术比普通PC技术起码领先5年。。)。

    说起64位,为了赶时髦,在win7刚出RC的时候我就告别了xp,安装的却是windows server 2008 x64,而且为了支持CPUVT技术才去换的cpu,当时对服务器的东西比较感兴趣,想法也很奇怪,就想用用服务器硬件、系统,当时还折腾过vmware esxi(硬件不支持啊),xen server,hyper-v(家里的台式安装过)。

    我当时装着双系统,另一个是CentOS 64位,后来换过Gentoo的x64版本。虽然是基于64位的硬件,但是并没有觉得64位的OS运行的更快,就算是现在,原生支持64位的软件也是比较少的,如果通过32位子系统(SysWoW64目录有印象的吧)运行32位的应用程序,速度反而会有些损失,还有驱动程序,不当当是硬件驱动程序,连For ODBC的许多数据库连接驱动很多都没有64位的,不过可以运行32位的ODBC数据源管理程序就是了。

    同样的,在linux下,情况稍微好一点,因为很多package都是可以从source编译安装的,但是也会有些程序需要32位的library,这样又会浪费不少硬盘空间(lib,lib32,lib64目录),算起来,我的笔记本除了主板,像cpu,硬盘,内存,风扇,蓝牙都换掉了,光驱还没想好,找到一个改下螺丝接口就可以换上去的光驱,之前的光驱刻录了几百张后牺牲了;也许还可以买个光驱位的硬盘盒,原来的硬盘位置可以考虑加块SSD硬盘,这样启动加载OS就更快了,而且现在使用USB装系统方便多了。

    平时说的64位,大多数时候指的是Intel 64 (EM64T / AMD64 / x86-64 / x64),还有安腾处理的IA64,除了在服务器上,基本上碰不到;64位的优势在于,

    1.64位的地址空间,理论上可以支持2的64次方,16 Eb的内存;

    • 2.扩展的寄存器集(extended register set),我的理解是这样可以使得函数的调用惯例一致,而且参数,返回值的指针都可以通过寄存器来传递,这样效率更高而且可以避免一些传统的栈溢出的漏洞
    • 3.对于开发者来说,cpu指令集变化不算大,相当于做了个并集;
    • 4.能通过WoW64 (Windows-on-Windows 64)类似技术来向前兼容应用程序和操作系统
    • windows_mem                                                          Windows实际能支持的最大内存

      32位OS如何支持超过4G的内存呢?通过PAE(physical address exetension)就可以实现,具体原理可以参考这篇文章,讲的非常到位。

      我使用的是ReadyFor4GB这个工具,patch完成重启动后右下角会显示“测试模式”的水印,这样:test_mode不过可以通过另一个starforce工具来去掉,留着不也挺cool的。

      12

                                                                            选择去掉水印

      至于在linux下,就简单了,可以参考这篇文章,Ubuntu下直接sudo apt-get install linux-server,重启就OK了。

      123

                                                                   默认32位的Ubuntu也只识别了3G

      221

              安装linux-image-server,linux-headers-generic-pae,package的名称说明了其主要用途

      1

                                                                               正常识别了

       

      SSH over USB

      某天在wiki上闲逛,发现一个SSH_Over_USB的entry,可以让SSH通过USB数据线来连接iOS,上面说的是在Mac OS下,当然在linux和Windows下也是可以的。原理是什么呢,是在Local运行一个usb多路复用(multiplexor)的daemon,然后运行client程序通过它建立本地<—>远程端口转发,最后就可以使用ssh进行基于usb tunnel的连接了。这个有什么用呢?对于jb/unlock肯定是有帮助的,还可以开发cydia上的app,折腾(可以装web server,或者在上面写python,java),甚至crack wifi密码都可以(现在暂时还不行)。

      1.安装usbmuxd,可以看到在Ubuntu源里已经包含了,这里八卦一下,Mac App Store发布了,里面包含了1000多个应用,你可以下载/购买,更新,sounds familiar,linux folks?(see :Apple, Linux welcomes you to 1998!

      #sudo apt-get install usbmuxd

      usbmxd

      2.usbmuxd的作者提供了一个简易的python-client,运行它,可以看到将本地的2222端口转发到了远程的22端口(即被将被连接的iDevice)

      #./tcprelay.py –t 22:2222

      daemon_listen

      3.建立ssh连接,#ssh root@127.0.0.1 –p 2222

      ssh_ipod

      python-client的回显,连接建立了

      daemon_accept

       

      在Windows下就很简单了,最新版本的ifunbox,提供了USB Tunnel的功能,点击下USB Tunneling,如图

      Untitled4

      将本地的22端口转发到远程的22端口

      Untitled3

      ssh连接之,现在可以干很多事情了~

      Untitled5

       

      SSH over USB

      某天在wiki上闲逛,发现一个SSH_Over_USB的entry,可以让SSH通过USB数据线来连接iOS,上面说的是在Mac OS下,当然在linux和Windows下也是可以的。原理是什么呢,是在Local运行一个usb多路复用(multiplexor)的daemon,然后运行client程序通过它建立本地<—>远程端口转发,最后就可以使用ssh进行基于usb tunnel的连接了。这个有什么用呢?对于jb/unlock肯定是有帮助的,还可以开发cydia上的app,折腾(可以装web server,或者在上面写python,java),甚至crack wifi密码都可以(现在暂时还不行)。

      1.安装usbmuxd,可以看到在Ubuntu源里已经包含了,这里八卦一下,Mac App Store发布了,里面包含了1000多个应用,你可以下载/购买,更新,sounds familiar,linux folks?(see :Apple, Linux welcomes you to 1998!

      #sudo apt-get install usbmuxd

      usbmxd

      2.usbmuxd的作者提供了一个简易的python-client,运行它,可以看到将本地的2222端口转发到了远程的22端口(即被将被连接的iDevice)

      #./tcprelay.py –t 22:2222

      daemon_listen

      3.建立ssh连接,#ssh root@127.0.0.1 –p 2222

      ssh_ipod

      python-client的回显,连接建立了

      daemon_accept

       

      在Windows下就很简单了,最新版本的ifunbox,提供了USB Tunnel的功能,点击下USB Tunneling,如图

      Untitled4

      将本地的22端口转发到远程的22端口

      Untitled3

      ssh连接之,现在可以干很多事情了~

      Untitled5

       

      戏说Linux-2.6.38中进程调度的优化

      2.6.38?现在2.6.37还在RC中,怎么会有38?是的,因为37进了RC,所以不会再加新功能了。那么将要进入的新功能只能放到38中。而谁会是2.6.38的闪光点呢?对于进程调度subsys来说,很有可能就是autogroup了。

      虽然现在这个新功能还在讨论中,但是Linus和Ingo都已经buy in得差不多了,进入main tree是指日可待了。这个feature要说最早也是来自于Linus的灵感,其实很多人应该也多有感受。比如在我们编译内核时,桌面响应就会变慢,甚 至在vi里敲个字都顿啊顿的;再比如在emule下载完一部电影后做sync时,大量IO也会拖得桌面很顿。这是由于进程调度器在选择下个需要被调度进程 时对于需要快速响应的进程没有做到充分考虑其特殊性。但是你要是用过Redhat9的话,一定会感觉现在Linux的桌面响应或是普通tty响应都快太多啦。这完全要归功于Con Kolivas 和Ingo的不懈努力得到的CFS(虽然Con在技术论战中败下阵后一蹶不振,回去干麻醉师的老本行了;但在论战中胜出的Ingo把sched维护的有 声有色),CFS的完全公平调度天性,让编译程序等非交互性进程被调度器选择时的优先度大大降低(运行的时间越多,在RB tree中越靠边;而运行时间及机会越少的交互式进程越有机会靠近RB tree的左下角,这个左下角可是黄金地段啊,调度器就喜欢从这个地方调进程了)。这么看来CFS做的也很好了,但是在这个牛人辈出的时代,Mike Galbraith站了出来,大声的说,我还可以让交互进程响应更快!

      凭什么这么说?凭cgroup!说到这个cgroup,对笔者来说算是老朋友了,或者说是老朋友的老朋友了。国内的Linux新一代牛人中的一位Zefan LI是我的老兄弟,而他恰恰又是cgroup的maintainer,2008年时国内的少数几位内核维护者之一。cgroup是干嘛的呢?google 搜一下,有功底的朋友应该可以看懂,我在这里简单解释,相信也能让大家有个概念。想象一下有这么种容器,你可以把进程放入其中,并给这个容器贴个标签,比如:“核心业务进程”,“娱乐用进程”,“老婆用的进程”等等。并且你可以拿个更大的容器,把“娱乐用进程”和“老婆用的进程”的小容器都扔到那个大容器中,并贴个标签“家用进程”。cgroup就是用来定义这些容器的框架。有了它,我们可以让“核心业务进程”的容器内的进程享有一些特权,比如说固定的网络带宽,较大的IO速度等;我们还可以让“老婆用的进程”容器里的进程只得到很少的系统资源,哈哈,床上打不过你,我还不能靠我的拿手本领整你!(这里的我,泛指天下受苦受难的男性软件工程师)

      废话少说,就要到正题了,看到这里,就算你不是Mike G,你也该知道怎么整了吧?虽然知道怎么整与能整出code来还是有差距的,但是至少我们也想到啦。Mike的做法果然不出我们所料,具体说,就是在进程需要用到tty资源时,比如说vi啦,gedit啦,魔兽世界啦。。。。(魔兽世界在Linux上还能玩啊?)就把它放到一个特殊的容器中,这个容器贴了标签“老子要快点响应”。那么进程调度器在挑选下一个家伙来使用CPU时,就会乖乖的去找它啦。就这么简单。简单?你去写一个!

      Mike只用了一个220行左右的patch就做到了,代码极尽精炼无耦之能事,被Linus开心的表扬了一遍又一遍。不过最厉害的还是让数据说话,调度平均响应时间为原来的16分之1左右。厉害吗?太厉害了。但是。。。

      对的,什么事都会有但是,这是唯物辩证法告诉我们的。cgroup对系统是有penalty的。你想啊,本来人家进程们好好呆在红黑树上等着调度,你非得再给人家按容器分分类,贴贴标签,等到调度器来拉壮丁去享受CPU或其他资源时,不仅得去树里挑,还得在一堆罐子中挑,最可恨的是罐子里还套着罐子。这个Linus当然也是一针见血的就看出来了,可Mike不愧是小牛人。立马拿出准备已久的理由说,对于缺少人机交互的server来说,这个确实比较扯淡(其实也还好啦,cgroup不会带来大于5%的开销),但是对于那些装了Fedora,Ubuntu等等的桌面用户来说,根本无法感知cgroup的开销,反而会乐意接受基于cgroup的autogroup带来的高速响应。厉害!

      厉害归厉害,社区里厉害而又爱挑刺(追求完美啦)的人多得是,所以Mike同志还在矜矜业业根据大家的建议做些细微的改善,细微却很重要的改善,估计进Ingo的sched tree是没问题了。热切期待其正式进入2.6.38,接受大众的考验。

      MeeGo-Handset开发入门小结

      关于MeeGo的版本
      在MeeGo官网主要有3个:

      MeeGo Handset Day1 Developer Preview

      MeeGo v1.0 for In-Vehicle Infotainment (IVI)

      MeeGo v1.0 for Netbooks (Google Chrome Browser)

      分别代表手机版,上网本(可能之后平板?),车载设备(GPS之类的)下载下来文件名如下

      meego-handset-ia32-netbook-mtf-1.0.80.12.20100723.1.img

      meego-ivi-ia32-noemgd-1.0.1-20100729.1.iso

      meego-netbook-chromium-ia32-1.0-20100524.1.img

      meego-netbook-ia32-1.0.80.11.20100720.1.img

      这些都是安装在真机的OS镜像,稍微解释一下

      handset-ia32-netbook-mtf是指在ia32(x86)上运行handset版的meego,mtf代表meego touch framework,体验得是触碰屏才行【截图】

      ivi-ia32-noemgd是指使用x86芯片的车载设备,用pc也是可以引导的【截图】

      netbook-chromium是指默认浏览器是chromium(chrome的开源版本)的上网本OS
      这 3个版本,主要是UX层不同,其中meego core都是相同的,但是SDK也会相应不同

      关于MeeGo App开发与SDK
      MeeGo的SDK有三种方式,这里讨论的方式均指的是Change Root (chroot) with Xephyr ,这种方式是速度最快的,这种方式下的sdk其实就是一个可以chroot进去的linux系统(维护过linux肯定都知道,linux挂掉的时候可以使用livecd或别的引导一下,然后挂载原来的分区并chroot进去)下载下来文件如下:

      meego-sdk-0524.tar.bz2

      meego-netbook-ia32-1.0.80.12.20100727.1-sdk-pre0729.tar.bz2

      meego-handset-ia32-1.0.80.9.20100706.1-sdk-pre0729.tar.bz2

      meego-handset-ia32-1.0.80.9.20100706.1-sdk-pre0901.raw.tar.bz2

      meego-handset-ia32-1.0.80.9.20100706.1-sdk-pre0901.raw.tar.bz2

      meego-netbook-ia32-1.0.80.12.20100727.1-sdk-pre0901.raw.tar.bz2

      meego-sdk-0524:意思是5月24日发布的,这是最早的sdk版本,网上还有些教程是拿这个做的,这个解压就能用,不需要挂载
      剩下的几个都是pre版,7月29日/9月1日发布的(pre就是很不完善的意思,==)
      解开之后个是raw文件,这个是可以挂载的镜像

      现 在主要工作研究handset下的开发,毕竟和iOS/Android/RIM等竞争的是这个。开发MeeGo App可以直接使用Qt,libmeegotouch,web runtime这几种方式(这是官方推荐的)如下图,其中web runtime(html/css/js)也是在中间那一层。

      直接使用Qt是可以的,Qt4.7新增加的Qt Quick(提供了QML)会使得开发效率更高;还可以使用libmeegotouch(MeeGo Touch Framework核心lib),这两种有什么区别?参考这里:Alan Alpert@niqt:MeegoTouch provides a C++ widget library. If you are writing an application UI in C++ and want native look and feel on MeegoTouch devices, you just use it.
      web runtime就直接无视了,==

      MeeGo应用程序简介

      主要由MApplication,MApplicationPage,MApplicationWindow,MLayout,MWidgets(MButton,
      MComboBox,MContainer,MDialog,MMessageBox,MInfoBanner,MLabel,MList) 类组成,位置关系就如下图右边所示,都是现代GUI框架的东西,很好理解。
      实际的calculator,在xephyr里运行效果图

      开发API参考:

      http://apidocs.meego.com/mtf/index.html

      http://doc.qt.nokia.com/4.7-snapshot/index.html
      使用MeeGo Touch Framework开发App

      第一种方法:普通linux发行版安装libmeegotouch库(参考这里

      0.安装linux
      安装的是Ubuntu10.04 LTS,由于要使用到Qt4.7 最好使用gnome桌面的发行版(其实我很喜欢KDE,但是采用KDE的发行版在默认/usr/lib下会带有稳定版本的Qt,如4.6.2,这样到编译 libmeegotouch时容易造成链接库不正确而编译失败,可能出这个错误

      1.更新系统【非必须】
      #sudo apt-get upgrade

      2.安装toolchain,主要是git、g++和X11的libX*-dev
      #sudo apt-get install git-core build-essential libgl1-mesa-dev libglu1-mesa-dev libxdamage-dev libX11-dev libXext-dev libXtst-dev libXrender-dev libxcursor-dev libxfixes-dev libxft-dev libxi-dev libxrandr-dev libdbus-1-dev

      3.编译Qt4.7
      下载Qt4.7 源代码版(qt-everywhere-opensource-src-4.7.0-rc1.tar.gz)或者二进制版(qt-sdk-linux- x86-opensource-2010.05-rc1.bin),前者需要手动编译,虽然时间长但是可以控制;后者安装方便,以源代码为例:
      #tar xvjf qt-everywhere-opensource-src-4.7.0-rc1.tar.gz
      #cd qt-everywhere-opensource-src-4.7.0-rc1
      #./configure -dbus
      #make
      #sudo make install

      完成后设置环境变量:
      export QTDIR=/usr/local/Trolltech/Qt-4.7.0
      export PATH=$QTDIR/bin:$PATH
      若要每次生效请修改~/.bashrc,加上上面两句export命令

      3.git clone libmeegotouch相关代码
      #git clone git://gitorious.org/meegotouch/libmeegotouch.git
      #git clone git://gitorious.org/meegotouch/meegotouch-theme.git

      4.Qt4.7编译完成后,编译安装meegotouch-theme和libmeegotouch

      #cd meegotouch-theme
      #qmake && sudo make install

      #cd libmeegotouch
      #./configure
      #make && sudo make install

      5.运行examples测试
      #cd libmeegotouch/examples/calculator
      #qmake && make
      #sudo ./calculator

      6.安装IDE
      1.qtcreator下载: qt-creator-linux-x86-opensource-2.0.1.bin
      2.也可以考虑eclipse+cdt+qt-eclipse-integration的组合
      #sudo apt-get install eclispse
      打开eclipse->Help->Install New Software,添加一下cdt的update-url(注意版本,这里是galileo),http://download.eclipse.org /tools/cdt/releases/galileo

      http://qt.nokia.com/developer/eclipse-integration/,下载并解压放入对应eclipse安装路径(我的是/usr/lib/eclipse)

      第二种方法:直接在sdk中安装libmeegotouch-devel

      sdk版目前还是pre-release版本,里面带有的qt4.7和libmeegotouch基本上不是最新版,所有会有些examples无法编译通过,SDK安装可以参考meego的wiki或者是我上一篇博客。安装完成并成功chroot后:

      #zypper install libmeegotouch-devel
      ##复制examples中的代码测试一下
      #cd libmeegotouch/examples/calculator
      #qmake && make
      #./calculator

      Intel买咖啡,太渴了

      It could be a brilliant move, or a huge mistake, and only time will tell.

      读了Intel和McAfee的官方blog,对此次收购的双方意图解析如下:

      Intel:结合安全厂商,扩大无线设备的战略。这次收购咖啡是组合拳中的第二拳。第一拳来自对Wind River的收购,Wind River是嵌入式软件厂商,在被收购后即推出Secure Embedded Linux,这次收购咖啡应该是对Security的再次补充军力(从Linux内核patch可以看出McAfee在嵌入式安全领域一直有所投资,并收购过secure computing,cyberguard, snapgear 等公司)。

      无线设备是Intel的支柱之一,而显然现在多元化的终端设备中移动嵌入式设备是主力,而且移动嵌入式设备也给安全领域带来新的挑战,作为硬件厂商的Intel结合成熟安全厂商的技术,很想在移动设备安全领域有所进展,同时促进Intel的移动设备战略。

      McAfee:对于安全领域的循序渐进不再满足,希望通过软硬结合来弥补安全领域中攻方和守方的gap。这是McAfee CTO的解释。但是我的理解是,借用Intel硬件铺平的渠道,平台,市场来大展安全的身手才是她的重要意图。现在看来,合并暂时会更多利于面向consumer的终端安全,但可以预见移动设备会通过商务领域渗透入企业领域,从而影响到企业安全相关产品。

      总的来说,个人理解这次收购对于Intel是一小步,对于McAfee是一大步,双方能否同步期望值,达到真正双剑合璧,我持观望态度。从技术上看,软硬结合的安全策略也没有想象中那么容易达到。