关于智器marvell8686 WIFI驱动使用网络管理器HAL硬件抽象消息不对的解决方案!

 现象:


use libertas_sdio driver (2.6.24.2)

cd /sys/class/net/eth3/
/sys/devices/platform/s3c-hsmmc1.1/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/eth3

but use official driver marvell8686

eth0 is in
/sys/device/virtual/net/eth0

caused HAL can't know it is a real WLAN !

did official driver miss some issue ?

i obtain official marvell8686 driver from
http://zenvoid.org/software/qi-smartq/linux-kernel-src-2.6.24.7-smartq.tar.lzma


following use libertas_sdio driver is ok,can make HAL know it is a real
WLAN!

udi = '/org/freedesktop/Hal/devices/net_00_1a_6b_a3_0f_7a'
  info.capabilities = {'net', 'net.80211'} (string list)
  info.category = 'net.80211'  (string)
  info.parent =
'/org/freedesktop/Hal/devices/platform_s3c_hsmmc1_1_mmc_card_rca1_sdio1'
(string)
  info.product = 'WLAN Interface'  (string)
  info.subsystem = 'net'  (string)
  info.udi = '/org/freedesktop/Hal/devices/net_00_1a_6b_a3_0f_7a'
(string)
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'net'  (string)
  linux.sysfs_path =
'/sys/devices/platform/s3c-hsmmc1.1/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/eth3'  (st)
  net.80211.mac_address = 113474998138  (0x1a6ba30f7a)  (uint64)
  net.address = '00:1a:6b:a3:0f:7a'  (string)
  net.arp_proto_hw_id = 1  (0x1)  (int)
  net.interface = 'eth3'  (string)
  net.linux.ifindex = 2  (0x2)  (int)
  net.originating_device =
'/org/freedesktop/Hal/devices/platform_s3c_hsmmc1_1_mmc_card_rca1_sdio1'
(strin)

use officai marvell8686 driver is

udi = '/org/freedesktop/Hal/devices/net_00_1a_6b_a3_0f_7a'
  info.capabilities = {'net', 'net.80211'} (string list)
  info.category = 'net.80211'  (string)
  info.subsystem = 'net'  (string)
  info.udi = '/org/freedesktop/Hal/devices/net_00_1a_6b_a3_0f_7a'
(string)
  linux.subsystem = 'net'  (string)
  linux.sysfs_path = '/sys/devices/virtual/net/eth0'  (string)
=======>virtual one
  net.80211.mac_address = 113474998138  (0x1a6ba30f7a)  (uint64)
  net.address = '00:1a:6b:a3:0f:7a'  (string)
  net.arp_proto_hw_id = 1  (0x1)  (int)
  net.interface = 'eth0'  (string)
  net.linux.ifindex = 2  (0x2)  (int)
  net.originating_device = '/org/freedesktop/Hal/devices/computer'
(string)

 

 

解决方法:添加WIFI驱动hotplug,当总线检测代id相macth的设备或者驱动时调用,wlan_probe
->wlan_probe
->wlan_add_card
->sbi_register_dev
->priv->hotplug_device = &func->dev;这样priv->hotplug_device就指向了/sys/bus/sdio/devices下的设备节点描述结构体

 

而原版的驱动如果KERNEL没有选择CONFIG_SYSFS_DUPLICATE ,设备指向/sys/device/virtual,对于内核而言,这是一个虚拟设备,尽管网络协议层已经知道它是一个WLAN设备,但是KERNEL却不认识,就认为它是一个虚拟的网卡设备,导致HAL硬件抽像层获取WLAN的消息不对,使得网络管理器不工作。

 

代码修改:添加驱动向KERNEL的hotplug相关代码。

 

修改后的数据:

udi = '/org/freedesktop/Hal/devices/net_00_1a_6b_a3_0f_7a'
  info.capabilities = {'net', 'net.80211'} (string list)
  info.category = 'net.80211'  (string)
  info.subsystem = 'net'  (string)
  info.udi = '/org/freedesktop/Hal/devices/net_00_1a_6b_a3_0f_7a'  (string)
  linux.subsystem = 'net'  (string)
  linux.sysfs_path = '/sys/devices/platform/s3c-hsmmc1.1/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/eth3'  (st)
  net.80211.mac_address = 113474998138  (0x1a6ba30f7a)  (uint64)
  net.address = '00:1a:6b:a3:0f:7a'  (string)
  net.arp_proto_hw_id = 1  (0x1)  (int)
  net.interface = 'eth3'  (string)
  net.linux.ifindex = 4  (0x4)  (int)
  net.originating_device = '/org/freedesktop/Hal/devices/platform_s3c_hsmmc1_1_mmc_host_mmc_card_rca1_sdio1)

 

昨天下午工作效率太低,晚上上网查了一些资料,今天早上解决。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值