页面里模式显示不正确,如何修改
在wifi_overview.htm有:
'<strong><%:Mode%>:</strong> %s<br />' +
iw.ssid, iw.mode, iw.bssid,
<strong><%:Mode%>:</strong>显示内容对应feeds\luci\po\zh_CN、base.po
iw.mode才是关键,即重点在于iw携带的信息,但在wifi_overview.htm里什么也没找到
那么找wifi.lua吧,有local iw = luci.sys.wifi.getiwinfo(arg[1])
继续搜getiwinfo,在sys.lua里有function wifi.getiwinfo(ifname)
但是这个函数看的不太懂,LUCI 网上资料太少了,语法介绍的也少,不够应对这个函数
这里面有关键的一句local stat, iwinfo = pcall(require, "iwinfo"),什么意思呢
pcall说明:
如果在Lua中需要处理错误,需要使用pcall函数封装你的代码。
假定你想运行一段Lua代码,这段代码运行过程中可以捕捉所有的异常和错误。
第一步:将这段代码封装在一个函数内
第二步:使用pcall调用这个函数
require说明:
Lua 提供一个名为 require 的函数来加载模块,使用也很简单,它只有一个参数,这个参数就是要指定加载的模块名,例如:
require("<模块名>")
module.lua
然后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。
或者给加载的模块定义一个别名变量,方便调用
大致推测就是跟iwinfo相关的信息都收集起来,有:
·/package/network/utils/iwinfo
./feeds/luci/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua
./feeds/luci/applications/luci-statistics/luasrc/model/cbi/luci_statistics/iwinfo.lua
但是后面两个iwinfo.lua又看不懂,郁闷,不过iwinfo文件夹里面的东西就是好东西了
简单分析一下iwinfo里面的内容,文件有点多,而且有些c文件里面的内容很相似,这个过程有点复杂
分析和学习到的知识:
来自http://blog.csdn.net/dickjtk/article/details/11862815有:
Linux无线驱动接口有两种标准接口,wext(Wireless Extensions无线扩展接口)和nl80211接口
当时无线驱动的协议栈软件比较多,如开源项目hostap,madwifi,mac80211,ieee80211协议栈以及无线芯片厂商自己实现的协议栈,基本都使用wext接口。wext接口也逐渐成为一套标准的接口。在linux-2.6.18版本,wext和mac80211协议栈并入内核,成为linux kernel的一部分。wext接口随着802.11协议从802.11,802.11b,802.11a/g的发展,,其API也不断增加,伴随着就是其wext的版本号不断变化。
wext的接口实现上,应用层采用ioctl方式访问驱动,设置无线参数或者获取无线参数,配置无线驱动进行联网操作,但在linux-2.6.25(记得不是很清楚了,懒得确定了)之后,wext API接口版本停止在V22就不再进行更新了。而替代其的是nl80211接口
....那么现在可以初步断定,wl wext madwifi nl80211,这四个是无线驱动接口,那么到底用的死哪一个呢?
看Makefile ,有
ifneq ($(filter wl,$(IWINFO_BACKENDS)),) IWINFO_CFLAGS += -DUSE_WL IWINFO_LIB_OBJ += iwinfo_wl.o endif ifneq ($(filter madwifi,$(IWINFO_BACKENDS)),) IWINFO_CFLAGS += -DUSE_MADWIFI IWINFO_LIB_OBJ += iwinfo_madwifi.o endif ifneq ($(filter nl80211,$(IWINFO_BACKENDS)),) IWINFO_CFLAGS += -DUSE_NL80211 IWINFO_CLI_LDFLAGS += -lnl-tiny IWINFO_LIB_LDFLAGS += -lnl-tiny IWINFO_LIB_OBJ += iwinfo_nl80211.o endif
再找相关资料有:
(Linux的网络架构,图片上传太麻烦了,不搞了)
再进一步实验修改,确认使用的wext的无线驱动接口
那么iwinfo_wext.c就很重要了有:
int wext_get_mode(const char *ifname, int *buf) { struct iwreq wrq; if(wext_ioctl(ifname, SIOCGIWMODE, &wrq) >= 0) { switch(wrq.u.mode) { ... }}}修改吧,OK
注意把makemenuconfig里的iwinfo选上,串口iwinfo也有打印信息出来。