Androidで帯域制御を試みる
- 帯域制御ができそうなLinuxコマンド
tcコマンド 使い方にある程度理解が必要
iwconfigコマンド 伝送レートを操作可能 ただしAndoridには標準で非搭載
netshコマンド TCPのパラメータを設定可能 ただしAndoridには標準で非搭載
ifconfigコマンド ネットワークの状態確認・設定が可能
というわけでifconfigをいじり倒す。
★"$ ifconfig インタフェース down" でインタフェースを停止させる
一度停止させてもすぐに復活する
コマンドが実行された時に張られていたTCPコネクションにのみ有効であるが、
"$ ifconfig インタフェース up" しても再起不能。コネクションを張りなおす必要がある。
★"ifconfig インタフェース mtu MTU値" でMTUの値を引き下げる
通常MTUはデフォルトで1500程度。
デフォルトのMTUだと20Mbps程度だった通信速度を、MTU=500にしたら6Mbps~7Mbps程度まで低下させることができた。
Nexus SにFirefoxをブートしてみた
- OSイメージのzipファイルを↓からダウンロード
http://forum.xda-developers.com/showthread.php?t=1924367
#私はNexus S 1/21/13 - Alpha 2: http://www.mediafire.com/?i699dtct8wqp8ngを落としました。
- Nexus SにClockworkmodが入っていない場合はどこかで拾ってくる。
- ClockworkmodをNexus Sに導入
$ adb reboot bootloader
$ fastboot flash recovery recovery-clockworkmod-6.0.0.6
- FirefoxのOSイメージをNexus Sに導入
$ adb push B2G-Nexus-S-012113.zip sdcard/
- ブートローダ起動
$ adb reboot bootloader
- 下準備(システムの初期化など意外と重要)
wipe data/factory resetを選択
Yes -- delete all user dataを選択
mounts and storageを選択
format /systemを選択
Yes - Formatを選択
- Firefoxをインストール
install zip from sdcardを選択
choose zip from sdcardを選択
B2G-Nexus-S-012113.zipを選択
Yes - Install B2G-Nexus-S-012113.zipを選択
- しばらく待つ
reboot system nowを選択
- Firefoxが起動!
わくわくどきどき
基本はAndroidと同じように操作すればなんとかなる
テンキーはまだ残念な状態だった。
Android NativeバイナリでIPアドレスを取得するプログラム
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <sys/ioctl.h>
int main(){
char myIP[16];
struct ifreq ifr;
int fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "wlan0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFADDR, &ifr);
close(fd);
strcpy(myIP, inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
printf("IP address:%s\n", myIP);
return;
}
ポイントはネットワークインタフェースを正しく設定すること。
$ ls /sys/class/net
でネットワークインタフェース一覧が取得できるので、
一応全部試してみたらwlan0が有効で正しくIPアドレスが表示された。
無線だから当たり前だけどー^^;
一応、私の環境(Android 4.2 on Nexus S)では、
ifb0, ifb1, ip6tnl0, lo, rmnet0, rmnet1, rmnet2, sit0, wlan0
が出てきました。
追記(2013/01/27)
Gingerbreadでは、wlan0は存在せず、em1みたいのが無線LANインタフェースでした。
端末・OSによって違うのでsys/class/netをちゃんと確認した方が良いです。
Nexus S向けJellyBeansのカーネルビルド作業ログ
※注意※
当ブログはあくまで、筆者の作業ログです。参考にして頂くことは結構ですが、自己責任でお願いします。筆者は必要があってカーネルビルドをしましたが、ここに書いてあることだけをやっても、端末情報が書き換わるだけで何もメリットはありません。
- はじめに
- 使ったもの
- 作業ログ
◆ 開発マシン上での環境構築(http://source.android.com/source/initializing.html)
1. 各種コンパイラのインストール
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils python-software-properties xsltproc
$ sudo apt-get install libx11-dev:i386 gcc-4.5 g++-4.5 gcc-4.5-multilib g++-4.5-multilib↑
2. JDKのインストール
Oracleのサイトからjdk-6u31-linux-x64.binをダウンロード
※Android open source codeに載ってるapt-get install sun-java6-jdkでは、もう手に入らないので注意。
$ chmod a+x jdk-6u31-linux-x64.bin $ ./jdk-6u31-linux-x64.bin
export CC=gcc-4.5 export CXX=g++-4.5 export JAVA_HOME=~/jdk1.6.0_31 export PATH=$PATH:$JAVA_HOME/bin export ANDROID_JAVA_HOME=$JAVA_HOME
$ source ~/.bashrc (もしくは ~/.bash_profile)
$ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo $ mkdir Android_JB $ cd Android_JB $ repo init -u https://android.googlesource.com/platform/manifest $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 $ repo sync
$ cd ~/Android_JB $ wget https://dl.google.com/dl/android/aosp/akm-crespo-jro03h-8f06b52d.tgz $ wget https://dl.google.com/dl/android/aosp/broadcom-crespo-jro03h-dbc5d882.tgz $ wget https://dl.google.com/dl/android/aosp/imgtec-crespo-jro03h-950ee659.tgz $ wget https://dl.google.com/dl/android/aosp/nxp-crespo-jro03h-a0172f5b.tgz $ wget https://dl.google.com/dl/android/aosp/samsung-crespo-jro03h-b82372e0.tgz $ wget https://dl.google.com/dl/android/aosp/widevine-crespo-jro03h-f7d32044.tgz
$ tar zxvf akm-crespo-jro03h-8f06b52d.tgz $ tar zxvf broadcom-crespo-jro03h-dbc5d882.tgz $ tar zxvf imgtec-crespo-jro03h-950ee659.tgz $ tar zxvf nxp-crespo-jro03h-a0172f5b.tgz $ tar zxvf samsung-crespo-jro03h-b82372e0.tgz $ tar zxvf widevine-crespo-jro03h-f7d32044.tgz
$ ./extract-akm-crespo.sh $ ./extract-broadcom-crespo.sh $ ./extract-imgtec-crespo.sh $ ./extract-nxp-crespo.sh $ ./extract-samsung-crespo.sh $ ./extract-widevine-crespo.sh
$ source build/envsetup.sh $ . build/envsetup.sh $ lunch full_crespo-userdebug $ make -j16
$ make otapackage $ ls -l $ANDROID_ROOT/out/target/product/crespo/full_crespo-ota-eng.hiromi.zip $ adb push full_crespo-ota-eng.hiromi.zip /sdcard/
$ fastboot boot recovery-clockwork-6.0.0.6-crespo.img
"wipe data/factory reset"を選択 "Yes - delete all user data"を選択
zipファイルの展開
"install zip from sdcard"を選択 "choose zip from sdcard"を選択 "full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択 "Yes - Install full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択
ここまでの作業で、Build numberがこのように書き換わります。
二行目に開発機のusernameが入りました!
$ git clone https://android.googlesource.com/device/crespo/samsung $ cd crespo $ git log kernel $ git clone https://android.googlesource.com/kernel/samsung.git $ git clone https://android.googlesource.com/platform/prebuilt $ cd samsung $ git checkout origin/android-samsung-3.0-jb
$ export PATH=<JB_KERNEL_ROOT>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH ※既にあるprebuildを再利用した場合はそのPATHを記述する $ export ARCH=arm $ export SUBARCH=arm $ export CROSS_COMPILE=arm-eabi-
$ make herring_defconfig $ make -j16 $ ls -l arch/arm/boot/zImage //確認
$ source build/envsetup.sh $ . build/envsetup.sh $ lunch full_crespo-userdebug $ make -j16
$ make otapackage $ ls -l $ANDROID_ROOT/out/target/product/crespo/full_crespo-ota-eng.hiromi.zip $ adb push full_crespo-ota-eng.hiromi.zip /sdcard/
$ fastboot boot recovery-clockwork-6.0.0.6-crespo.img
"wipe data/factory reset"を選択 "Yes - delete all user data"を選択
zipファイルの展開
"install zip from sdcard"を選択 "choose zip from sdcard"を選択 "full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択 "Yes - Install full_crespo-ota-eng.<ビルドした端末のusername>.zip"を選択
$ fastboot boot recovery-clockwork-6.0.0.6-crespo.img
zipファイルの展開
"install zip from sdcard"を選択 "choose zip from sdcard"を選択 "recovery-clockwork-6.0.0.6-crespo.img"を選択
"Yes - Install recovery-clockwork-6.0.0.6-crespo.img"を選択
Add-onを導入してからブートすると、Googleアカウントを求められるので登録して終了。