2、tiny210针对USI_WM-BN-BM-04的wifi的配置过程
(参看TINY210_wifi调试过程.doc) by joqian 2013-3-13
2.1 硬件配置
USI_WM-BN-BM-04涉及到的主要针脚为:
SDIO_D0, SDIO_D1, SDIO_D2, SDIO_D3,SDIO_VDD,SDIO_CMD,SDIO_CLK均为标准的SDIO接口对接;
SDIO_HOST_WAKE为向主机发起唤醒中断针脚;
WL_REG_ON为主机对wifi模块电源和reset控制针脚。
另外还有SPI和SDIO模式选择针脚,接地为SDIO模式。
2.2内核配置
2.2.1源码替换:
将\linux-3.0.8\drivers\net\wireless\bcmdhd替换为usi提供的bcmdhd文件
需要注意的是,该文件夹下的驱动之注册了驱动,而没有注册设备,所以加一个源文件device_04_wlan.c用于注册设备的。
2.2.2源码修改:
需要针对SDIO_HOST_WAKE和WL_REG_ON两个针脚进行配置:
1) SDIO_HOST_WAKE:用于主机中断,在cpu端为输入,起中断作用。
在device_04_wlan.c源码中有针已经做了配置
static struct resource brcm_wlan_resources[] = {
[0] = {
.name = "bcmdhd_wlan_irq",
.start = 40,
.end = 40,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
},
};
需要根据实际针脚重新配置。(40为eint[8])
2)WL_REG_ON为电源控制和reset脚:
需要在cpu端,配置为输出,以控制usi模块的wifi功能的reset。
这个可以在bcmdhd文件加下(即drivers\net\wireless\bcmdhd):
的Dhd_custom_gpio.c源码中的dhd_customer_gpio_wlan_ctrl(int onoff)函数对WL_REG_ON针脚的电平高低控制。
#define RST_GPIO_PIN S5PV210_GPH0(5)
static int brcm_wlan_power_off_test()
{
printk(KERN_INFO"%s Enter: power off\n", __func__);
/* setup the outputs and init values */
s3c_gpio_cfgpin(RST_GPIO_PIN, 0x1);
gpio_direction_output(RST_GPIO_PIN, 0);
gpio_set_value(RST_GPIO_PIN, 0);
msleep(10);
return 0;
}
static int brcm_wlan_power_on_test()
{
printk(KERN_INFO"%s Enter: power on\n", __func__);
/* setup the outputs and init values */
s3c_gpio_cfgpin(RST_GPIO_PIN, 0x1);
gpio_direction_output(RST_GPIO_PIN, 1);
gpio_set_value(RST_GPIO_PIN, 1);
msleep(10);
return 0;
}
/* Customer function to control hw specific wlan gpios */
void
dhd_customer_gpio_wlan_ctrl(int onoff)
{
switch (onoff) {
case WLAN_RESET_OFF:
WL_TRACE(("%s: call customer specific GPIO to insert WLAN RESET\n",
__FUNCTION__));
#ifdef CUSTOMER_HW
bcm_wlan_power_off(2);
#endif /* CUSTOMER_HW */
#ifdef CUSTOMER_HW2
wifi_set_power(0, 0);
#endif
brcm_wlan_power_off_test();
WL_ERROR(("=========== WLAN placed in RESET ========\n"));
break;
case WLAN_RESET_ON:
WL_TRACE(("%s: callc customer specific GPIO to remove WLAN RESET\n",
__FUNCTION__));
#ifdef CUSTOMER_HW
bcm_wlan_power_on(2);
#endif /* CUSTOMER_HW */
#ifdef CUSTOMER_HW2
wifi_set_power(1, 0);
#endif
brcm_wlan_power_on_test();
WL_ERROR(("=========== WLAN going back to live ========\n"));
break;
case WLAN_POWER_OFF:
WL_TRACE(("%s: call customer specific GPIO to turn off WL_REG_ON\n",
__FUNCTION__));
#ifdef CUSTOMER_HW
bcm_wlan_power_off(1);
#endif /* CUSTOMER_HW */
brcm_wlan_power_off_test();
break;
case WLAN_POWER_ON:
WL_TRACE(("%s: call customer specific GPIO to turn on WL_REG_ON\n",
__FUNCTION__));
#ifdef CUSTOMER_HW
bcm_wlan_power_on(1);
/* Lets customer power to get stable */
OSL_DELAY(200);
#endif /* CUSTOMER_HW */
brcm_wlan_power_on_test();
OSL_DELAY(200);
break;
}
}
2.2.3内核配置
make menuconfig
1)Networking support --->
Wireless --->
2)Device Drivers --->
Network device support --->
Wireless LAN --->
3)Device Drivers --->
MMC/SD/SDIO card support --->
2.3系统配置
2.3.1固件的打包:
1)需要将usi给的两个固件fw_bcmdhd.bin和bcmdhd.cal打包进系统中:
内核配置给定的路径为:
/system/etc/firmware/fw_bcmdhd.bin
/system/etc/wifi/bcmdhd.cal
但实际调试之后,路径为如下:其中bcmdhd.cal需要改名为nvram.txt
system/vendor/firmware/bcm43xx/fw_bcmdhd.bin
system/vendor/firmware/bcm43xx/nvram.txt
2)因为友善纸对tiny210加了一些wifi库文件,所以需要把它们去掉,路径为:
./system/lib/modules/3.0.8-FriendlyARM
将3.0.8-FriendlyARM重命名,或者删除。
2.3.2NL80211的配置:
tiny210中wpa_supplicant用的是wext,而usi的wifi采用的是NL80211。所以需要修改系统的配置:
1)将init.mini210.rc中的
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0
class main
socket wpa_wlan0 dgram 0660 wifi wifi
disabled
oneshot
改为:
service wpa_supplicant /system/bin/wpa_supplicant -Dnl80211-iwlan0
class main
socket wpa_wlan0 dgram 0660 wifi wifi
disabled
oneshot
2)在android-4.0.3_r1\device\friendly-arm\mini210下的
BoardConfigCommon.mk中的
# Connectivity - Wi-Fi
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_fawext
BOARD_WIFIHW_PRIVATE_LIB := lib_wifihw_fa
改成:
# Connectivity - Wi-Fi
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WLAN_DEVICE := bcmdhd
#BOARD_HOSTAPD_DRIVER := NL80211
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd
#BOARD_WIFIHW_PRIVATE_LIB := lib_wifihw_fa
3)将\android-4.0.3_r1\vendor\friendly-arm\mini210\下的wifi文件夹删掉。
并删除相关库文件(具体没测试,因为我是直接make clean的,下班了,让他在晚上编译),重新编译生成。
经过以上的配置整个系统应该就支持USI_WM-BN-BM-04的wifi了。