約 4,324,737 件
https://w.atwiki.jp/is01rebuild/pages/34.html
Android の画面上で無線LANを有効にするには…? このページは、無線LANを有効にするからの続きのページです。 wpa_supplicant のクライアントとして Android を認識させる wrapper の役割になります。 下記を編集… $ANDROID_SRC/hardware/libhardware_legacy/wifi/wifi.c する…、のだが…、 これをとりあえず動くようにするだけで…、結構かかりました。。。 しかも、ソースコードはデバッグ情報出力でズタボロ。。。 Android の一次情報をしっかり読んでいれば分かるんでしょうが、 エラー&トライのような感じで。。。Androidの wext がドライバに要求するコマンドを 実ドライバにバイパスしないといけないのだが、面倒なので無視する事にした。 後で、wext の要求を見てどうするか考える。 そうして出来たのが下記コード…。もう、きっちり型変換はしてないし、 usleepはいい加減な値だし、driver の有効化の部分は一応チェックは入れたがまだ甘いし。 本来は Android.mk で指定しなければならない、定数などはハードコーディングしているし…。 文字列ポインタや文字数は少なければ安全だろうと…いうことで。 本ページサイトの情報は全て無保証であるがままです。 かなり不安定ですので、そのまま実用には耐えません。 それなりに使えるようになっています、デバッグでは無いときはlog出力コメントアウトするのがオススメ。 Ver.0.0.2α 初期公開から更新しました。 2010/12/31 13 20) Ver.0.0.3α_20110101_00 若干、安定化させました (2011/01/01 02 18) 無効化しているコマンドですが、本来的には reply ポインタに文字列を返さなければいけません。 そこに、len=0にしてリターンしていますが、上位層及び下位層の影響範囲を調べていません。 無線LANアクセスポイントの新規追加できません。(1.6の時に接続していた先は大丈夫と思います) データ通信速度取得できません。 無線LAN RSSI 取得出来ません。 Ver.0.0.4α_20110105_00 IS01向けwpa_supplicant GPLソースマージ。コマンド無視部分をコメントアウト (2011/01/05 19 05) IS01向けGPLソースの external/wpa_supplicant/driver_wext.c を利用する事で、下記コードの wifi_send_command() からswitch文をごっそり削除できます。RSSIの取得には対応してないようなので、後で検討します。下記コードはIS01向けGPLソースの external/wpa_supplicant/driver_wext.c をマージした場合の wifi.c になります。マージしてない場合は、switch文部分のコメント一連のコメントを外してして下さい。 fi01氏よりの情報にてGUIにおいてもRSSIの取得が可能になりました。 無線LANアクセスポイントの新規追加、検証していません。 データ通信速度取得できるようになりました。 無線LAN RSSI 取得できるようになりました。 /* * Copyright 2008, The Android Open Source Project * Copyright 2011, RO178 is01rebuid * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http //www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include stdlib.h #include fcntl.h #include errno.h #include string.h #include "hardware_legacy/wifi.h" #include "libwpa_client/wpa_ctrl.h" #define LOG_TAG "WifiHW" #include "cutils/log.h" #include "cutils/memory.h" #include "cutils/misc.h" #include "cutils/properties.h" #include "private/android_filesystem_config.h" #ifdef HAVE_LIBC_SYSTEM_PROPERTIES #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ #include sys/_system_properties.h #endif static struct wpa_ctrl *ctrl_conn; static struct wpa_ctrl *monitor_conn; extern int do_dhcp(); extern int ifc_init(); extern void ifc_close(); extern char *dhcp_lasterror(); extern void get_dhcp_info(); extern int init_module(void *, unsigned long, const char *); extern int delete_module(const char *, unsigned int); static char iface[PROPERTY_VALUE_MAX]; // TODO use new ANDROID_SOCKET mechanism, once support for multiple // sockets is in #ifndef WIFI_DRIVER_MODULE_PATH #define WIFI_DRIVER_MODULE_PATH "/system/lib/modules/wlan.ko" #endif #ifndef WIFI_DRIVER_MODULE_NAME #define WIFI_DRIVER_MODULE_NAME "wlan" #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" #define WIFI_DRIVER_LOADER_DELAY2000000 static const char WLAN0_DEVICE[] = "/sys/devices/platform/msm_sdcc.1/mmc_host/mmc1/mmc1 0001/mmc1 0001 1/net/wlan0/wireless/status"; // "/sys/class/net/wlan0"; static const char IFACE_DIR[] = "/data/misc/wifi/sockets"; //"/data/system/wpa_supplicant"; static const char DRIVER_MODULE_NAME[] = "unifi_sdio.ko"; //WIFI_DRIVER_MODULE_NAME; static const char DRIVER_MODULE_TAG[] = "unifi_sdio.ko"; // WIFI_DRIVER_MODULE_NAME; static const char DRIVER_MODULE_PATH[] = "/system/lib/modules/unifi_sdio.ko"; //WIFI_DRIVER_MODULE_PATH; static const char DRIVER_MODULE_ARG[] = ""; //WIFI_DRIVER_MODULE_ARG; static const char FIRMWARE_LOADER[] = ""; //WIFI_FIRMWARE_LOADER; static const char DRIVER_PROP_NAME[] = "wlan.driver.status"; static const char SUPPLICANT_NAME[] = "wpa_supplicant"; static const char SUPP_PROP_NAME[] = "init.svc.wpa_supplicant"; static const char SUPP_CONFIG_TEMPLATE[]= "/system/etc/wifi/wpa_supplicant.conf"; static const char SUPP_CONFIG_FILE[] = "/data/misc/wifi/wpa_supplicant.conf"; static const char MODULE_FILE[] = "/proc/modules"; static int insmod(const char *filename, const char *args) { LOGD( "wifi %s() function in", __FUNCTION__ ); /* void *module; unsigned int size; int ret; module = load_file(filename, size); if (!module) return -1; ret = init_module(module, size, args); free(module); return ret; */ int ret; char command[]="echo 1 /sys/devices/platform/bwpm/wifi"; char command2[]="echo 1 /sys/bus/platform/drivers/msm_sdcc/msm_sdcc.1/polling"; property_set( "ctl.stop" , "dhcpcd" ); sched_yield(); //property_set( "ctl.stop " , "wpa_supplicant" ); //sched_yield(); ret=system(command); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command ,ret); sched_yield(); usleep(100000); ret=system(command2); sched_yield(); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command2 , ret ); int maxtry = 10; char text[256]; while (maxtry-- 0) { if (access( WLAN0_DEVICE , R_OK ) == 0) { FILE *fp; if ((fp = fopen( WLAN0_DEVICE , "r")) != NULL ) { fgets(text, 256, fp); LOGV( "wifi %s() wlan0 status=%s" , __FUNCTION__ , text ); if ( strncmp( text , "0x0" , 3 ) == 0) { LOGD( "wifi %s() wlan0 enabled!" , __FUNCTION__ ); return 0; } fclose(fp); } } else LOGV( "wifi %s() wait for enable wlan0 ...." , __FUNCTION__ ); usleep(500000); } return -1; } static int rmmod(const char *modname) { LOGD( "wifi %s() function in", __FUNCTION__ ); /* int ret = -1; int maxtry = 10; while (maxtry-- 0) { ret = delete_module(modname, O_NONBLOCK | O_EXCL); if (ret 0 errno == EAGAIN) usleep(500000); else break; } */ int ret=-1; char command[]="echo 0 /sys/devices/platform/bwpm/wifi"; char command2[]="echo 0 /sys/bus/platform/drivers/msm_sdcc/msm_sdcc.1/polling"; ret=system(command); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command ,ret); usleep(200000); ret=system(command2); LOGD( "wifi %s() %s ret=%d" , __FUNCTION__ , command2 , ret ); int maxtry = 50; while (maxtry-- 0) { if ( (ret=access( WLAN0_DEVICE , R_OK )) == 0) { LOGD( "wifi %s() wait for disable wlan0 ...." , __FUNCTION__ ); usleep(100000); } else { LOGD("wifi %s() wlan0 driver Disabled! return " , __FUNCTION__ ); return 0; } } if (ret == 0) LOGE("wifi %s() Unable to disable wlan0 driver return 0;", __FUNCTION__); return -1; } int do_dhcp_request(int *ipaddr, int *gateway, int *mask, int *dns1, int *dns2, int *server, int *lease) { LOGD( "wifi %s() function in", __FUNCTION__ ); /* For test driver, always report success */ if (strcmp(iface, WIFI_TEST_INTERFACE) == 0) return 0; if (ifc_init() 0) return -1; LOGD( "wifi %s() sleep 1sec...." , __FUNCTION__ ); usleep(1000000); if (do_dhcp(iface) 0) { ifc_close(); return -1; } ifc_close(); get_dhcp_info(ipaddr, gateway, mask, dns1, dns2, server, lease); return 0; } const char *get_dhcp_error_string() { LOGD( "wifi %s() function in", __FUNCTION__ ); return dhcp_lasterror(); } static int check_driver_loaded() { char driver_status[PROPERTY_VALUE_MAX]; FILE *proc; char line[sizeof(DRIVER_MODULE_TAG)+10]; LOGD( "wifi %s() function in", __FUNCTION__ ); if (!property_get(DRIVER_PROP_NAME, driver_status, NULL) || strcmp(driver_status, "ok") != 0) { LOGD( "wifi %s() driver not loaded.", __FUNCTION__ ); return 0; /* driver not loaded */ } /* * If the property says the driver is loaded, check to * make sure that the property setting isn t just left * over from a previous manual shutdown or a runtime * crash. */ if ((proc = fopen(MODULE_FILE, "r")) == NULL) { LOGW("wifi %s() Could not open %s %s", __FUNCTION__ , MODULE_FILE, strerror(errno)); LOGW("wifi %s() property_set( \"%s\" , \"unloaded\");", __FUNCTION__ , DRIVER_PROP_NAME ); property_set(DRIVER_PROP_NAME, "unloaded"); return 0; } while ((fgets(line, sizeof(line), proc)) != NULL) { if (strncmp(line, DRIVER_MODULE_TAG, strlen(DRIVER_MODULE_TAG)) == 0) { fclose(proc); LOGD( "wifi %s() driver loaded", __FUNCTION__ ); return 1; } } fclose(proc); LOGD( "wifi %s() property_set( \"%s\" , \"unloaded\");",__FUNCTION__ , DRIVER_PROP_NAME ); property_set(DRIVER_PROP_NAME, "unloaded"); return 0; } int wifi_load_driver() { LOGD( "wifi %s() function in", __FUNCTION__ ); char driver_status[PROPERTY_VALUE_MAX]; int count = 100; /* wait at most 20 seconds for completion */ if (check_driver_loaded()) { return 0; } LOGD( "wifi %s() check driver .... true.",__FUNCTION__); if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) 0) { LOGE( "wifi %s() try insmod %s %s ....false,",__FUNCTION__,DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); return -1; } LOGD( "wifi %s() try insmod %s %s ....true.",__FUNCTION__,DRIVER_MODULE_PATH, DRIVER_MODULE_ARG); if (strcmp(FIRMWARE_LOADER,"") == 0) { LOGD( "wifi %s() none FIRMWARE_LOADER." , __FUNCTION__); LOGD( "wifi %s() sleep %dusec...." , __FUNCTION__ , WIFI_DRIVER_LOADER_DELAY ); usleep(WIFI_DRIVER_LOADER_DELAY); LOGD( "wifi %s() property_set( \"%s\", \"ok\" ) ." , DRIVER_PROP_NAME ,__FUNCTION__); property_set(DRIVER_PROP_NAME, "ok"); } else { LOGD( "wifi %s() property_set( ctl.start, %s )",__FUNCTION__ , FIRMWARE_LOADER ); property_set("ctl.start", FIRMWARE_LOADER); } sched_yield(); while (count-- 0) { usleep(200000); if (property_get(DRIVER_PROP_NAME, driver_status, NULL)) { if (strcmp(driver_status, "ok") == 0) { LOGD( "wifi %s() driver status ... true",__FUNCTION__); return 0; } else if (strcmp(DRIVER_PROP_NAME, "failed") == 0) { wifi_unload_driver(); LOGD( "wifi %s() call driver unload",__FUNCTION__); return -1; } } } property_set(DRIVER_PROP_NAME, "timeout"); wifi_unload_driver(); return -1; } int wifi_unload_driver() { LOGD( "wifi %s() function in", __FUNCTION__ ); int count = 20; /* wait at most 10 seconds for completion */ if (rmmod(DRIVER_MODULE_NAME) == 0) { while (count-- 0) { if (!check_driver_loaded()) break; usleep(500000); } if (count) { return 0; } return -1; } else return -1; return 0; } int ensure_config_file_exists() { LOGD( "wifi %s() function in", __FUNCTION__ ); char buf[2048]; int srcfd, destfd; int nread; if (access(SUPP_CONFIG_FILE, R_OK|W_OK) == 0) { return 0; } else if (errno != ENOENT) { LOGE("wifi %s() Cannot access \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_FILE, strerror(errno)); return -1; } srcfd = open(SUPP_CONFIG_TEMPLATE, O_RDONLY); if (srcfd 0) { LOGE("wifi %s() Cannot open \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_TEMPLATE, strerror(errno)); return -1; } destfd = open(SUPP_CONFIG_FILE, O_CREAT|O_WRONLY, 0660); if (destfd 0) { close(srcfd); LOGE("wifi %s() Cannot create \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_FILE, strerror(errno)); return -1; } while ((nread = read(srcfd, buf, sizeof(buf))) != 0) { if (nread 0) { LOGE("wifi %s() Error reading \"%s\" %s", __FUNCTION__ , SUPP_CONFIG_TEMPLATE, strerror(errno)); close(srcfd); close(destfd); unlink(SUPP_CONFIG_FILE); return -1; } write(destfd, buf, nread); } close(destfd); close(srcfd); if (chown(SUPP_CONFIG_FILE, AID_SYSTEM, AID_WIFI) 0) { LOGE("wifi %s() Error changing group ownership of %s to %d %s", __FUNCTION__ , SUPP_CONFIG_FILE, AID_WIFI, strerror(errno)); unlink(SUPP_CONFIG_FILE); return -1; } return 0; } int wifi_start_supplicant() { char supp_status[PROPERTY_VALUE_MAX] = { \0 }; int count = 200; /* wait at most 20 seconds for completion */ #ifdef HAVE_LIBC_SYSTEM_PROPERTIES const prop_info *pi; unsigned serial = 0; #endif LOGD("wifi %s() function in" , __FUNCTION__ ); /* Check whether already running */ if (property_get(SUPP_PROP_NAME, supp_status, NULL) strcmp(supp_status, "running") == 0) { LOGD("wifi %s() wpa supplicant running" , __FUNCTION__ ); return 0; } property_set("ctl.start", "wpa_supplicant"); return 0; /* Before starting the daemon, make sure its config file exists */ if (ensure_config_file_exists() 0) { LOGE("wifi %s() Wi-Fi will not be enabled", __FUNCTION__ ); return -1; } /* Clear out any stale socket files that might be left over. */ wpa_ctrl_cleanup(); #ifdef HAVE_LIBC_SYSTEM_PROPERTIES /* * Get a reference to the status property, so we can distinguish * the case where it goes stopped = running = stopped (i.e., * it start up, but fails right away) from the case in which * it starts in the stopped state and never manages to start * running at all. */ pi = __system_property_find(SUPP_PROP_NAME); if (pi != NULL) { serial = pi- serial; } #endif property_set("ctl.start", SUPPLICANT_NAME); LOGD("wifi %s() property_set(\"ctl.start\", %s );" , __FUNCTION__ , SUPPLICANT_NAME ); sched_yield(); while (count-- 0) { usleep(100000); #ifdef HAVE_LIBC_SYSTEM_PROPERTIES if (pi == NULL) { pi = __system_property_find(SUPP_PROP_NAME); } if (pi != NULL) { __system_property_read(pi, NULL, supp_status); if (strcmp(supp_status, "running") == 0) { return 0; } else if (pi- serial != serial strcmp(supp_status, "stopped") == 0) { return -1; } } #else if (property_get(SUPP_PROP_NAME, supp_status, NULL)) { if (strcmp(supp_status, "running") == 0) { LOGD("wifi %s() wpa supplicant running" , __FUNCTION__ ); return 0; } } #endif } LOGE("wifi %s() timeout!" , __FUNCTION__ ); return -1; } int wifi_stop_supplicant() { char supp_status[PROPERTY_VALUE_MAX] = { \0 }; int count = 50; /* wait at most 5 seconds for completion */ /* Check whether supplicant already stopped */ if (property_get(SUPP_PROP_NAME, supp_status, NULL) strcmp(supp_status, "stopped") == 0) { return 0; } LOGD( "wifi %s() stop wpa_supplicant...", __FUNCTION__ ); property_set("ctl.stop", SUPPLICANT_NAME); sched_yield(); while (count-- 0) { usleep(100000); if (property_get(SUPP_PROP_NAME, supp_status, NULL)) { if (strcmp(supp_status, "stopped") == 0) return 0; } } return -1; } int wifi_connect_to_supplicant() { char ifname[256]; char supp_status[PROPERTY_VALUE_MAX] = { \0 }; LOGD( "wifi %s() function in", __FUNCTION__ ); /* Make sure supplicant is running */ if (!property_get(SUPP_PROP_NAME, supp_status, NULL) || strcmp(supp_status, "running") != 0) { LOGE("wifi %s() Supplicant not running, cannot connect", __FUNCTION__); return -1; } property_get("wifi.interface", iface, WIFI_TEST_INTERFACE); LOGD("wifi %s() property_get(\"wifi.interface\", iface, WIFI_TEST_INTERFACE);" , __FUNCTION__ ); LOGD("wifi %s() iface=%s", __FUNCTION__ , iface ); LOGD("wifi %s() IFACE_DIR=%s", __FUNCTION__ , IFACE_DIR ); if (access(IFACE_DIR, F_OK) == 0) { LOGD("wifi %s() IFACE_DIR ok", __FUNCTION__ ); snprintf(ifname, sizeof(ifname), "%s/%s", IFACE_DIR, iface); } else { LOGE("wifi %s() IFACE_DIR NG", __FUNCTION__ ); LOGE("wifi %s() IFACE_DIR check error=%s", __FUNCTION__ , strerror(errno) ); strlcpy(ifname, iface, sizeof(ifname)); } LOGD("wifi %s() ifname=%s", __FUNCTION__ , ifname ); LOGD("wifi %s() wpa_ctrl_open(%s);", __FUNCTION__ , ifname); ctrl_conn = wpa_ctrl_open(ifname); if (ctrl_conn == NULL) { LOGE("wifi %s() Unable to open connection to supplicant on \"%s\" %s", __FUNCTION__ , ifname, strerror(errno)); return -1; } monitor_conn = wpa_ctrl_open(ifname); if (monitor_conn == NULL) { wpa_ctrl_close(ctrl_conn); ctrl_conn = NULL; return -1; } if (wpa_ctrl_attach(monitor_conn) != 0) { wpa_ctrl_close(monitor_conn); wpa_ctrl_close(ctrl_conn); ctrl_conn = monitor_conn = NULL; return -1; } return 0; } int wifi_send_command(struct wpa_ctrl *ctrl, const char *cmd, char *reply, size_t *reply_len) { static const char *zero=""; int ret; char text[256]; LOGD( "wifi %s() function in command=%s", __FUNCTION__ , cmd ); if (ctrl_conn == NULL) { LOGV("wifi %s() Not connected to wpa_supplicant - \"%s\" command dropped.\n", __FUNCTION__ , cmd); return -1; } /* switch(cmd[0]) { case B if( strncmp(cmd , "BLACKLIST" , 9 ) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); *reply_len=0; return 0; } break; case D if( strncmp(cmd , "DRIVER RSSI-APPROX" , 18) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); reply=""; *reply_len=0; return 0; } if( strncmp(cmd , "DRIVER LINKSPEED" , 16) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); reply=""; *reply_len=0; return 0; } else if( strncmp(cmd , "DRIVER" , 6) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); *reply_len=0; return 0; } break; case G if( strncmp(cmd , "GET_" , 4 ) == 0 ) { LOGW( "wifi %s() function command=%s comannd ignored! return 0;", __FUNCTION__ , cmd ); *reply_len=0; return 0; } break; } */ ret = wpa_ctrl_request(ctrl, cmd, strlen(cmd), reply, reply_len, NULL); snprintf( text , 254 , "%s" , reply ); text[((*reply_len 256)?*reply_len 255)]= \0 ; if (ret == -2) { LOGD("wifi %s() %s command timed out.", __FUNCTION__ , cmd); return -2; } else if (ret 0 || strncmp(reply, "FAIL", 4 ) == 0 ) { LOGE( "wifi %s() function command=%s (reply=FAIL || ret 0) reply=%s length=%d ret=%d return -1;", __FUNCTION__ , cmd, text, *reply_len , ret ); return -1; } LOGD( "wifi %s() function command=%s reply=%s ret=%d", __FUNCTION__ , cmd , text , ret ); if (strncmp(cmd, "PING", 4) == 0) { reply[*reply_len] = \0 ; } return 0; } int wifi_wait_for_event(char *buf, size_t buflen) { size_t nread = buflen - 1; int fd; fd_set rfds; int result; struct timeval tval; struct timeval *tptr; LOGD( "wifi %s() function in", __FUNCTION__ ); if (monitor_conn == NULL) { LOGD("wifi %s() Connection closed\n" , __FUNCTION__ ); strncpy(buf, WPA_EVENT_TERMINATING " - connection closed", buflen-1); buf[buflen-1] = \0 ; return strlen(buf); } result = wpa_ctrl_recv(monitor_conn, buf, nread); if (result 0) { LOGD("wifi %s() wpa_ctrl_recv failed %s\n", __FUNCTION__ , strerror(errno)); strncpy(buf, WPA_EVENT_TERMINATING " - recv error", buflen-1); buf[buflen-1] = \0 ; return strlen(buf); } buf[nread] = \0 ; /* LOGD("wait_for_event result=%d nread=%d string=\"%s\"\n", result, nread, buf); */ /* Check for EOF on the socket */ if (result == 0 nread == 0) { /* Fabricate an event to pass up */ LOGD("wifi %s() Received EOF on supplicant socket" , __FUNCTION__ ); strncpy(buf, WPA_EVENT_TERMINATING " - signal 0 received", buflen-1); buf[buflen-1] = \0 ; return strlen(buf); } /* * Events strings are in the format * * N CTRL-EVENT-XXX * * where N is the message level in numerical form (0=VERBOSE, 1=DEBUG, * etc.) and XXX is the event name. The level information is not useful * to us, so strip it off. */ if (buf[0] == ) { char *match = strchr(buf, ); if (match != NULL) { nread -= (match+1-buf); memmove(buf, match+1, nread+1); } } return nread; } void wifi_close_supplicant_connection() { LOGD( "wifi %s() function in", __FUNCTION__ ); if (ctrl_conn != NULL) { wpa_ctrl_close(ctrl_conn); ctrl_conn = NULL; } if (monitor_conn != NULL) { wpa_ctrl_close(monitor_conn); monitor_conn = NULL; } } int wifi_command(const char *command, char *reply, size_t *reply_len) { return wifi_send_command(ctrl_conn, command, reply, reply_len); } RSSI(電界強度)をGUIに反映させるには? fi01さんより、RSSI値をAndroid GUIに反映させる修正をコメントに頂きました。 driver_wext.c はシャープのWebサイトより、IS01向けGPLソースを取得して driver_wext.c のみ利用した。 $ diff -u driver_wext.c.gpl_is01 driver_wext.c --- driver_wext.c.gpl_is012011-01-13 22 05 39.827724368 +0900 +++ driver_wext.c2011-01-13 22 06 34.807605306 +0900 @@ -2715,7 +2715,7 @@ } else if( os_strncasecmp(cmd, "scan-channels", 13) == 0 ) { } - else if( os_strcasecmp(cmd, "rssi") == 0 ) { + else if( os_strcasecmp(cmd, "rssi") == 0 || os_strcasecmp(cmd, "rssi-approx") == 0 ) { struct iwreq wrq; struct iw_statistics stats; signed int rssi; 以上。 コメント テスト -- (is01rebuild ) 2011-01-05 15 14 10 IS01向けGPLソースでのRSSIの取得は下記でよいかもです。 - else if( os_strcasecmp(cmd, "rssi") == 0 ) { + else if( os_strcasecmp(cmd, "rssi") == 0 || os_strcasecmp(cmd, "rssi-approx") == 0 ) -- (fi01) 2011-01-13 16 54 22 fi01さん、ありがとうございます。 追って、組み込みます。 wpa_supplicant/driver_wext.c はまだ、全く見ていなかったので助かります。 私がすると、/sysから直接読み込むところでした^^; -- (is01rebuild ) 2011-01-13 21 19 04 # echo 0 wifi # echo 0 polling # echo 1 wifi # echo 1 polling # stop synergy_service # start synergy_service でwlan0が復活することが確認できました。 wifi.cを上手く書き換えると確実性が上がるかもしれません。 -- (RO215IS01) 2011-01-14 04 29 06 wpa_ctrl_openで"/dev/socket/wpa_wlan0"を指定すれば "/data/misc/wifi/wpa_supplicant.conf"の修正 ctrl_interface=DIR=/data/misc/wifi/sockets は不要です。 -- (fi01) 2011-01-14 08 56 30 自ビルドcyanogenmodの場合は設定ファイルの修正が必要でした。 dhcpでIPアドレス取得後すぐに切断されてしまう場合は下記を適用してみてください。 system/etc/dhcpcd/dhcpcd-run-hooks - if ls "${hook}" /dev/null 2 1; then + if [ -f "${hook}" ]; then -- (fi01) 2011-01-14 14 46 51 RO215IS01さん、fi01さんありがとうございます。 wpa_ctrl_openで"/dev/socket/wpa_wlan0"は後ほど試してみます。 wiki内にマージします。 デフォルトのservice起動では socket wpa_wlan0 dgram 660 wifi wifi が指定されてますので、それを利用という形でしょうか。 wpa_supplicant も Android もかなりの素人なので助かります。 現段階でAndroidのバージョンが、2.2_r1.3、2.2.1_r1、2.3.1r1、 CyanogenMod6(でしょうか?)の情報が入ってきていますので、 本wikiでもバージョン毎の差異をまとめないといけないですね。 ベースが大きく変わらなければほぼ同一の内容でいけるとは思いますが。 -- (is01rebuild ) 2011-01-14 18 52 20 No spitting on the street.I know what you wantHe resolved to give up smoking.The teams are coming onto the field.What s the weather like to day? Does the computer ever make a mistake.It rather surprised me.Is this the fight bus for the Capital Library? Cancer is a deadly disease.Will you connect this wire to the television ? -- (http //oakleyfrogskins2.cabanova.com/) 2013-03-17 06 38 29 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/gvsgnext2/pages/172.html
※PSP版ソフト「ガンダムvs.ガンダムNEXT PLUS」ついてのまとめのページです。 更新履歴 追加機体 ◆よくある質問◆ 更新履歴 12/8 現在のアドパの人入りについて 12/5 cpu専用機追加、作品枠順整理 追加機体 登場作品 コスト3000GP コスト2000GP コスト1000GP BOSS CPU専用 機動戦士ガンダム ジオング ザクジム 機動戦士Zガンダム ジ・O ハイザックアッシマー 機動戦士ガンダム 逆襲のシャア ジェガンレズン専用ギラ・ドーガ 機動戦士ガンダム F91 ラフレシア ベルガ・ギロス 機動戦士Vガンダム ガンイージゾロアット 新機動戦記ガンダムW ガンダムサンドロック改リーオー 新機動戦記ガンダムWEndless Waltz ウイングガンダムゼロカスタム ガンダムナタク サーペント ∀ガンダム ウォドム ボルジャーノン 機動戦士ガンダムSEED プロヴィデンスガンダム ブリッツガンダムバスターガンダムストライクルージュM1アストレイ 機動戦士ガンダム 0080 ジムスナイパーII 機動戦士ガンダム 0083 デンドロビウム ジム・カスタムジムキャノンII 機動戦士ガンダム 08MS小隊 アプサラスIII 機動戦士ガンダム00 ダブルオーライザーリボーンズガンダム ユニオンフラッググラハム専用ユニオンフラッグカスタムアヘッドアヘッド近接戦闘型(サキガケ) 機動戦士ガンダムUC クシャトリヤ ◆よくある質問◆ Q:アーケード版からの追加要素は? A:PSP版のみの追加機体を収録(上記項目を参照)。 更に協力プレイも可能なミッションモードを追加。ミッション数は250以上の大ボリューム。 Q:ボタン配置とかどうなってるの? A:PSPの○×△□とLR、セレクトボタンを使用します。オプションでボタン設定を変更可能。 というより一つのボタン設定で全機体をフルに操作したい場合は変更必須。 ボタン配置デフォルト 射撃 □ 格闘 △ ジャンプ × サーチ ○ 通信・命令 セレクト サブ射撃(□+△) R 特殊射撃(□+×) - 特殊格闘(△+×) L アシスト(□+△+×) - PS2(3)のコントローラと違い、L2R2がないので同時押しコマンドは専用ボタンではなく同時押しできる配置にしないとボタンが足りない。 全機体向けのボタン配置は射撃(格闘)チャージをしながらのブーストおよびサーチができる配置なのが基本条件。 使用頻度からしてサブ射撃を専用ボタン、アシストと特殊射撃(格闘)はいずれか1つを専用ボタンにして残り2つは同時押しのするのがベターか。 Q:対戦はどうなってるの? A:PSPを持ち合っての4人対戦と、PS3のアドホックパーティーを経由した4人対戦が可能。 Q:アドホックパーティーって何? A:現在、PS3で試験的に提供されている無料サービス。公式サイトURL http //www.jp.playstation.com/psn/adhocparty/ 簡潔に言うと、対戦・協力プレイが可能なPSPのゲームをPS3を通じて一緒に遊べる。 1台のPS3から最大3人まで参加できるので、相方と一緒にNEXTを遊ぶのも可能。 ただし、初期PS3の20GBモデルでは使用できない。また、LAN接続に無線LANを使用している場合も無理。 Q:アドホックパーティーで対戦してみたいんだけど、必要な物(環境)はどんな感じ? A:20GBモデル以外のPS3と有線LANケーブル、ネット環境、PSNアカウント。あとはお好みでチャットに便利なUSBキーボード。 a. 20GBモデルはPSPと通信するための無線LAN機能がないのでプレイ不可(現在、市場のPS3は殆ど薄型モデルなので心配はない) b. 無線LANをPSPとの通信に使うため、PS3本体は有線LANケーブルでネットに接続する必要があるのに注意。(イーサネットコンバーターの導入もあり) c. PSNアカウントは無料。メルアド登録で獲得できる。 詳しくはPSNアカウント登録サイト https //store.playstation.com/accounts/register/beginNewAccountRegistrationFlow.action へどうぞ。 Q:アドホックパーティーってラグとかどうなの? A:参加するプレイヤーの回線速度に影響される。 そこそこの回線持ちが集まれば、ラグで負けた!とならない程度に快適。 アドホックパーティーで部屋立ての際、コメント欄に「重い場合は解散します」など注意書きするのもいいかもしれない。 Q:で、人はいるの? PS3その他で何万も投資して過疎とか困るんだけど… A:前作のガンダムvs.ガンダムでは平日夜や週末などのピーク時で100人ほどの参加者がいました。 2009/12/8現在、平日夜のピーク時のワールドGで200~300人ほどの参加者を確認。 サーチ機能を使って他のワールドを確認するとぼちぼち部屋を見かけるので、前作の数倍は人がいる模様。
https://w.atwiki.jp/nec_aterm/pages/14.html
製品情報 http //121ware.com/product/atermstation/product/ 有線ギガビット対応 / 無線規格値450Mbps WR9500N(HP) WR9300N(HP) 有線ギガビット対応 / 無線規格値300Mbps WR8750N(HP) WR8700N(HP) WR8500N WR8370N(HP) WR8370N(ST) WR8300N 無線規格値300Mbps WR8600N(HP) WR8170N(HP) WR8170N(ST) WR8160N(ST) WR8150N WR8100N 無線規格値150Mbps WR4500N WR4100N 基本性能スループット比較 機種 価格.com スループット Stream×ANT 2012/7/1 FTP PPPoE 無線LAN WR9500N(HP) 9,594 872Mbps 845Mbps 256Mbps 3×3 WR9300N(HP) 8,470 874Mbps 843Mbps 211Mbps 3×3 WR8750N(HP) 6,815 872Mbps 847Mbps 184Mbps 2×2 WR8700N(HP) 7,944 940Mbps 932Mbps 186Mbps 2×2 WR8500N - 806Mbps 767Mbps 182Mbps 2×3 WR8500N/NC 7,760 806Mbps 767Mbps 182Mbps 2×3 WR8400N - 92.5Mbps 92.2Mbps 93.7Mbps 2×3 WR8370N(HP) 4,460 907Mbps 875Mbps 172Mbps 2×2 WR8370N(ST) - 908Mbps 877Mbps 166Mbps 2×2 WR8370N(ST)/U 5,980 908Mbps 877Mbps 166Mbps 2×2 WR8300N - 810Mbps 771Mbps 168Mbps 2×2 WR8300N/NU 5,489 810Mbps 771Mbps 168Mbps 2×2 WR8600N 4,780 94.1Mbps 93.6Mbps 93.8Mbps 2×2 WR8170N(HP) 3,440 94.1Mbps 93.6Mbps 93.6Mbps 2×2 WR8170N(HP)/NU 6,240 94.1Mbps 93.6Mbps 93.6Mbps 2×2 WR8170N(ST) 3,400 94.1Mbps 93.6Mbps 93.5Mbps 2×2 WR8160N 2,530 94Mbps 93Mbps 93Mbps 2×2 WR8150N 4,092 94Mbps 93.5Mbps 93.5Mbps 2×2 WR8100N - 94Mbps 93.5Mbps 94.5Mbps 2×2 WR4500N - 94Mbps 93.5Mbps 93.4Mbps 1×2 WR4100N 3,337 94Mbps 93.5Mbps 91.5Mbps 1×1 WR1200H - 88Mbps 77Mbps 31Mbps バッファロー 機種 価格.com スループット Stream×ANT 2012/7/1 FTP PPPoE 無線LAN WZR-D1100H 14,968 -Mbps -Mbps 310Mbps 3×3 WZR-900DHP -Mbps 922Mbps 343Mbps 3×3 WZR-600DHP 8,478 -Mbps -Mbps 184Mbps 2×2 WZR-450HP 10,694 -Mbps -Mbps -Mbps 3×3 WZR-300HP 6,825 -Mbps -Mbps 121Mbps 2×2 WHR-300HP 5,099 Mbps Mbps 93Mbps 2×2 WHR-300 3,505 92Mbps 91Mbps Mbps 2×2 WZR-HP-G450HA 8,163 -Mbps -Mbps -Mbps 3×3 WZR-HP-G450H 6,580 -Mbps -Mbps -Mbps 3×3 WZR-HP-AG300HA 6,408 -Mbps -Mbps 184Mbps 2×2 WZR-HP-AG300H 4,990 202.5Mbps 160.2Mbps 151Mbps 2×2 WZR-AMPG300NH - 171Mbps 131Mbps 153Mbps 2×3 WZR-HP-G302HA 5,065 -Mbps -Mbps 121Mbps 2×2 WZR-HP-G302H 4,357 151Mbps 131Mbps 121.7Mbps 2×2 WZR-HP-G301NH - 151Mbps 131Mbps 121Mbps 2×3 WZR-HP-G300NH 12,800 151Mbps 131Mbps 121Mbps 2×3 WHR-HP-G300N 3,780 92Mbps 91Mbps 93.6Mbps 2×2 WHR-G301NA 2,480 92Mbps 91Mbps -Mbps 2×2 WHR-G301N 2,340 92Mbps 90Mbps 93.5Mbps 2×2 WHR-G300N - 94Mbps 92Mbps 93.5Mbps 2×2 WZR-AGL300NH/E 7,800 127Mbps 92Mbps 121Mbps 2×3 バッファロー機との機能比較(性能比較ではない) [Giga機] (生産終了機) *簡易NAS付 NEC バッファロー GbE 備考 高 [ WZR-D1100H*] ○ 11ac+11bgn(同時)、3ストリーム [ WR9500N(HP)*] ○ 11abgn(同時)、5Ghz3ストリーム [ WZR-450HP*][ WZR-HP-G450H*] ○ 11bgn、2.4Ghz3ストリーム [ WR8700N*] [ WZR-600DHP*][ WZR-HP-AG300HA*]([WZR-AMPG300NH]) ○ 11abgn(同時) - ([WZR-AGL300NH]) ○ 11an+11bg / 11bgn(切換) ([WR8500N]) - ○ 11an / 11bgn(切換) [ WR8370N(HP)*][ WR8370N(ST)*][ WR8300N*] [ WZR-300HP*][ WZR-HP-G302HA*]([WZR-HP-G301NH*])([WZR-HP-G300NH*]) ○ 11bgn WR8600N* - - 11abgn(同時) ↑ (WR8400N) - - 11an / 11bgn(切換) 機能 WR8170N(HP)*WR8170N(ST)*WR8160N(ST)(WR8150N)(WR8100N) WHR-300HPWHR-300WHR-G301NWHR-HP-G300NA(WHR-G300N) - 11bgn WR4100N(WR4500N) (WHR-HP-GN) - 11n 1ストリーム ↓ (WR8200N) (WZR-G144N, WZR2-G108, WZR-G108) - draft 11n ver1.0またはMIMO 11agb機 省略 無し (WHR-HP-G) - 11g+b ハイパワー 低 (WR1200H) (WHR-G) - 11g+b
https://w.atwiki.jp/ddwrt_openwrt/pages/95.html
■ 2019-03-12作成 ■ 2020-04-16更新 ■ - アクセス ■ 1100Mbps Buffalo WZRシリーズ 外部リンクDeviWikiTechInfoDepotOpenWrtDD-WRT 基本情報 発売日 型番 5GHz2.4GHz 有線 メモリ フラッシュ CPU Clock Port 2012-06-30 WZR-D1100H (**)600(n)450 1Gbps*4 128 MiB 128 MiB BroadcomBCM4706 600MHz Mini PCIe USB 2.0 後継機種:WZR-D1100H→WZR-1750DHP 日本限定機種。Buffalo初の802.11ac対応と見せかけて使えるのはW52のみ。おかげで機種名の数字が変な値に。DはDraftのDかも。 親機があれば子機が必要ということで同時に発売されたのがWLI-H4-D600という機種。見た目を統一したイーサネットコンバータ。 DD-WRTのForumやWikiDeviによるとWZR-D1800Hという日本未発売の機種と同一のものらしい。 DD-WRTのWZR-D1800H用のF/Wならば存在しているが、インストールできるかどうかまでは分からない。 不自然なくらいフラッシュ容量が大きい。無線LANルーターとしては半端な存在なので、もしかしたらDD-WRTユーザーに配慮した・・・? OpenWrtやDD-WRTのインストール情報はほとんどない。というか実物を全然見かけない。ついでに公式サイトでの扱いも雑。 インストール関連 概要・注意点・参考サイト 情報募集中 使用中のファームウェアのバックアップ手順 情報募集中 インストール手順 情報募集中 バックアップへの復旧手順 情報募集中 その他情報 このページへのリンクが設置してあるページ ルータ一覧/BUFFALO コメント 名前 コメント
https://w.atwiki.jp/ps3hack/pages/11.html
PS3ProxyServerとはPS3が起動時やPSNに接続に行うバージョンチェックを回避するために使うツールです。 現時点では、OFWの1つ前のバージョンなら回避出来るようです。 2010.04.01現在OFW Ver3.21なのでVer3.15なら回避可能。 ダウンロード先(他にもいくつかあります。) PS3HACKS 使い方 ①IP AddressにPCのローカルIPアドレスを入力(例 192.168.0.1など)。 ②PS3 Modeにチェック。 ③Replace Filesのadd→欄が作成される。作成された欄の右側にある「.」で書き換えたps3-updatelist.txtを指定。 ④欄の左側にバージョンチェックURLを入力。 ⑤Start押す。 (PS3.ProxyServer.GUI.exe.configを直接書き換える事で設定を保存可能) 以上がPC側での作業です。 あとはPS3本体のネットワーク接続設定でプロクシを通す設定にすれば、バージョンチェック回避ができます。 ③の書き換えたps3-updatelist.txtとは、バージョンチェックURLからps3-updatelist.txtをダウンロードし、ImageVersion=0000○○○○→00000000 SystemSoftwareVersion=○.○○00 → 0.0000に書き換え上書きしたtxtのこと。 ④のバージョンチェックのURLとは「ttp //fjp01.ps3.update.playstation.net/update/ps3/list/jp/ps3-updatelist.txt」(h抜き)
https://w.atwiki.jp/tkonishi73/pages/375.html
1-12.Bluetoothとは Bluetooth=マウスやキーボード、ヘッドセットなどを無線で接続する技術 MACアドレス 1-13.WiMAX 現在の携帯電話は、3G(第3世代) FOMA=3G、デジタルムーバー=第2世代 接続する形態 ○ギャランティ方式=直接専用接続、接続料金は高額 ○ベストエフォート方式=1本の回線を複数の契約者が使う方式 接続料金は安いが、利用者が多いと回線速度が遅い。 ADSL=公衆回線を使って高速な通信を行う。最速で56Mbps。 光フレッツ=FTTH回線を利用する。最速で100Mbps。 FTTH=Fibre To The Home(光ファイバーケーブルを家庭内に引き込む) bps(bit per second=1秒間で送信できるビット数) 1B(バイト:byte)=8bit Bps(byte per second)=1秒間で送信できるバイト数) 半角英数字1文字=1バイト 仮名漢字1文字=2バイト 100Mbps=125MBps=1秒間に半角英数字を、12500000文字=1億2500万字=仮名漢字で6250万文字 単行本の1ページが約1000文字として、62500ページ。 1冊で200ページの本が300冊。 VGA形式の写真の場合、圧縮を考慮せず、単純に計算すると、1ピクセル(1画素)=3Bなので、 640ドット×480ドット×3B=921600B この写真が、1秒間で 125000000÷921600=135.6枚 ということになる。 ところが、回線には実効速度があり、本来の速度の3割程度しか出ない! 光フレッツ・・・約30Mbps程度 ADSL・・・約18Mbps程度 1-13.公衆無線LAN
https://w.atwiki.jp/ps3hack/pages/34.html
Open Source SDK PS2DEVのooPoによるプロジェクト http //github.com/ooPo まだコンパイラに互換性がないため使うことができません。 公式SDK 現状では、リークしたSDKでしか自作アプリを作成することができません。 導入方法 http //jamestanner.co.uk/ps3/
https://w.atwiki.jp/ps3hack/pages/19.html
PS3 debug FWインストール ここに書いてあることを実行し、失敗するとPS3を壊してしまう可能性があります。覚悟がある方だけ実行してして下さい。 準備物 PS3(デバッグ用ファームより古いバージョンのFWを導入した本体) 同容量、同メーカーのHDD2台(ここではHDD-A、HDD-Bとする) 正規FW(PS本体のFWより新しいバージョンのFW) デバッグ用FW1.80 or 2.15 or 2.20 ダウンロード先 PS3HAX USBメモリ(FWが入るサイズなら何でも可、SDなどでも可) 方法 ①HDD-A、HDD-B両方ともPS3でフォーマットする。 ②USBメモリにデバッグ用FWを入れて(/PS3/UPDATE/)PS3に挿す。 その後USBメモリ経由でアップデートを実行するとUSBメモリ内のデバッグ用FWがHDD-Aにコピーされる。 ③コピー完了後にPS3が再起動しようとし、コントローラーのPSボタンを押すよう指示されるため、ここでPS3のメイン電源を切る。 ④PS3からHDD-Aを取り外しHDD-Bに入れ替え、USBメモリも外す(HDDは衝撃にあまり強くないため慎重に。) ⑤USBメモリに正規FWを入れる(/PS3/UPDATE/)。 ⑥USBメモリをPS3に挿し、USBメモリ経由でアップデートを実行してアップデートを進め、使用許諾契約への同意画面で止める。 ⑦PS3の電源を入れたままHDD-Bを取り外してHDD-Aに入れ替える。(慎重に。) ⑧HDD交換後に使用許諾契約に同意してアップデートを続けると、デバッグ用FWがインストールされる。 ⑨インストールが終わったら完了。設定にてDebug Settingsを確認できれば成功。 ⑩本体設定からHDDのフォーマットを実行。これをしないとFormat BD Emulator HDDが正常動作しない。 デバッグ用FWの各設定項目(2.20) ○Button Behavior -- Enter, Back ○ボタンの動作変更 NP Environment -- np 不明 Game Output Resolution -- 480(4 3), 480(16 9), ..., 1920x1080 不明 Game Type (Debugger) -- Disc Boot Game, HDD Boot Game, Patch ゲームコンテンツユーティリティの起動情報取得機能にて取得する情報を設定 また、ディスクイジェクト時のゲーム終了動作が以下のように変化します。 Disc Boot Game ディスクイジェクトによるゲーム終了イベントを発行する HDD Boot Game ディスクイジェクトによるゲーム終了イベントを発行しない Patch ディスクイジェクトによるゲーム終了イベントを発行する GameContentUtil Boot Path (Debugger) -- For Development, For Release GameContentUtil dirName (Debugger) GameContentUtil Boot Path (/app_home/PS3_GAME/) -- For Development, For Release ゲームコンテンツユーティリティの起動情報取得機能にて取得する情報を設定できます Region Settings -- Japan, Noth America, ..., Hong Kong リージョン設定 Display HDD Free Space -- On, Off ハードディスクドライブの空き容量をゲームアプリケーション実行中にも表示する機能 Fake Free Space -- On, Off ハードディスクドライブの空き容量を擬似的に変更する機能 Fake Limit Size 数値入力(MB単位) Fake Free Space機能にて使われる機能 Format System Cache システムキャッシュ初期化 Release Check Mode -- Development Mode, Release Mode 不明 Exception Handler -- On, Off 不明 NP Debug -- On, Off 不明 Service ID 不明 MsgDialogUtil Display Errorcode -- On, Off 不明 Format BD Emulator HDD -- Quick Format, Full Format USBメモリ(HDD)をフォーマット、PCから認識できないファイルシステム Core Dump -- On, Off 不明 Boot Mode -- Debugger Mode, System Software Mode, Release Mode 不明、設定後再起動してもデフォルトのSystem Software Modeのまま Blu-ray Disc Access -- BD Emulator(DEV), BD Emulator(USB), BD Drive 不明、設定後再起動してもデフォルトのBD Emulator(USB)のまま Transfer Rate Pacing for BD Emulator -- HDD Native, Equiv. to BD Drive BDエミュレーターの転送速度 Update Server URL URL入力HTTPサーバを利用してシステムアップデートが可能 Video Upload Debug -- On, Off On に設定するとアップロードした動画が強制的に非公開に設定される Wake On LAN -- On, Off 注意 現時点ではデバッグ用FWをインストールしても、PS3、PS2、PSのバックアップディスクは起動しません。 これからさらなる解析により可能となる可能性はありますが、現時点ではできないのでご注意を。 さらにBDビデオやDVDを再生できなくなってしまうため、気をつけて下さい。
https://w.atwiki.jp/adamay/pages/25.html
ネットワーク/DD-WRT WRT WLA-G54 (ヘッダ部分にファームの情報とサイズが…) WLA-G54 (WLA-G54をイーサネットコンバータみたいに使う) WBR-G54 (ddadder dd-wrt.v23_vpn_generic.bin wbr-g54) FON WRT化 WLA-G55 (stable v23SP2 standard generic) FON hacking guide メーカーサイト WBR-G54 WLA-G54 DD-WRT top page Flash Your Buffalo WBR-G54, WLA-G54 Installation Wireless Bridge WDS La FoneraでWDS リカバリ WLA-G54を元に戻す イーサネットコンバータ化 その他 フリーのファーム Edit
https://w.atwiki.jp/snagplaces/pages/47.html
最終更新日時:2009年12月18日 (金) 15時20分08秒[編集] はじめに 有線同様、認識しなかった無線LANを認識させてみます。 EeeBoxに搭載している無線LANは、よくあるAtherosやIntelではなくRaLink 0781というもののようです。 注意事項 コンパイルされたものはkernelのバージョンに依存するため、kernelがアップデートされる度に再コンパイルしないと動作しなくなります。 参考サイト どぶお/Linuxで遊ぼう!/Eee PC 901-XでVine Linux - BioKids Wiki Eee PC 901 と eeeUbuntu 8.04の無線LANについてのメモ - Mattari Memo Wireless Ralink の rt2860sta.ko ドライバをインストールする G2labo @Blogger Fedora9@設定2 Linux Certif - Man ifcfg(5) はじめに注意事項 参考サイト デバイスの確認 ドライバのインストールダウンロード ドライバの解凍とインストール WPA-PSKネットワークキーの作成 設定ファイルの編集RT2860STA.datの編集 ifcfg-ra0の編集 デバイスの関連付け なんかエラー出てる デバイスの確認 # lspci -v 03 00.0 Network controller RaLink Unknown device 0781 Subsystem RaLink Unknown device 2790 Flags bus master, fast devsel, latency 0, IRQ 10 Memory at fe7f0000 (32-bit, non-prefetchable) [size=64K] Capabilities [40] Power Management version 3 Capabilities [50] Message Signalled Interrupts 64bit+ Queue=0/5 Enable- Capabilities [70] Express Endpoint IRQ 0 「RaLink Unknown device 0781 2790」というのがわかりました。Unknown deviceというのが気になりますが。 いろいろ調べたところ、これはRaLink社で配布しているRT2860というドライバで動くようです。 ドライバのインストール ダウンロード RaLinkのサイトから該当するドライバをダウンロードします。 ダウンロード先 http //www.ralinktech.com/support.php?s=2 該当ファイル RT2860PCI/mPCI/PCIe/CB(RT2760/RT2790/RT2860/RT2890) ※ドライバ。Firmwareもありますが、これはVine系用みたい # wget http //www.ralinktech.com.tw/data/drivers/2008_0918_RT2860_Linux_STA_v1.8.0.0.tar.bz2 ドライバの解凍とインストール RaLinkのドライバは基本ドライバ以外にRaLink固有の設定ファイル(ユーティリティ)を使用する方法と、wpa_supplicantを使用する方法の二通りあります。今回はwpa_supplicantを使わず、RaLinkのユーティリティを使う方法で認識させます。 解凍 # tar vjxf 2008_0918_RT2860_Linux_STA_v1.8.0.0.tar.bz2 コンパイル # cd 2008_0918_RT2860_Linux_STA_v1.8.0.0 # make インストール # paco -D make install [▲上へ] WPA-PSKネットワークキーの作成 RT2860STA.datに設定するネットワークキーは暗号化済みのものを記述する必要があります。 設定編集の前にあらかじめキーを作成し、コピーしておきましょう(下線の部分)。 # wpa_passphrase SSID パスフレーズ ※例: # wpa_passphrase GW-MF54G2 hogeHOGE network={ ssid="GW-MF54G2" #psk="hogeHOGE" psk=885402644dc720f6c60fdc4dbb37506c2097de4f5cf6d03c29b42c8ef5af5141 } 「psk=***」の部分をコピーしておきます。 [▲上へ] 設定ファイルの編集 RaLinkのドライバはifcfg-xxx0の設定以外にRT2860STA.datという専用のファイルで行います。各項目の説明は、README_STAの180行目あたりに載ってます。 今回は無線通信の方式をWPAPSK、暗号化はTKIPで行います。あらかじめ無線ルータの設定もしておいてください。無線ルータはPlanex GW-MF54G2を使用しました。 RT2860STA.datの編集 # vi -b /etc/Wireless/RT2860STA/RT2860STA.dat ※設定ファイルはかならず-bでバイナリ形式で開くこと 【5行目あたり変更】国コード CountryCode=JP 【7行目あたり変更】SSID SSID=GW-MF54G2 【10行目あたり変更】無線周波数帯(チャンネル) Channel=2 ※Autoの設定はないようなので明示する必要があります。 【21行目あたり変更】認証方式 AuthMode=WPAPSK 【22行目あたり変更】暗号化方式 EncrypType=TKIP 【23行目あたり変更】ネットワークキー WPAPSK=e21557149a241d690962a30cb4eef119f843fb14b2201557ab5b644a5e69c3a8 【41行目あたり変更】無線の形態(自動) HT_MpduDensity=0 【42行目あたり変更】1チャネルあたりの周波数幅を20MHzに固定 HT_BW=0 【43行目あたり変更】Bandなんたらを自動にしない? HT_AutoBA=0 必要な項目だけ記述するだけではちゃんと動作しないみたいなので、Defaultのファイルを元に設定を変更していったほうが無難です。ちなみに、この設定ファイル1本でWEP用の設定もできるようになっているそうです。 ifcfg-ra0の編集 ネットワーク用の設定ファイルifcfg-ra0を編集します。 ドライバを読む際にath0でもwlan0でもなくra0として認識するので、設定ファイルもそれに合わせて「ifcfg-ra0」という形になります。 有線LANなどの一般的な設定をifcfg-ra0に記述してネットワークに接続させると問題なく繋がるのですが、以下のようなエラーメッセージが出ます。 Error for wireless request "Set Mode" (8B06) SET failed on device ra0 ; Network is down. Error for wireless request "Set Frequency" (8B04) SET failed on device ra0 ; Network is down. Error for wireless request "Set Bit Rate" (8B20) SET failed on device ra0 ; Network is down. Error for wireless request "Set Encode" (8B2A) SET failed on device ra0 ; Network is down. 「Linux Certif - Man ifcfg(5)」によると、ifcfgにはWifi用の指定方法がちゃんとあるようで、この記述に従って設定を行うとある程度エラー抑えることができました(それでも Set FrequencyとSet Encodeは消えなかった)。 本来はこの辺のエラーが出るとつながらなくなるものなのでしょうが、IPアドレス関係の設定以外はすべて RT2860STA.datにあるため接続できるのだろうなと思います。気になる方は設定してみてください。 以下の設定項目は、外部公開用のIPアドレス固定指定と、上記の対策をできるだけ行ったものになっています。ESSIDやらはすでにRT2860~で設定済みなので、実際は書かなくてもいいはずの項目です。 # vi /etc/sysconfig/network-scripts/ifcfg-ra0 DEVICE=ra0 BOOTPROTO=none IPADDR=192.168.24.202 NETMASK=255.255.255.0 BROADCAST=192.168.24.255 GATEWAY=192.168.24.1 USERCTL=no HWADDR=WifiのMACアドレス ONBOOT=yes TYPE=Wireless IPV6INIT=no PEERDNS=yes MII_NOT_SUPPORTED=yes WIRELESS_ESSID=GW-MF54G2 WIRELESS_ENC_KEY=xxxx-xxxx-xxxx-xxxx-… ※iwconfigのEncryption keyの値 CHANNEL=2 WIRELESS_MODE=Managed WIRELESS_RATE=Auto WIRELESS_FREQ=2.417GHz ※iwconfigのFrequencyの値 いろいろ設定はしましたが、Set Encode・Set Freqencyのエラーは消えませんでした。それでも問題なくつながってはいるんですが・・・ もしWifiをメインで使用する場合は有線LANの設定ファイル(ifcfg-eth0)のONBOOTをnoにしてください。 デバイスの関連付け # vi /etc/modprobe.conf 【追記】 alias ra0 rt2860sta これで再起動してもWifiで接続できます。 [▲上へ] なんかエラー出てる ログを眺めていると、「kernel ERROR!!! RTMPCancelTimer failed, Timer hasn t been initialize!」というエラーが10分ごとに出ています。 キーワードで調べるとrt2860staがなにかしている位しかわからず、明確な解決方法が見つかりませんでした。 RaLinkのサイトでは比較的ドライバの更新が頻繁なので、更新しているうちに治るかもしれませんが・・・ 一応、該当しそうなログも貼っておきます。 Nov 9 20 54 24 ***** kernel ip_conntrack version 2.4 (8125 buckets, 65000 max) - 228 bytes per conntrack Nov 9 20 54 24 ***** kernel RX DESC f76a0000 size = 2048 Nov 9 20 54 24 ***** kernel -- RTMPAllocTxRxRingMemory, Status=0 Nov 9 20 54 24 ***** kernel Key1Str is Invalid key length(0) or Type(0) Nov 9 20 54 24 ***** kernel Key2Str is Invalid key length(0) or Type(0) Nov 9 20 54 24 ***** kernel Key3Str is Invalid key length(0) or Type(0) Nov 9 20 54 24 ***** kernel Key4Str is Invalid key length(0) or Type(0) Nov 9 20 54 24 ***** kernel 1. Phy Mode = 9 Nov 9 20 54 24 ***** kernel 2. Phy Mode = 9 Nov 9 20 54 24 ***** kernel 3. Phy Mode = 9 Nov 9 20 54 24 ***** kernel MCS Set = ff ff 00 00 00 Nov 9 20 54 24 ***** kernel ==== rt28xx_init, Status=0 Nov 9 20 54 24 ***** kernel 0x1300 = 00064300 Nov 9 20 54 24 ***** kernel ERROR!!! RTMPCancelTimer failed, Timer hasn t been initialize! Nov 9 20 54 24 ***** kernel r8169 eth0 link down [▲上へ]