[android-porting] Porting Wifi driver on Android

Gaan
Tue, 23 Feb 2010 12:05:26 -0800

Hi everyone,
I'm porting wifi driver (Ralink chip) on Android 2.0.1 board.
first of all I made some modifies

(1) modify build/target/board/generic/BoardConfig.mk

add HAVE_CUSTOM_WIFI_DRIVER_2 := true



(2) Android using wpa_supplicant to management wifi. Make sure
external/wpa_supplicant/.config is looking like this

# CONFIG_NO_WPA=y

CONFIG_OS=unix

CONFIG_IEEE8021X_EAPOL=y

CONFIG_EAP_MD5=y

CONFIG_EAP_MSCHAPV2=y

CONFIG_EAP_TLS=y

CONFIG_EAP_PEAP=y

CONFIG_EAP_TTLS=y

CONFIG_EAP_GTC=y

CONFIG_EAP_OTP=y

CONFIG_EAP_SIM=y

CONFIG_EAP_AKA=y

CONFIG_EAP_PSK=y

CONFIG_EAP_SAKE=y

CONFIG_EAP_GPSK=y

CONFIG_EAP_PAX=y

CONFIG_EAP_LEAP=y

# CONFIG_EAP_FAST=y

CONFIG_PKCS12=y

# CONFIG_PCSC=y

CONFIG_SMARTCARD=y

CONFIG_WIRELESS_EXTENSION=y

CONFIG_CTRL_IFACE=y

# CONFIG_DRIVER_HOSTAP=y

# CONFIG_DRIVER_HERMES=y

# CONFIG_DRIVER_MADWIFI=y

# CONFIG_DRIVER_ATMEL=y

CONFIG_DRIVER_WEXT=y

# CONFIG_DRIVER_NDISWRAPPER=y

# CONFIG_DRIVER_BROADCOM=y

# CONFIG_DRIVER_IPW=y

# CONFIG_DRIVER_BSD=y

# CONFIG_DRIVER_NDIS=y

# CONFIG_DRIVER_TEST=y

# CONFIG_DRIVER_CUSTOM=y

# CONFIG_DEBUG_FILE=y

# CONFIG_INTERNAL_LIBTOMMATH=y



(3) Enable wpa_supplicant compile option, modify external/
wpa_supplicant/Android.mk

(3.1)

LOCAL_PATH := $(call my-dir)



WPA_BUILD_SUPPLICANT := true

ifneq ($(TARGET_SIMULATOR),true)

ifneq ($(BOARD_WPA_SUPPLICANT_DRIVER),)

WPA_BUILD_SUPPLICANT := true

CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER) = y

endif



(3.2) remove mark symbol, and look like this

########################


local_target_dir := $(TARGET_OUT)/etc/wifi



include $(CLEAR_VARS)

LOCAL_MODULE := wpa_supplicant.conf

LOCAL_MODULE_TAGS := user

LOCAL_MODULE_CLASS := ETC

LOCAL_MODULE_PATH := $(local_target_dir)

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

#

########################



(4) Modify wpa_supplicant setting file, and out/target/product/
generic/system/etc/wifi/ will be created after #make in step (3) out/
target/product/generic/system/etc/wifi/wpa_supplicant.conf



(4.1)

# The value can be set to, e.g., udp (ctrl_interface=udp)

#

# For Windows Named Pipe: This value can be used to set the security
descriptor

# for controlling access to the control interface. Security descriptor
can be

# set using Security Descriptor String Format (see http://msdn.microsoft.com/

# library/default.asp?url=/library/en-us/secauthz/security/

# security_descriptor_string_format.asp). The descriptor string needs
to be

# prefixed with SDDL=. For example, ctrl_interface=SDDL=D: would set
an empty

# DACL (which will reject all connections). See README-Windows.txt for
more

# information about SDDL string format.

#

#ctrl_interface=wlan0

ctrl_interface=DIR=/data/system/wpa_supplicant/ GROUP=system



(4.2) setting default AccessPoint value:



# Only WPA-PSK is used. Any valid cipher combination is accepted.

network={

ssid="example" // AP name

proto=WPA //encypted method

key_mgmt=WPA-PSK //using psk

pairwise=CCMP TKIP

group=CCMP TKIP WEP104 WEP40


psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb

priority=2

}



(5) Add directory which is needed when enable wifi under linux,

System/core/rootdir/init.rc





# give system access to wpa_supplicant.conf for backup and restore

mkdir /data/misc/wifi 0770 wifi wifi

chmod 0770 /data/misc/wifi

chmod 0660 /data/misc/wifi/wpa_supplicant.conf

mkdir /data/misc/wifi/sockets 0770 wifi wifi

mkdir /data/misc/android 0770 wifi wifi

mkdir /data/system/wpa_supplicant 0770 wifi wifi

mkdir /data/misc/dhcp 0770 dhcp dhcp

chown dhcp dhcp /data/misc/dhcp

chmod 0555 /system/bin/busybox



(6) Modify HAL code, hardware/libhardware_legacy/wifi/wifi.c

Re-define the include path



#ifndef WIFI_DRIVER_MODULE_PATH

//#define WIFI_DRIVER_MODULE_PATH "/system/lib/modules/wlan.ko"

#define WIFI_DRIVER_MODULE_PATH "/lib/modules/rt3070sta.ko"

#endif

#ifndef WIFI_DRIVER_MODULE_NAME

//#define WIFI_DRIVER_MODULE_NAME "wlan"

#define WIFI_DRIVER_MODULE_NAME "ra0"

#endif

#ifndef WIFI_DRIVER_MODULE_ARG

#define WIFI_DRIVER_MODULE_ARG ""

#endif

#ifndef WIFI_FIRMWARE_LOADER

#define WIFI_FIRMWARE_LOADER ""

#endif

#define WIFI_TEST_INTERFACE "sta"

(7) Make and place driver relative file after boot.
place rt3070sta.ko at /lib/modules/
place RT2870STA.dat at /etc/Wireless/RT2870STA/ (it is driver
needed)
place libiw.so.29 at /lib (it is driver needed)

(8) select "Settings" -> "Wireless&networks" -> "Wi-Fi" in Android
I found the wifi module has been inserted. and I got the logcat.
====================
D/SettingsWifiEnabler( 1153): Received wifi state changed from
Disabled to Enabling
rtusb init --->
ra0 (usb): not using net_device_ops yet
usbcore: registered new interface driver rt2870

====================

but soon it fail and throws the log
====================
init: no such service 'wpa_supplicant'
====================

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android(安卓)Intent and Intent-filter
  2. android]Android 线程优先级修改
  3. location of the android sdk has not be
  4. Android6.0 Fix launcher3 crash when se
  5. 理解Android的context
  6. The application has stopped unexpected
  7. Android AnimationSet详解
  8. Android 代码实现重启
  9. Android Initialization Process
  10. 新sdk(5.0+)eclipse建android工程报错