無線 dongle 認識工作
ええと、ここを見つつ続き、というか Android のコンパイルを明日のためにヤッておきます。
とりあえず
firmware が無い、という事でググッてみたら、でびあんにはパケジがある模様。
# apt-cache search zd1211 zd1211-firmware - Firmware images for the zd1211 and zd1211rw wireless drivers #
入れてみた。
# dpkg -L zd1211-firmware /. /usr /usr/lib /usr/lib/hotplug /usr/lib/hotplug/firmware /usr/share /usr/share/doc /usr/share/doc/zd1211-firmware /usr/share/doc/zd1211-firmware/changelog.Debian.gz /usr/share/doc/zd1211-firmware/copyright /usr/share/doc/zd1211-firmware/README /lib /lib/firmware /lib/firmware/zd1211 /lib/firmware/zd1211/zd1211b_uphr /lib/firmware/zd1211/zd1211b_ub /lib/firmware/zd1211/zd1211b_ur /lib/firmware/zd1211/zd1211b_uphm /lib/firmware/zd1211/zd1211b_uph /lib/firmware/zd1211/zd1211_ur /lib/firmware/zd1211/zd1211_ub /lib/firmware/zd1211/zd1211_uph /lib/firmware/zd1211/zd1211_uphm /lib/firmware/zd1211/zd1211_uphr /usr/lib/hotplug/firmware/zd1211-WS11UPhm.fw /usr/lib/hotplug/firmware/zd1211-WS11Ub.fw /usr/lib/hotplug/firmware/zd1211-WS11UPh.fw /usr/lib/hotplug/firmware/zd1211-WS11UPhR.fw /usr/lib/hotplug/firmware/zd1211-WS11Ur.fw #
/lib/firmware/zd1211 をまるっと持ってけば良いのかな。という事は、vendor/atmark-techno/armadillo500fx 配下に
- zd1211rw.ko
- 上記の /lib/firmware/zd1211
をコピーしておく方向で。
Android なイメージ作成
順に参考コンテンツを見つつチェキ。
- system.prop は修正の必要ナシ
- デバイスファイルが wlan0 として認識されるため
- wifi.c は zd1211rw を使う形で修正
- init.armadillo500fx.rc についても wpa_supplicant 関連以外の wlan0 なソレは修正不要
- AndroidBoard.mk
- firmware をコピる場所は元の文書とは異ります
- dhcpcd.conf も修正不要
という事で、修正を盛り込みます。最終的な git diff の出力が以下。
diff --git a/hardware/libhardware_legacy/wifi/wifi.c b/hardware/libhardware_legacy/wifi/wifi.c index 4b0b7a8..263f01e 100644 --- a/hardware/libhardware_legacy/wifi/wifi.c +++ b/hardware/libhardware_legacy/wifi/wifi.c @@ -72,6 +72,9 @@ static const char RT2X00_LIB_DRIVER_MODULE_PATH[] = "/system/lib/modules/rt static const char RT2X00_LIB_USB_DRIVER_MODULE_NAME[] = "rt2x00usb"; static const char RT2X00_LIB_USB_DRIVER_MODULE_TAG[] = "rt2x00usb"; static const char RT2X00_LIB_USB_DRIVER_MODULE_PATH[] = "/system/lib/modules/rt2x00usb.ko"; +static const char ZD1211_LIB_USB_DRIVER_MODULE_NAME[] = "zd1211rw"; +static const char ZD1211_LIB_USB_DRIVER_MODULE_TAG[] = "zd1211rw"; +static const char ZD1211_LIB_USB_DRIVER_MODULE_PATH[] = "/system/lib/modules/zd1211rw.ko"; static const char DRIVER_MODULE_ARG[] = WIFI_DRIVER_MODULE_ARG; static const char FIRMWARE_LOADER[] = WIFI_FIRMWARE_LOADER; @@ -180,9 +183,7 @@ int wifi_load_driver() return 0; } - insmod(RT2X00_LIB_DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); - insmod(RT2X00_LIB_USB_DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); - insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); + insmod(ZD1211_LIB_USB_DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); property_set(DRIVER_PROP_NAME, "ok"); property_set("ctl.start", 0); sched_yield(); @@ -205,9 +206,7 @@ int wifi_unload_driver() { int count = 20; /* wait at most 10 seconds for completion */ - if ((rmmod(DRIVER_MODULE_NAME) == 0) && - (rmmod(RT2X00_LIB_USB_DRIVER_MODULE_NAME) == 0) && - (rmmod(RT2X00_LIB_DRIVER_MODULE_NAME) == 0)) { + if ((rmmod(ZD1211_LIB_USB_DRIVER_DRIVER_MODULE_NAME) == 0) { while (count-- > 0) { if (!check_driver_loaded()) break; diff --git a/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_ieee80211.c b/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_ieee80211.c index d8dc41e..7682365 100644 --- a/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_ieee80211.c +++ b/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_ieee80211.c @@ -48,6 +48,7 @@ static const struct channel_range channel_ranges[] = { * 1-13. The ZyDAS devices still use the old region code but are * designed to allow the extra channel access in Japan. */ { ZD_REGDOMAIN_JAPAN_ADD, 1, 15 }, + { 0x49, 1, 15}, }; static const struct channel_range *zd_channel_range(u8 regdomain) diff --git a/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_usb.c b/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_usb.c index 6cdad97..0b5c503 100644 --- a/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd_usb.c @@ -81,6 +81,7 @@ static struct usb_device_id usb_ids[] = { { USB_DEVICE(0x0cde, 0x001a), .driver_info = DEVICE_ZD1211B }, { USB_DEVICE(0x0586, 0x340a), .driver_info = DEVICE_ZD1211B }, { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B }, + { USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B }, /* "Driverless" devices that need ejecting */ { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER }, { USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER }, diff --git a/vendor/atmark-techno/armadillo500fx/AndroidBoard.mk b/vendor/atmark-techno/armadillo500fx/AndroidBoard.mk index 9277674..ec5d25f 100644 --- a/vendor/atmark-techno/armadillo500fx/AndroidBoard.mk +++ b/vendor/atmark-techno/armadillo500fx/AndroidBoard.mk @@ -16,10 +16,8 @@ include $(BUILD_KEY_CHAR_MAP) # prebuilt wifi driver # PRODUCT_COPY_FILES += \ - $(LOCAL_PATH)/rt73usb.ko:system/lib/modules/rt73usb.ko \ - $(LOCAL_PATH)/rt2x00usb.ko:system/lib/modules/rt2x00usb.ko \ - $(LOCAL_PATH)/rt2x00lib.ko:system/lib/modules/rt2x00lib.ko \ - $(LOCAL_PATH)/rt73.bin:system/etc/firmware/rt73.bin + $(LOCAL_PATH)/zd1211rw.ko:system/lib/modules/zd1211rw.ko \ + $(LOCAL_PATH)/zd1211:system/lib/firmware/zd1211 # board specific init.rc # diff --git a/vendor/atmark-techno/armadillo500fx/init.armadillo500fx.rc b/vendor/atmark-techno/armadillo500fx/init.armadillo500fx.rc index bf74997..874e434 100644 --- a/vendor/atmark-techno/armadillo500fx/init.armadillo500fx.rc +++ b/vendor/atmark-techno/armadillo500fx/init.armadillo500fx.rc @@ -114,7 +114,12 @@ loglevel 3 #WIFI mkdir /data/misc/wifi 0770 wifi wifi mkdir /data/misc/wifi/sockets 0770 wifi wifi - mkdir /data/system/wifi/wpa_supplicant 0770 wifi wifi + chmod 0770 /data/misc/wifi + chmod 0660 /data/misc/wifi/wpa_supplicant.conf +# mkdir /data/system/wifi/wpa_supplicant 0770 wifi wifi + mkdir /data/system/wifi/wpa_supplicant 0771 wifi wifi + chmod 0771 /data/system/wifi/wpa_supplicant + mkdir /data/misc/dhcp 0770 dhcp dhcp chown dhcp dhcp /data/misc/dhcp
ちょっと init.armadillo500fx.rc の修正が微妙です。これで make 着手。
$ cd $Android $ source ./build/envsetup.sh $ choosecombo 1 1 armadillo500fx 3 $ make
さ、こんどは SurfaceView 方面について確認ス。
げ
コンパイルエラーが出てるorz
hardware/libhardware_legacy/wifi/wifi.c: In function 'wifi_unload_driver': hardware/libhardware_legacy/wifi/wifi.c:209: error: 'ZD1211_LIB_USB_DRIVER_DRIVER_MODULE_NAME' undeclared (first use in this function) hardware/libhardware_legacy/wifi/wifi.c:209: error: (Each undeclared identifier is reported only once hardware/libhardware_legacy/wifi/wifi.c:209: error: for each function it appears in.) hardware/libhardware_legacy/wifi/wifi.c:209: error: expected ')' before '{' token hardware/libhardware_legacy/wifi/wifi.c:221: error: expected expression before '}' token hardware/libhardware_legacy/wifi/wifi.c:221: error: no return statement in function returning non-void make: *** [out/target/product/armadillo500fx/obj/SHARED_LIBRARIES/libhardware_legacy_intermediates/wifi/wifi.o] エラー 1
修正して make 再実行。
又出た
ardware/libhardware_legacy/wifi/wifi.c: In function 'wifi_unload_driver': hardware/libhardware_legacy/wifi/wifi.c:209: error: expected ')' before '{' token hardware/libhardware_legacy/wifi/wifi.c:221: error: expected expression before '}' token hardware/libhardware_legacy/wifi/wifi.c:221: error: no return statement in function returning non-void make: *** [out/target/product/armadillo500fx/obj/SHARED_LIBRARIES/libhardware_legacy_intermediates/wifi/wifi.o] エラー 1
何しとるんだorz
git diff の以下の部分が駄目な部分です。
@@ -205,9 +206,7 @@ int wifi_unload_driver() { int count = 20; /* wait at most 10 seconds for completion */ - if ((rmmod(DRIVER_MODULE_NAME) == 0) && - (rmmod(RT2X00_LIB_USB_DRIVER_MODULE_NAME) == 0) && - (rmmod(RT2X00_LIB_DRIVER_MODULE_NAME) == 0)) { + if ((rmmod(ZD1211_LIB_USB_DRIVER_DRIVER_MODULE_NAME) == 0) { while (count-- > 0) { if (!check_driver_loaded()) break;
マクロが嘘だわ括弧が多いわ。
終了
したんですが微妙。
make: *** `out/target/product/armadillo500fx/system/lib/modules/zd1211rw.ko' に必要なターゲット `vendor/atmark-techno/armadillo500fx/zd1211rw.ko' を make するルールがありません. 中止.
とほほ。ファイルコピーしてないし。
$ cp kernel/arm/imx/armadillo-500fx/drivers/net/wireless/zd1211rw/zd1211rw.ko vendor/atmark-techno/armadillo500fx/. $ cp -r /lib/firmware/zd1211/ vendor/atmark-techno/armadillo500fx/. $ make
これでどうかいな。
なんとかなりますように
と祈りつつ放置。