NOVO7 Fire CM10 で USB ドングルを使うテスト

公式 ROM だと使えるのですが CM10 だと使えなくなっているらしいのでいじってみるテスト。

やってみたこと。

  1. とりあえず、なんで動かないか眺めてみる。
  2. wpa_supplicant が NL80211 で呼んでいるのに 8192cu.ko が NL80211 で動いていないくさい。
  3. 8192cu.ko をコンパイルするに当たり NL80211 で呼ぶコンフィグがあったので有効にしてみる。
  4. insmod までは問題ないが Wi-Fi を ON にすると端末が再起動する。
  5. ログを見たいが USB にはドングルが挿さってるし USB デバッギングできん。
  6. この方法は保留。


なので逆転の発想。

  1. とりあえず wpa_supplicant を wext で呼ぶ方法に戻せば動くんじゃね。
  2. てことは init.rc の編集すりゃいいんじゃね。


てことで今回はその場しのぎとして wpc_supplicant 周りを動作実績のある公式 ROM のものに戻すことを考えます。

以下手順です。

0. ツールを準備

カーネルいじりとかは Gentoo でやってます。

uImage を分解したりするツール

いろいろありますがコレを使ってみました。

Ramos w17 Pro Cortex A9 Dual Core AML8726-MX new firmware ROM - Page 17 - RAmos - SlateDroid.com
repacking_scripts.zip
mkimage

Gentoo ならパッケージがあります。

dev-embedded/u-boot-tools-2011.12
emerge u-boot-tools して下さい。


Gentoo 以外の人はどうだかわかりませんが、 Gentoo 以外のディストリにもあると思います。 Android のソースにも入ってます。Fire のソースの中にも入ってます。 (ainol-e4-release-code-20120821/common/arch/arm/boot/mkimage)

8192cu ドライバ

Realtek のサイトから落としてきます。

http://152.104.125.41/downloads/downloadsView.aspx?Langid=1&PNid=21&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true
RTL819xC_USB_linux_v3.4.4_4749.20120806.zip

1. カーネルを分解

カーネルは compatibility.zip の中に boot.img の名前で入っているので、コレを解凍、その後 uImage にリネームして extract-uImage-initramfs.sh で分解。

$ mv boot.img uImage
$ sh extract-uImage-initramfs.sh
>>>>> Remove old files
>>>>> Checking for uImage magic word ( 27051956 ) :
4+0 レコード入力
0+1 レコード出力
4 バイト (4 B) コピーされました、 4.0236e-05 秒、 99.4 kB/秒
uImage acknowledged!
>>>>> Remove header from uImage
3995610+0 レコード入力
3995610+0 レコード出力
3995610 バイト (4.0 MB) コピーされました、 7.29679 秒、 548 kB/秒
>>>>> Extracting kernel from uImage
>>>>> Extracting initramfs from kernel
2215536+0 レコード入力
2215536+0 レコード出力
2215536 バイト (2.2 MB) コピーされました、 3.94931 秒、 561 kB/秒
.
dev
sys
boot
boot/mali.ko
boot/ump.ko
data
init
proc
sbin
sbin/adbd
sbin/ueventd
ueventd.rc
default.prop
system
init.rc
initlogo.rle.bak
4328 blocks


initramfs of uImage extracted into initramfs

2. init.rc を編集

分解してできた initramfs ディレクトリ内の init.rc を開き、 wpa_supplicant のドライバ指定を nl80211 から wext に編集します。

--- initramfs/init.rc.orig      2012-11-05 22:00:12.620294791 +0900
+++ initramfs/init.rc   2012-11-05 22:00:57.703717471 +0900
@@ -906,14 +906,14 @@
     disabled
     oneshot

-service wpa_supplicant /system/bin/wpa_supplicant -Dnl80211 -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf
+service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf
     class main
     socket wpa_wlan0 dgram 0660 wifi wifi
     group system wifi inet
     disabled
     oneshot

-service p2p_supplicant /system/bin/wpa_supplicant -Dnl80211 -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf
+service p2p_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf
     class main
     socket wpa_wlan0 dgram 0660 wifi wifi
     group system wifi inet

3. カーネルをリパック

編集した initramfs を含めてパッキングします。シェルスクリプト内部で mkimage コマンドをコピーしようとするので、まずこいつを持ってきます。

Gentoo の場合は /usr/bin/ から持ってくるだけです。その他の場合 Fire のソースの場所等に読み替えてください。

$ cp /usr/bin/mkimage ./


その後、シェルスクリプトを叩いてリパックします。

$ sh build-uImage.sh
>>>>> Remove old files
>>>>> Build initramfs
2215416 blocks
>>>>> Checking for uImage magic word ( 27051956 ) :
4+0 レコード入力
0+1 レコード出力
4 バイト (4 B) コピーされました、 4.1053e-05 秒、 97.4 kB/秒
uImage acknowledged!
>>>>> Remove header from uImage
3995610+0 レコード入力
3995610+0 レコード出力
3995610 バイト (4.0 MB) コピーされました、 7.1887 秒、 556 kB/秒
>>>>> Extracting kernel from uImage
>>>>> Extracting initramfs from kernel
2215536+0 レコード入力
2215536+0 レコード出力
2215536 バイト (2.2 MB) コピーされました、 3.94285 秒、 562 kB/秒
.
dev
sys
boot
boot/mali.ko
boot/ump.ko
data
init
proc
sbin
sbin/adbd
sbin/ueventd
ueventd.rc
default.prop
system
init.rc
initlogo.rle.bak
4328 blocks
>>>>> Fix initramfs size
Add 120 bytes to initramfs.new.cpio
120+0 レコード入力
120+0 レコード出力
120 バイト (120 B) コピーされました、 0.000456803 秒、 263 kB/秒
>>>>> Size of initramfs fixed!
>>>>> Rebuilding kernel Image
159672+0 レコード入力
159672+0 レコード出力
159672 バイト (160 kB) コピーされました、 0.282724 秒、 565 kB/秒
8594620+0 レコード入力
8594620+0 レコード出力
8594620 バイト (8.6 MB) コピーされました、 15.3296 秒、 561 kB/秒
>>>>> Compressing kernel Image to LZMA
>>>>> Making uImage
Image Name:   CrayonMod
Created:      Mon Nov  5 22:10:01 2012
Image Type:   ARM Linux Kernel Image (lzma compressed)
Data Size:    3994403 Bytes = 3900.78 kB = 3.81 MB
Load Address: 80008000
Entry Point:  80008000
>>>>> New uImage ready! <<<<<
>>>>> ENJOY!!! :) <<<<<


うまくいけば NEWBOOT ディレクトリ配下に uImage が作成されます。これが新しい boot.img になりますので、こいつを Fire のカーネルとして起動してやれば OK です。

4. 8192cu ドライバのコンパイル

解説が面倒くさいので簡単に。

  1. Fire のソースをとってくる
  2. ARM 用のクロスコンパイラをとってくる
  3. Fire のソースを解凍
  4. ARM 用のクロスコンパイラを解凍
  5. 8192cu のドライバ zip を解凍
  6. Fire のソース内の common ディレクトリに移動
  7. ARCH=arm CROSS_COMPILE=クロスコンパイラのディレクトリ/bin/arm-none-linux-gnueabi- make prepare
  8. 8192ch ドライバソース内の driver ディレクトリに移動
  9. rtl8188C_8192C_usb_linux_v3.4.4_4749.20120730.tar.gz を解凍
  10. rtl8188C_8192C_usb_linux_v3.4.4_4749.20120730 に移動
  11. Makefile を適当に編集
  12. ARCH=arm CROSS_COMPILE=クロスコンパイラのディレクトリ/bin/arm-none-linux-gnueabi- make

5. 作った boot.img で起動

CWM なインストール zip を作るなり dd で焼き付けるなりすれば OK 。

TIPS
作った uImage を外部 SD のルートに uImage_recovery の名前で置いて、ボリュームダウンを押しながら電源を入れる (リカバリーモードに入る感じ) と、これを読みこんで起動してくれます (CWM と同じ方法) 。
もしうまく起動しないでリカバリーモードに入ってしまったら…ブートイメージの何かが間違っているとわかります。いきなり焼くより安心です。

6. wpa_supplicant 関連の差し替え

CM10 の wpa_supplicant は wext ドライバを使えないので…

# /system/bin/wpa_supplicant -h

wpa_supplicant v2.0-devel-4.1.2
Copyright (c) 2003-2012, Jouni Malinen  and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)

usage:
  wpa_supplicant [-BddhKLqqstuvW] [-P] [-g] \
        -i -c [-C] [-D] [-p] \
        [-b] [-f] [-e] \
        [-o] [-O] \
        [-N -i -c [-C] [-D] \
        [-p] [-b] ...]

drivers:
  nl80211 = Linux nl80211/cfg80211
options:
・
・
・


ので、適当な公式 ROM から

  • /system/bin/wpa_supplicant
  • /system/etc/wifi/wpa_supplicant.conf (要らないかも。試してない。)


これらを持ってきて上書きします。公式から持ってきた wpa_supplicant はこんなバージョンです。

# /system/bin/wpa_supplicant -h

wpa_supplicant v0.8.x
Copyright (c) 2003-2011, Jouni Malinen  and contributors

This program is free software. You can distribute it and/or modify it
under the terms of the GNU General Public License version 2.

Alternatively, this software may be distributed under the terms of the
BSD license. See README and COPYING for more details.

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)

usage:
  wpa_supplicant [-BddhKLqqstuvW] [-P] [-g] \
        -i -c [-C] [-D] [-p] \
        [-b] [-f] [-e] \
        [-o] [-O] \
        [-N -i -c [-C] [-D] \
        [-p] [-b] ...]

drivers:
  wext = Linux wireless extensions (generic)
options:
・
・
・

あとは・・・

  1. ドングルを USB 接続
  2. insmod 8192cu.ko
  3. 端末の Wi-Fi を ON


でつながります。

成果物

無保証です。最初の経緯の通りやっつけ仕事です。


(直接リンクはできるだけおやめ下さい)


不具合を発見した場合、情報の共有という意味で、ここにコメント・もしくは某巨大掲示板にレスつけるなり(笑)してくださると助かります。

よろしくお願いします。



【Flagship アンドロイド 4.0 】 Ainol NOVO7 Fire 烈焔 限定ドロイド君プリントケースセット android 4.0 7インチ タブレットPC Amlogic8726-M6 1GRAM 16GB IPS 液晶搭載【Flagship アンドロイド 4.0 】 Ainol NOVO7 Fire 烈焔 限定ドロイド君プリントケースセット android 4.0 7インチ タブレットPC Amlogic8726-M6 1GRAM 16GB IPS 液晶搭載

Novo7 Buring
売り上げランキング : 3186

Amazonで詳しく見る
by G-Tools