Monthly Archives: 5月 2012

整了个 hostapd 搭的 AP

唉,现在居民楼里无线环境太复杂,缺乏规划,干扰源太多,在一个屋子里的低干扰频点到别的屋子里可能就状况很差了,即使在不到70平米的家里都是如此,只好找来老笔记本,用 hostapd 搭了一个 AP,弥补覆盖的不足……

本来没想写的,不过还是记记吧,省得荒废了 blog,其实内容不值一提,都是很简单的设置,网上资料很多,这里就是日记一下哈,不算教程。

先是找来了弃之不用很久的老笔记本——04年的华硕 M2Ne,一代迅驰平台配二代迅驰的CPU(Dophin内核),这个不知道还有多少同学对它有印象啊,呵呵

gnawux@case:~$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 13
model name	: Intel(R) Pentium(R) M processor 1.50GHz
stepping	: 6
microcode	: 0x17
cpu MHz		: 600.000
cache size	: 2048 KB
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 2
wp		: yes
flags		: fpu vme de pse tsc msr mce cx8 apic mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss tm pbe up bts est tm2
bogomips	: 1199.98
clflush size	: 64
cache_alignment	: 64
address sizes	: 32 bits physical, 32 bits virtual
power management:

嗯,拿来之后看了看手头的东西,装了个 Ubuntu 12.04,本来想装 Debian Sid 的,没想到 Unetbootin 做的 Debian USB 启动盘,居然没 boot,Ubuntu 倒是 boot 了,当然,不是同一个 U 盘,不知道是盘的事还是镜像的事,嗯,无所谓了。装起来之后,果断起不来 hostapd,果不出我所料,Intel IPW2100 网卡是进不了 AP mode 的,3945 以后的使用 mac80211 的才可以。

嗯,这里插一句,我凭印象说了,不一定对啊。大约在早几年,那会我还没毕业,天天折腾 Linux,知道最早的 ipw 无线网卡的 mac 层驱动是 softmac,后来移植到的 mac80211,这倒不是说后者是 hardmac 哈,实际上都是软件实现 MAC 层,嗯,这事网络第二层的一个子层,不是水果家的东西哈。softmac 写得比较乱,而 mac80211 是一次重构,而且更彻底的把控制挪到软件层来做了,对AP模式之类的模式也支持的更好。

嗯,大概就是上面的意思,不是很准确,不要拿去引用就好。还好哥翻箱倒柜找到了一块当年二手收的 BCM4318 (bg 双模的,比 ipw2100 强),嗯,当年收来给 linux 玩没问题,不过这个本后来给老婆装 windows 了,居然 windows 一起来只认 intel 的无线网卡,只好换回去,我这次找到这块 BCM4318 的时候,在一个破箱子里,用破纸包着……唉,苦了你苦守寒窑这么多年啊,终于又要发挥余热了。

BCM43xx 无线网卡目前的驱动模块是 b43,需要 broadcom 家的 firmware,可以用这两个包,自动安装:

ii  b43-fwcutter                     1:015-9                                  Utility for extracting Broadcom 43xx firmware
ii  firmware-b43-installer           1:015-9                                  Installer package for firmware for the b43 driver

和大部分略新的无线网卡驱动一样,b43 也是使用 mac80211 的,这东东对 hostapd 来说,用 nl80211 驱动就可以了,嗯,拆机换网卡,给几张照片哈:

打开电源面板,卸下键盘,下面的电路板就是插在 minipci 口上的无线网卡

嗯,在这篇平淡无奇的blog里面,拆机照片也算是个特色吧,呵呵,miniPCI 口边上有卡子,一按,卡会自动翘起来,然后一拔就下来了,装的时候,插进去一按就行了,和笔记本内存很类似。来两张二次出山(二手的,应该是三次出山了)的BCM4318的照片:

 

嗯,注意正面(左边那张)的右上角,有两个天线插口,写着main 和 aux 呢,忘了插天线可不行哈。嗯,再来两张刚刚结束半退休,正式退休的 Intel Pro Wireless 2100 (ipw2100) 的照片哈:

  

嗯,好了,图片到此为止,下面给一个配置,先是 hostapd 的,包自己 apt 装就行了,配置文件这么写就可以:

gnawux@case:~$ cat /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
driver=nl80211
ssid=confusion
channel=11
hw_mode=g
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_passphrase=jumpover

嗯,这是一个使用 wlan0 做 AP,接入到网桥(br0)(直接桥到以太网,通过以太网那边的路由器分配地址啥的),占用11号频点,802.11g,WPA2认证,SSID是confusion,密码是 jumpover 的配置,当然,我实际的密码肯定不是这个了,嘿嘿。其实呢,我觉得自己做 DHCP,然后配 NAT 路由,甚至是选择缺省翻墙都是可以的,我这次懒得配了,留给下次了,桥着最省事,只要再配好,让 eth0 也在桥里就行了。

嗯,网桥直接配到 /etc/network/interfaces 里就行,这是 Debian 系的配法,嗯,RH 和 SuSE 之类的自己研究哈,Debian/Ubuntu 的就这么简单:

gnawux@case:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto br0
iface br0 inet dhcp
	bridge_ports eth0

嗯,关于桥的就是后三行。呃,好了,到此为止,我现在就是接在这个 AP 上写的 Blog,信号满格,哈哈。

这个周末好充实啊 —— 冲击钻+电锤在墙上打洞,换无线网卡DIY AP,刷手机 ROM 玩应用写 Blog,去公司写程序外加带儿子学英语…… 嗯,期待下个周末哈

from 我有分寸: http://wangxu.me/blog/p/709

一个 ROM 和几个 APP[多图杀猫]

前几天,把我的 Galaxy Note 刷到 CyanogenMod 9 (CM9) Nightly build 了,之前没有刷上来过,主要是想尝试一下,而且,这个 ICS 的 kernel 没有三星的 Kernel 的硬砖问题。经过几天试用之后,有一个感觉 —— 纯粹的 CM 给了一个很好的可定制平台,但却没有提供很方便的用户定制工具,其他开发者基于这个来开发更好用的 ROM 应该不错,但它本身似乎还没有什么很容易摆弄的地方。

于是,转来转去,今天发现了一个值得关注的 ROM—— PARANOIDANDROID,链接在这里:

http://forum.xda-developers.com/showthread.php?t=1662802

这个ROM才刚刚发布,就显得很吸引人,由于作者之前成绩不错,我也第一时间刷上了 0.1 来玩。这个 ROM 是基于 CM9 的,从 CM9 过来不需要 wipe,所以很容易就刷上了,它吸引人的地方在于:

  • Tablet 模式与 Phone 模式的混合体——系统以 Tablet 模式为主,但可以为每个程序指定 DPI

是这样的,对于 CM9/AOSP 的 GN Rom 来说,DPI 决定了是平板还是手机,(大约)216 以下是平板,以上是手机,得益于高分辨率 Super HD AMOLED 屏,Galaxy Note 的实际 DPI 值是 320。平板模式时,因为把 DPI 值设得很低,字和按钮都会很小,有些应用字都看不清了(其他一些变小倒是很好看),而且,平板模式下,很多 Launcher,比如 Apex,都没有 dock,布置的桌面也不好看;一般切换平板和手机模式需要重启,很不方便,而且对Market还有些影响。总的说,一般的 ROM 的平板模式都是好看,但很难日常用的。

但是这个ROM是平板模式和手机模式结合起来的,Launcher 是修改过的 Trebuchet,用起来和手机模式很接近,很方便,更重要的是,每个应用可以指定自己的 DPI,需要有很多字的就指定高分辨率,比如,短信、电话…… 都可以设成 220,字更多的,看书应用、Facebook,可以设到真实值 320,而缺省值是 192,使用平板模式,很漂亮。后面以图为主了。介绍下这个 ROM 和这几天玩/买的有意思的 App(推荐:LectureNotes, FreeNote, Touch Retouch)。

开始推荐之前插一句,可调分辨率对某些程序是有问题的,这些程序可能对DPI处理不好,但是要插入到别的程序里面显示的程序(输入法、widget),墨迹天气的 widget 根本就无法显示,只好用 Go Weather,百度输入法插到DPI不同的程序里,或是自己设不同的DPI,就时而空出一大块,时而显示不全,只好用Google拼音输入法,不过所幸都有得替代,也没有其他应用有问题。嗯,下面正式开始:

总体观感与Google Apps

先来两张总体感觉:

 

还算舒服吧,嗯,那个画图的widget,帆船画得不好看是我的责任哈。再来看看设置界面——

可以看到咱们的新鲜出炉的 ROM 版本和 kernel build 的时间,以及为每个程序设置 DPI 值的界面。下面看看 GMail 和 Market,给两张横屏的视图:

接下来来几个好玩的 APP:

Lecture Notes

$3.84 收的,嗯,很适合随意写写画画,随便记笔记,没什么限制。支持电磁笔(看stylus配置),而且支持笔上的按钮,用笔画的时候,可以按下按钮,就变成橡皮擦了。可以用小刀工具,选定一块,复制到别的地方,或是移动到别的地方,非常好用。而且可以设置为只有笔能写上,手指写不上,这样可以手指控制缩放移动、笔写字画画,很方便。

  

FreeNote

这个是免费的,收费版叫 FreeNote+,$5.99,但免费版已经很好用了。虽然名字叫Free,但用法没有Lecture Notes 那么 Free,有一个功能是画画,上面那个主屏的帆船就是这么画出来的,但更主要的功能是手写输入,又一个基线,写在里面就可以输入进去,然后还可以弄出来画重点啥的,功能也非常强大,界面我还是更喜欢一些 Lecture Notes。同样支持电磁笔,可以只有笔写入,手指不写

  

Touch Retouch

这不是一个笔记工具,而是一个修图工具,给张对比图哈

看到左侧的鼠标垫了没,用 Touch Retouch 只要用笔把小修掉的地方涂上,然后“start”,就消失了,超好玩,这个应用 $0.99,买来玩玩挺好哈 :)

Evernote/Sketch

都提到笔记了,不能不说大名鼎鼎的 Evernote 和它收购的 Sketch,嗯,Sketch 也可以写写画画:

  

但是,Sketch 似乎没有对笔的优化,而且,放在 Evernote 里也只是附件,还是留着用来勾照片吧。不过 Sketch 有个好处,会对画上的线条自动进行平滑,会更“好看”一点。

Papyrus 和 FlipaClip

这两个看起来很好玩,一个写起来特别舒服,一个写写画画自动生成动画,可惜了,在我的 ICS Rom 上全跑步起来,嗯,CM9, AOSP, Stock 都跑不起来,遗憾啊,这里就不贴图了。

 

from 我有分寸: http://wangxu.me/blog/p/691

那些天一起刷过的Galaxy Note ICS ROM

似乎我用Milestone那么久都没有心思写篇关于手机的blog,用GN没几天就第二次想写了,我得说,这会儿总算对Android有些好感了,使用体验、界面流畅程度啥的都没什么问题了,也没什么冲动想换个个头那么小的 iPhone 了。我不是说 Android 比 iPhone 好了,只是,这些手机已经是各有特色了,iPhone 可能不再是每个人的理想智能手机了(对很多人从来没是过哈,对某些人永远都是)。

本文所指的ROM和内核,都来自 XDA( http://forum.xda-developers.com ),由于个人装逼需要,不喜欢安装国内论坛上的“大牛”们做的,比如机锋什么的下 ROM,如果能在官方市场找到的软件也不喜欢用其它来源的,如果是付费软件,又很想要,就想办法伪装成米国用户买下来,偶们码农,得带头尊重软件版权、反对盗版,这个不是因为我们工资已经高到每月能买得起一两刀、三五刀的软件了,而是因为我们自己就是这么活的,我们不能自己偷自己的钱,是吧。

目前的Galaxy Note ICS ROM和内核

Galaxy Note 目前的两大 ICS ROM 分支是:基于三星官方修订的,以及基于纯开源项目构建的;内核也有两类:三星放出来的和基于纯开源构建的。开源的ROM也可能会用三星放出来的内核,反之大概亦然。

5月10号,三星欧洲在德国放出了他们的第一个官方的Note ICS ROM,版本号为 LPY,之前,中国泄漏过 LP1, LP5, LP6 三个 ICS ROM(这些似乎最早都是在机锋泄漏的),下面称呼的时候,官方版本的ROM和内核都直接称为LPY,泄漏版的三个,如果不特殊指某一个的话,直接说中国泄漏版。

在出现这些三星ROM之后,有几个 Team 都对官方版本的ROM做出了自己的 MOD,主要包括:

  • 换用ApexLauncher 或 NovaLauncher,很多人都不喜欢三星的 TouchWiz ,呵呵
  • 删掉一些应用,换上另一些(中国泄漏版里有人人、新浪微博之类的一大堆,我看着都想删掉,老外们更不例外了)
  • 加一些启动的init脚本来做优化
  • 换主题
  • 增加一些通知栏 toggle 之类的功能(替换 SystemUI)

随后或同时,有一些人开始直接从开源的 AOSP (Android Open Source Project,这个是 google 直接放出的),以及在上面进行了一些修订的 AOKP 项目,这其中比较成熟的一般都使用了三星放出的内核——中国泄漏的或是更新的 LPY,它们的主要特点是:

  • 应用精简了不少,三星的一个都没有了,当然 S-Pen 应用也没有了(笔还能用,笔的按键不好用了,截屏之类的就不能用笔了)
  • 一般用 ApexLauncher 或 NovaLauncher,优化、toggle、主题之类的也是有的
  • 更多的可定制配置,包括锁屏
  • 可以修改为平板模式,安装平板才可以用的软件,比如 Papyrus 之类的
  • 早期AOSP官方有录像无法保存之类的 Bug,但后来已经修复了。

除了AOSP/AOKP之外,还有著名的CM9系列ROM,它们的mod更多,甚至使用了基于 i9100 内核源代码构建的纯开源内核,这个内核目前只是可用,还缺少一些功能(这个变化很快,可能blog发出来的时候已经修复了呢)

  • 拍照的预览是黑的
  • Speaker还有部分问题,这个似乎是有人的内核解决了,有人的没有,不同的修复
  • 其他不确定的问题

嗯,好了,总结就到这里,下面是重要的安全提示——

安全提示

根据XDA总结的用户的报告,所有三星放出的内核,LPY或是中国泄漏的,都存在一定的 eMMC IO 缺陷,有可能在大 IO 时导致硬变砖,也就是 hard brick,这对于我们这些质保比较差用户来说更严重一些哈。发生这种情况的风险依次为:

  • 使用Chainfire 打包的基于三星内核的 CF-root kernel 时,在 Recovery 下进行 Wipe 和 Flash,这种风险是最高的,当然,实际我也在没得到这个安全提示的时候 wipe 过好几次,很多其他人也是,大部分都没变砖,变砖这个事,概率不高,但是风险高就很吓人,是吧
  • 不使用 CF-Root的时候,也有可能 wipe 的时候出事
  • 删除大文件的时候据认为也有可能有风险

这个,说的是个可能性,但有很多用户不以为然,认为变砖不是这会才开始的,历史上也不是没出现过,不用看得这么重,那些手机可能是硬件本身有问题的,有很多变砖和新 kernel 根本没关系。不论如何,鉴于存在有问题的可能,因此XDA的开发者们给出了一个解决方案:

安全操作方法与免责声明

鉴于 2.3.6 的内核没有问题,于是建议这么操作:

  • 下 Abyss Kernel 4.2 (点这里: http://www.mediafire.com/?c65mndvpk6ocbaa ),放到手机里
  • 进 recovery 刷 Abyss 内核
  • 在 advanced 里选择重启到recovery
  • 如果想 wipe就wipe,想刷新 Rom 就刷新 Rom
  • 重启,搞定

当然,重复一下,刷机怎么都是有风险的,所以,即使你这么做了,赶上天灾人祸的可能性仍然是存在的,但是,要是啥风险都不承担,就表玩手机了,是吧。

 ICS使用体验

用ICS时间久了,2.3.6 的啥体验记不清了,嗯,总体评价一下ICS吧

  • 设置界面的流量显示、电量显示都不错,wifi、蓝牙的设置也更方便了,打开设置就有开关,也可以点进去设置
  • 流畅度没什么问题,原来有问题么,我不记得了啊,我觉得一直挺流畅的吧,当然,我毕竟是用老 milestone 过来的,对流畅啥的期待本来就不高,说实话,我承认我土鳖,玩 iPhone 4S 和 iPad、iPad 2 的时候也没觉得惊艳的流畅啊……
  • 电池啥的,跟 Coly 显摆过好几次,我觉得正常情况下,原电坚持一天应该没问题,我的坚持的意思是不以影响使用体验为代价的,不关 wifi、不关背景数据传输,该拍照拍照,该上传上传,该微博微博,该看 RSS 看 RSS……
  • 人脸解锁说起来拉风,但用一下就知道了,这东西对长得像我这么丑的屌丝完全是自取其辱啊,如果当天没刮胡子,或者干了一天活一脸油光的话,每次解锁都让你感到一阵恶心,嗯,当然了,对改善个人卫生有好处,用人脸解锁的几天,我会一天洗几次脸、刮胡子间隔绝对不会超过两天,嗯,即使这样,后来还是关掉人脸解锁了
  • 只要有 root,就可以安装 busy box 和 openvpn,你懂的,这个没有任何使用问题

嗯,再来说下基于三星ROM做的东西

  • 用 LPY 吧,毕竟是官方的,没有中文界面,也就是菜单啥的是英文的,中文程序没有任何问题
  • 如果觉得 instagram 之类的开的时候有点卡的话,disable 掉一片三星自带的程序,什么 weather、news、软件更新啥的,有 root 的话,可以直接移除 /system/app/ 下不需要的程序,当然,有些是不能拿走的,这个见仁见智吧,我移走了50多个,看起来没什么问题
  • mod啥的都可以手动做,比如 mod 个主题、装个软件啥的,有 root 都可以手工做了,基本不需要装个特殊的ROM版本了。

然后是 AOKP 的 ROM,我用 stunner 比较多,从 Beta4.1 一直用到 1.4.26.1,说说感受:

  • 流畅度没问题,内存占用少很多。当然,要我说,内存剩余 200MB 还是 500MB 都是浮云,只要应用不卡,内存不就是用来用的么;
  • 面板啥的可定制性更强,我喜欢这个,相机有全景相机功能,比免费应用的全景相机功能好用
  • 平板模式基本不用,字小啊,但支持 Papyrus 和其他一些 Note 软件,还是挺有吸引力的
  • 没有 S-Pen 按键的功能,心里小不爽,似乎笔的定位比三星 ROM 有偏移,这个是感觉,不是确实量出来的,但心情上确实是这样的

总结一下:

  • 只要有 root,流畅度不是问题,电池也没问题
  • 应用各有特色,我更倾向于官方的 S-Pen,虽然常常留恋 AOKP 的 ROM
  • 仅供参考,不承担责任哈

from 我有分寸: http://wangxu.me/blog/p/687

创建 Debian/Ubuntu 风格的内核模块包

很久不深入玩Debian系的东西了,最近,乘着工作之便,又打了个deb包,而且是我之前没干过的内核模块的deb包,恩,记一下吧。

Debian内核模块的一般构建方法

和 RHEL 不同,Debian 很少提供内核匹配的模块的二进制 deb 包,相反,一般会提供一些比较长用的模块的源码包,并配合 module-assistant 工具,生成与用户使用的内核版本一致的内核模块。

module-assistant 是一个菜单界面的CLI工具,用户可以在这里选择源码包,当然,也可以用 apt 安装 xxx-source 的源码包(也是deb包),然后,用命令

m-a a-i module-name-here

来自动生成模块的二进制 deb 包并安装。

打包模块源码

如果源里没有这个模块的话,就只能自己打包内核模块了。这个工作实际和一般软件的 deb 打包非常相似,可以借助 debhelper 的 dh_make(8) 命令。

生成 Debianize 文件

dh_make 实际上有一个专门的选项/参数 (k),可以用来制作模块的 deb 包,现在,在源码的顶层目录(目录的命名方式是 package-name-x.x.x)运行 dh_make 命令:

# dh_make -e account@examplel.com -k --createorig
#

恩,为了方便,我实际在源码的顶层目录里放了一个叫 driver 的目录,内核模块代码就在里面,这样复制的时候可以直接复制整个目录了。

执行玩上面的命令之后,你就可以看到,多了一个 debian 目录,这个目录里有很多文件,它们遵循 debian 的一般打包原则,简单介绍几个重要的,具体的参考《Debian新维护人员手册》吧:

  • rule:这个最重要,实际是个Makefile,后面具体介绍;
  • control:这个是软件包的描述,照着内容敲吧,section 之要遵循 debian 的约定,比如 kernel 就是一个 section,其他自便吧;
  • changelog:这个是打包版本的变更,每个版本开头里,目标distro一般写 unstable,urgency 一般是 low ;
  • README.Debian:是对这个包的说明,给人看的;
  • 可执行脚本:postinst 和 prerm 比较常用,分别是在安装之后进行配置和卸载之前进行清理的,preinst 和 postrm 一般用的不多。其他文件各有各的用处,.ex 结尾的都是例子,如果用的上就用,用不上的可以考虑删除。

内核模块包的特殊文件

恩,因为这 kernel module 包的做法是先做 source 的 deb 包,用户用 m-a 根据这个 deb包的内容再做一个二进制的 deb 包,所以需要为他们准备一些配置文件,一般用得上的是这两个:

  • control.modules.in  这个用作模块包的 control 文件;
  • ebs-driver1-modules-_KVERS_.postinst.modules.in 这个用作模块包的 postinst 脚本,比如要插模块、调整 daemon 什么的。

写内核模块包的 rules

这是关键折腾的一步,我也是头一次写,没找到什么现成的文档,自己琢磨的,有什么不对的地方还请指出来啊。

规则里面 kdist_clean, kdist_config, binary-modules 是用来编译内核的,编译内核时,有些规则是从 module-assistant 里导入进来的

# modifieable for experiments or debugging m-a
MA_DIR ?= /usr/share/modass
# load generic variable handling
-include $(MA_DIR)/include/generic.make
# load default rules, including kdist, kdist_image, ...
-include $(MA_DIR)/include/common-rules.make

这些会帮助我们在正式打包之前,在上面那几个给模块准备的配置文件里,加入内核版本号信息,并用正式的文件名。当然,在一开始 make kdist_clean 规则的时候,这些文件还没生成,所以应该把 dh_testdir 和 dh_clean 注掉,否则做不成的,如:

kdist_clean:
        #dh_testdir
        rm -f build-arch-stamp build-indep-stamp configure-stamp
        #dh_clean
        rm -f driver/*.o driver/*.ko

这里可以根据尝试的情况调整内容,稍稍注意一下即可。正式的 binary-module 目标倒是没什么特殊的,简单根据自己需求调整就行了,这里的安装过程会把模块放到

debian/$(PKGNAME)/lib/modules/$(KVERS)

目录里,如果有配置文件,也可以相应的放进去,debian 在安装包的时候,如果有配置文件的更改,是会提示用户的。

如果制作模块包的时候只要做源码包,不用做用户空间工具包的话,binary 目标只要依赖 binary-indep 就可以了,不需要依赖 binary-arch 了。

打包

写完配置文件之后,在源码顶级目录里,也就是有 debian 目录的目录里,运行

dpkg-buildpackage -uc -us -rfakeroot

就可以生成源码包了,安装之后,就可以像开头那样用 module-assistant 制作安装二进制模块了。

小结

实际上做内核模块的 deb 包并不难,只要有点 debian/ubuntu 经验,细心一点就可以做好里。估计短时间内我是不会更新 unleashed 了,就这篇 blog 供大家参考吧。

from 我有分寸: http://wangxu.me/blog/p/682