最近在做局域网内的 Discovery,目前已经做的差不多了,支持的协议有 ICMP, ARP, NETBIOS 和 SNMP等。Discovery 的功能主要就是扫描局域网内的存在的主机和服务等,也就是发送上述协议的包,然后对返回的包进行分析,其中 ARP 用到了 libpcap库,这里先说一下 libpcap库的交叉编译,我是这么编译的:
CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar LD=arm-none-linux-gnueabi-ld ac_cv_linux_vers=2 ./configure --host=arm-none-linux-gnu --target=arm-none-linux-gnu --with-pcap=linux
make
至于协议的具体实现以后再细说 :-)
5/13/2009
4/21/2009
dBm 与 mW 转换
无线电发射机输出的射频信号,通过电缆输送到天线,由天线以电磁波形式辐射出去。电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过电缆送到无线电接收机。因此在无线网络的工程中,计算发射装置的发射功率与天线的辐射能力非常重要。Tx 是发射( Transmits )的简称。无线电波的发射功率是指在给定频段范围内的能量,通常有两种衡量或测量标准:
1、功率( W ): 相对1 瓦( Watt )的线性水准。例如,WiFi 无线网卡的发射功率通常为0.036W ,或者说36mW 。
2、增益( dBm ):相对1 毫瓦( milliwatt )的比例水准。例如WiFi 无线网卡的发射增益为15.56dBm 。
任意功率P(mW) 与xdBm 换算的公式如下:
x = 10*lg(P/(1 mW))
以及
P =(1 mW) 10^(x/10)
例如,1毫瓦(1 mW)换算成dBm 为 0dBm,1瓦(1 Watt)换算成dBm 则为 30dBm。
在“小功率”系统中(例如无线局域网络设备)每个dB 都非常重要,有一个“3 dB 法则“,就是每增加或降低3 dB ,意味着增加一倍或降低一半的功率:
...
36 dBm 4 W
33 dBm 2 W
30 dBm 1 W = 1000 mW
27 dBm 500 mW
...
具体可参考 Wiki:
http://en.wikipedia.org/wiki/DBm
1、功率( W ): 相对1 瓦( Watt )的线性水准。例如,WiFi 无线网卡的发射功率通常为0.036W ,或者说36mW 。
2、增益( dBm ):相对1 毫瓦( milliwatt )的比例水准。例如WiFi 无线网卡的发射增益为15.56dBm 。
任意功率P(mW) 与xdBm 换算的公式如下:
x = 10*lg(P/(1 mW))
以及
P =(1 mW) 10^(x/10)
例如,1毫瓦(1 mW)换算成dBm 为 0dBm,1瓦(1 Watt)换算成dBm 则为 30dBm。
在“小功率”系统中(例如无线局域网络设备)每个dB 都非常重要,有一个“3 dB 法则“,就是每增加或降低3 dB ,意味着增加一倍或降低一半的功率:
...
36 dBm 4 W
33 dBm 2 W
30 dBm 1 W = 1000 mW
27 dBm 500 mW
...
具体可参考 Wiki:
http://en.wikipedia.org/wiki/DBm
4/16/2009
通过 EMail 更新 Blog?
早听说可以通过 Emai 或者更新 Blog,一直没试过,今天突然想起来了就试试看,以后Blog 更新的方式就多样化了 :)
这贴发完之后就抓紧干活了,今天把 WiFi 的UI 调整一下,然后基本功能再跑一遍,尽量做的兼容一些,另外为以后客户需求的"折腾"留出空间,这应该必然的
继续做 WiFi 项目
其他的事情忙的差不多了,继续完善WiFi项目,上次是在 x86 上调试的,这次搬到了 Unit 上,目前只有 rt73 的 driver 可以用,不过使用同样的 iwlist 命令在Unit 与x86 上的输出不一样哦,可能交叉编译时某些 Option没打开?或者驱动的问题? 先凑合调试着,毕竟我对现在的UI 还不满意,我自己用起来都觉得有点费劲:P ,希望能做的专业一些。
在网上搜了一些资料,比如在Neo FreeRunner 上面的WiFi 软件,主要有 KnjMokoWifi, Lint-wifi 和 Mofi 等,可以参考一下。其他的请参考下面的链接:
Wireless LAN resources for Linux
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
Neo FreeRunner WiFi
http://wiki.openmoko.org/wiki/Neo_FreeRunner_Wifi
在网上搜了一些资料,比如在Neo FreeRunner 上面的WiFi 软件,主要有 KnjMokoWifi, Lint-wifi 和 Mofi 等,可以参考一下。其他的请参考下面的链接:
Wireless LAN resources for Linux
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
Neo FreeRunner WiFi
http://wiki.openmoko.org/wiki/Neo_FreeRunner_Wifi
3/23/2009
3/03/2009
vi 替换操作
最近遇到这样的问题,首先编译出现很多未定义的字符串的错误,于是想到,我可以把这些编译出现的错误重定向到一个文件中,然后把其中的字符串过滤出来,统一定义一下就行了,操作如下:
1) 交叉编译 app 工程,错误输出到 /tmp/k 文件中
make T=arm app > /tmp/k 2>&1
2) vi 打开该文件,用 substitute 替换以 ’ 字符开头到字符串结尾的串
:%s/\’ .\+$//g
3) 剔除重复行
sort -u /tmp/k > /tmp/good
疑问:
使用 sort -u 可以满足我的要求,但是它剔重后的结果已经重新排序了,有时候可能保持原来的顺序,怎么办呢?
1) 交叉编译 app 工程,错误输出到 /tmp/k 文件中
make T=arm app > /tmp/k 2>&1
2) vi 打开该文件,用 substitute 替换以 ’ 字符开头到字符串结尾的串
:%s/\’ .\+$//g
3) 剔除重复行
sort -u /tmp/k > /tmp/good
疑问:
使用 sort -u 可以满足我的要求,但是它剔重后的结果已经重新排序了,有时候可能保持原来的顺序,怎么办呢?
2/18/2009
TL-WN322G+
向公司又借了个TP-LINK 的TL-WN321G 无线网卡,以为插到我的PC上就可以使用,却发现没想象的那么简单,首先执行 lsusb:
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0001
Bus 005 Device 003: ID 0ace:1215 ZyDAS WLA-54L WiFi
Bus 005 Device 001: ID 1d6b:0002
Bus 004 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 04b3:310c IBM Corp.
Bus 001 Device 001: ID 1d6b:0001
原来用了不一样的芯片,看来要重新编译内核了,重新配置内核,选上 ZyDAS ZD1211/ZD1211B USB-wireless support 即可,编译安装之后,还需要安装 zd1211-firmware,如果是 Gentoo 系统的话 emerge d1211-firmware 即可,然后 modprobe zd1211rw,但发现还有问题,报错:RF MAXIM_NEW_RF 0x8 is not supported,搜索一圈,应该是 zd1211 驱动的 BUG 吧,临时解决办法可以打上下面的 patch:
--- linux/drivers/net/wireless/zd1211rw/zd_rf.c 2009-02-18 13:38:12.000000000 +0000
+++ linux-mod/drivers/net/wireless/zd1211rw/zd_rf.c 2009-02-18 13:38:01.000000000 +0000
@@ -87,6 +87,7 @@
r = zd_rf_init_al7230b(rf);
break;
case UW2453_RF:
+ case MAXIM_NEW_RF:
r = zd_rf_init_uw2453(rf);
break;
default:
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0001
Bus 005 Device 003: ID 0ace:1215 ZyDAS WLA-54L WiFi
Bus 005 Device 001: ID 1d6b:0002
Bus 004 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 04b3:310c IBM Corp.
Bus 001 Device 001: ID 1d6b:0001
原来用了不一样的芯片,看来要重新编译内核了,重新配置内核,选上 ZyDAS ZD1211/ZD1211B USB-wireless support 即可,编译安装之后,还需要安装 zd1211-firmware,如果是 Gentoo 系统的话 emerge d1211-firmware 即可,然后 modprobe zd1211rw,但发现还有问题,报错:RF MAXIM_NEW_RF 0x8 is not supported,搜索一圈,应该是 zd1211 驱动的 BUG 吧,临时解决办法可以打上下面的 patch:
--- linux/drivers/net/wireless/zd1211rw/zd_rf.c 2009-02-18 13:38:12.000000000 +0000
+++ linux-mod/drivers/net/wireless/zd1211rw/zd_rf.c 2009-02-18 13:38:01.000000000 +0000
@@ -87,6 +87,7 @@
r = zd_rf_init_al7230b(rf);
break;
case UW2453_RF:
+ case MAXIM_NEW_RF:
r = zd_rf_init_uw2453(rf);
break;
default:
订阅:
博文 (Atom)

