View Single Post
Old 09-29-2009, 08:02 PM   #7
GShock
Junior Member
GShock began at the beginning.
 
Posts: 6
Karma: 10
Join Date: Sep 2009
Device: SmartQ 7
Just got this info from this website: http://blog.csdn.net/hongjiujing/arc...6/4485665.aspx

Basically it seems that missing wifi was due to the virtual address they use to address the wifi. I am not expert....Hope some linux guru here will be able to explain further and enable us to directly modify the files in smartq to enable direct pointing to the wifi device and remove the virtual one....

关于智器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-smart...martq.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设备,但是KE RNEL却不认识,就认为它是一个虚拟的网卡设备,导致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 )


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