wifi driver 分成兩部份: driver ko & proprietary bin。
- driver ko: 就是 kernel interface。 -- 這部份有 source code
- proprietary bin : driver 啟動時,load 進 wifi module。 -- 這部份沒有 source code
android framework 中,他是在: /system/wlan/atheros/
裡面有兩個 folder ,分別是 driver ko 跟 proprietary bin。
要 build 這個 folder ,還要修改BoardConfig.mk
因為 Android.mk 有:
ifneq ($(TARGET_SIMULATOR),true)
ifeq ($(BOARD_WLAN_CHIP_AR6003), true)
# The board config file for the product must define BOARD_WLAN_ATHEROS_SDK
# in order to build the atheros wlan components.
ifdef BOARD_WLAN_ATHEROS_SDK
include $(BOARD_WLAN_ATHEROS_SDK)/host/Android.mk
include $(BOARD_WLAN_ATHEROS_SDK)-proprietary/host/Android.mk
endif
endif
endif
所以這個 folder 可以同時放很多版本的 sdk,然後由 BoardConfig.mk 指定要使用的版本。修改完 BoardConfig.mk 後,就可以到 /system/wlan/atheros 去 build (mm)。
結果出現 error : ATH_LINUXPATH 沒定義。
到 sdk ../host/Android.mk 去看,發現有針對 TARGET_PRODUCT 作 case build。
所以TARGET_PRODUCT name 有改的,他就不知道了。
改一下,把自己的 product name 加進去。 --- OK
driver OK!
接著是 helper tool ..
先參考 init.rc 看一下啟動的 script tool 是...
好像只有設定 wifi prop 和用 wlan_tool啟動 wpa_supplicant service
發現 imx5x/imx5x.mk 差異頗大..
wlan_tool 包含在 sdk 裡面。
wpa_supplicant 有三個版本,檢查各自的 Android,mk 可以知道:
- wpa_supplicant : WPA_SUPPLICANT_VERSION := VER_0_5_X
- wpa_supplicant_6 : ifeq ($(WPA_SUPPLICANT_VERSION),VER_0_6_X)
- wpa_supplicant_ath : ifeq ($(WPA_SUPPLICANT_VERSION),VER_0_8_ATHEROS)
WPA_SUPPLICANT_VERSION := VER_0_8_ATHEROS
init.rc:
wifi 需要:
- /data/misc/wifi 目錄
- /data/misc/wifi/wpa_supplicant.conf 檔案
- /data/system/wpa_supplicant 目錄
setprop wifi.interface wlan0
mkdir /data/misc/wifi/sockets 0770 wifi wifi
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp
另外這是 dhcpcd client daemon
service dhcpcd_wlan0 /system/bin/logwrapper /system/bin/dhcpcd -d -B wlan0
disabled
oneshot
還有 wpa_supplicant , wlan service:
service wpa_supplicant /system/bin/wlan_tool wpa_supplicant
socket wpa_wlan0 dgram 660 root wifi
disabled
oneshot
service wlan_tool /system/bin/wlan_tool
oneshot
另外,wifi 的 jni 中有實做的底層,會在 hardware/libhardware_legacy 的 wifi folder 中。jni 所 include 的 wifi.h ,就是再 libhardware_legacy/include
沒有留言:
張貼留言