SSブログ
beagleboard ブログトップ
前の10件 | -

BeagleBoard-xMをVPNサーバにしてみる [beagleboard]

BeagleBoard-xMにはUbuntu 12.04をインストールして,USB WiFiを使えるようにした

今回はこれをVPNサーバにしてみる.
プロトコルはPPTPが簡単らしいのだが,docomoのSPモードだと使えないのでL2TP/IPsecを使うことにする.あと,IPsecは事前共有鍵認証を使うことにする.

ではまず必要なパッケージとして,openswanとxl2tpdをインストールしてやる.

最初にopenswanのインストールだが,androidのICSにはバグがあってIPsecがつながらない.ただ,回避策はあって,openswanのソースにパッチを当ててビルドしてやればいい.

では,ソースとパッチのダウンロード.
wget http://download.openswan.org/openswan/openswan-2.6.38.tar.gz
wget http://people.redhat.com/pwouters/osw/openswan-2.6.38-android-ics-natoa.patch

ダウンロードしたら展開.
tar -xzvf openswan-2.6.38.tar.gz

ビルドに必要なツールをインストール.
sudo apt-get install build-essential libgmp3-dev gawk flex bison

そしたらパッチをあててビルド,インストールしてやる.
cd openswan-2.6.38/
patch -p1 < ../openswan-2.6.38-android-ics-natoa.patch 
sudo make ARCH=arm programs
sudo make ARCH=arm install

ちなみに,Openswanの最新バージョンは,2.6.39のようだ.2.6.39ならパッチは必要ないかもしれないが確認していないので分からない.

では,次にxl2tpdをインストール.
こちらは単純に,
sudo apt-get install xl2tpd

でOK.

そしたら,設定開始.
まずはカーネルパラメータの設定.
sudo vi /etc/sysctl.conf

以下を追記
###################################################################
# add settings
###################################################################
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.default.send_redirects = 0 
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0 
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.wlan0.send_redirects = 0
net.ipv4.conf.wlan0.accept_redirects = 0


そしたら設定値の反映.
sudo sysctl -p


次にopenswanの設定.
sudo vi /etc/ipsec.conf


元々ある記述のうち,config setupのprotostack=netkeyに変更するのと,conn ***以下を追記してやる.ファイル全体を示すと以下のようになる.
# /etc/ipsec.conf - Openswan IPsec configuration file

# This file:  /usr/share/doc/openswan/ipsec.conf-sample
#
# Manual:     ipsec.conf.5


version	2.0	# conforms to second version of ipsec.conf specification

# basic configuration
config setup
	# Do not set debug options to debug configuration issues!
	# plutodebug / klipsdebug = "all", "none" or a combation from below:
	# "raw crypt parsing emitting control klips pfkey natt x509 dpd private"
	# eg:
	# plutodebug="control parsing"
	# Again: only enable plutodebug or klipsdebug when asked by a developer
	#
	# enable to get logs per-peer
	# plutoopts="--perpeerlog"
	#
	# Enable core dumps (might require system changes, like ulimit -C)
	# This is required for abrtd to work properly
	# Note: incorrect SElinux policies might prevent pluto writing the core
	dumpdir=/var/run/pluto/
	#
	# NAT-TRAVERSAL support, see README.NAT-Traversal
	nat_traversal=yes
	# exclude networks used on server side by adding %v4:!a.b.c.0/24
	# It seems that T-Mobile in the US and Rogers/Fido in Canada are
	# using 25/8 as "private" address space on their 3G network.
	# This range has not been announced via BGP (at least upto 2010-12-21)
	virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
	# OE is now off by default. Uncomment and change to on, to enable.
	oe=off
	# which IPsec stack to use. auto will try netkey, then klips then mast
	# protostack=auto
	protostack=netkey
	# Use this to log to a file, or disable logging on embedded systems (like openwrt)
	#plutostderrlog=/dev/null

# Add connections here

# sample VPN connection
# for more examples, see /etc/ipsec.d/examples/
#conn sample
#		# Left security gateway, subnet behind it, nexthop toward right.
#		left=10.0.0.1
#		leftsubnet=172.16.0.0/24
#		leftnexthop=10.22.33.44
#		# Right security gateway, subnet behind it, nexthop toward left.
#		right=10.12.12.1
#		rightsubnet=192.168.0.0/24
#		rightnexthop=10.101.102.103
#		# To authorize this connection, but not actually start it, 
#		# at startup, uncomment this.
#		#auto=add

conn L2TP-PSK-NAT
	rightsubnet=0.0.0.0/0
	also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
	forceencaps=yes
	authby=secret
	pfs=no
	auto=add
	keyingtries=3
	ike=aes-sha1;modp3072       # ike phase1 の設定 (暗号化アルゴリズムは AES 、ハッシュアルゴリズムは SHA1 、Diffie-Hellman グループは 15 (3,072bit))
	phase2=esp                  # ike phase2 の設定 (セキュリティプロトコルは ESP)
	phase2alg=aes-sha1;modp3072 # ike phase2 の設定 (暗号化アルゴリズムは AES 、ハッシュアルゴリズムは SHA1 、Diffie-Hellman グループは 15 (3,072bit))
	rekey=no
	ikelifetime=8h
	keylife=1h
	type=transport
	left=10.0.1.100             # 自サーバの IPv4 アドレスを設定する。
	leftprotoport=17/1701
	right=%any
	rightprotoport=17/%any
	# 以下は iOS クライアント向けの設定。
	dpddelay=40
	dpdtimeout=130
	dpdaction=clear

ちなみに,「left=10.0.1.100 # 自サーバの IPv4 アドレスを設定する。」の部分はあくまで例なので,自分のサーバのIPアドレスを設定してやる.

IPsecの事前共有鍵(pre-shared key)の設定.
sudo vi /etc/ipsec.secrets

ファイルがない場合は作成してやる.で,以下を追記してやる.
10.0.1.100 %any: PSK "hogehoge"

ここで,先頭のIPアドレスは上記で設定した自分のサーバのIPアドレスだ.また,hogehogeが事前共有鍵になる.なのでファイルのアクセス権を変更しておく.
sudo chmod 600 /etc/ipsec.secrets


ここまでできたら,IPsecを再起動.
sudo /etc/init.d/ipsec restart


設定の確認をしてみる.
sudo ipsec verify

N/A, WARNINGとDISABLEDは気にしなくていいらしいが,FAILEDが出るとNGだ.だが,openswanをソースからビルドすると,「Two or more interfaces found, checking IP forwarding」の部分がFAILEDと出ることがあるようだが気にしなくていいらしい.
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.37/K3.2.0-51-omap (netkey)
Checking for IPsec support in kernel                            [OK]
 SAref kernel support                                           [N/A]
 NETKEY:  Testing XFRM related proc values                      [OK]
        [OK]
        [OK]
Checking that pluto is running                                  [OK]
 Pluto listening for IKE on udp 500                             [OK]
 Pluto listening for NAT-T on udp 4500                          [OK]
Two or more interfaces found, checking IP forwarding            [OK] <--- FAILEDと出るかも
Checking NAT and MASQUERADEing                                  [OK]
Checking for 'ip' command                                       [OK]
Checking /bin/sh is not /bin/dash                               [WARNING]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]


次にxl2tpdの設定.
sudo vi /etc/xl2tpd/xl2tpd.conf

以下を追記してやる.
[global]

[lns default]
ip range = 10.0.1.201 - 10.0.1.210
local ip = 10.0.1.100
length bit = yes
refuse chap = yes
require authentication = yes
name = l2tp
pppoptfile = /etc/ppp/l2tpd-options

ここで,ip rangeはVPN接続してきたクライアントに割り当てるIPアドレスの範囲で,local ipは自分のサーバのIPアドレスだ.これもあくまで例なので,自分の環境にあわせて設定してやる.

pppの設定.
sudo vi /etc/ppp/l2tpd-options

ファイルが無いので新規作成し以下を記入する.コメントがあるとうまく動かないようなので削除すべし.
name l2tp           # /etc/xl2tpd/xl2tpd.conf で設定した name と合わせる
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
ms-dns 10.0.1.1     # DNS サーバの IPv4 アドレス    
proxyarp
nodefaultroute
lock
nobsdcomp 
mtu 1280
mru 1280


chap認証設定.
sudo vi /etc/ppp/chap-secrets

以下を追記
hogehoge	l2tp	"fugafuga"		*

ここで,hogehogeはUserName, fugafugaはパスワードになる.

ここで,いったんxl2tpdの再起動.
sudo /etc/init.d/xl2tpd restart


ファイヤーウォールでUDP/500とUDP/4500を通すように設定.
sudo ufw allow 500/udp
sudo ufw allow 4500/udp


ESP を通すための設定と,xl2tpd を IPsec 以外から使えないようにする設定と,LAN の NAT をさせる設定とを適切な場所に追加.
sudo vi /etc/ufw/before.rules

*filter に対応する COMMIT の手前に(COMMITの直前に)以下を記載.
# for ESP protocol of IPsec
-A INPUT -p 50 -j ACCEPT
# restricts l2tp to be used under ipsec
-A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport l2tp -j ACCEPT
-A INPUT -p udp -m udp --dport l2tp -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport l2tp -j ACCEPT
-A OUTPUT -p udp -m udp --sport l2tp -j REJECT --reject-with icmp-port-unreachable


次に*filter の COMMIT の後に以下を記載.
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from 192.168.222.0/24
-A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't be processed

COMMIT
# end of nat rules


フォワーディングはデフォルト許可に設定.
sudo vi /etc/default/ufw

以下の設定に変更.
DEFAULT_FORWARD_POLICY="ACCEPT"


ufwを有効化.
sudo ufw enable


IPsec自動起動設定.
sudo update-rc.d ipsec start 90 2 3 4 5 . stop 1 0 1 6 .


あとは,ルーターの設定として,UDP/500とUDP/4500を自分のサーバに転送するように設定してやればOK.


これで完了.
お疲れさまでした.


参考サイト
いっぱいあるけど,特に参考にしたのは以下のサイトです.
Debian GNU/Linux で L2TP / IPsec を使用する VPN サーバを設定する (サーバ側で NAPT しない場合) – Open the Next
○○的な気まぐれ日記 » Androidから自宅サーバー(ubuntu12.04)にアクセスする
VPNでandroidと自宅LANがつながった | 人生崖っぷち

先人に感謝します.

nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

BeagleBoard-xMのUbuntuにUSB WiFiのドライバをインストールしてみる [beagleboard]

ずいぶんと前に,BeagleBoard-xMにUbuntu 12.04をインストールして,USB WiFiをつないでみた.
そのときのUSB WiFiは,PLANEXのGW-USValue-EZだ.残念ながらすでに終息製品扱いらしいが... まぁRealtek社のRTL8192CUを使ってるアダプタなら同じだと思うので参考になると思う.

で,以前,使ってみたときはUbuntuに標準で入ってるドライバで動かしてみたんだけど,いくつか気になる点があった.たとえば...
・GW-USValue-EZが恐ろしく熱くなる.
・青のLEDが点灯しっぱなしになってる.
・通信スピードが遅い気がする.
といったところだ.

で,調べたところ,どうやらRealtekのドライバを入れるといいらしいということが分かったのでインストールしてみる.

まずはドライバのダウンロード.ダウンロードはここからできる.
今だと,「RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip」がダウンロードできるようだ.

そしたら,展開して,展開したディレクトリ内にあるインストールスクリプトを実行すればいい.
$ unzip RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip 
$ cd RTL8188C_8192C_USB_linux_v3.4.4_4749.20121105/
$ sudo sh ./install.sh


が,実際はエラーが出てインストールできない.
で,調べてみたら,ここに対処方法が載ってた.kkAyatakaさんに感謝.その手順通りに作業をしてみる.

まずはカーネルのバージョンを確認.
$ uname -a
Linux hogehoge 3.2.0-51-omap #77-Ubuntu Thu Jul 25 00:39:05 UTC 2013 armv7l armv7l armv7l GNU/Linux

どうやら3.2.0-51-omapらしい.

そしたら,対応バージョンのカーネルのヘッダをとってくる.
$ sudo apt-get install linux-headers-3.2.0-51-omap


次にMakefileを修正する.
$ sudo vi /lib/modules/3.2.0-51-omap/build/Makefile

200行目ぐらいにあるSRCARCHを設定しているところにarmを追加してやる
SRCARCH         := $(ARCH)
SRCARCH         := arm


ここまでやったら再度インストール.
$ sudo sh ./install.sh


あとはUbuntu標準のドライバが読み込まれないように設定.
$ sudo vi /etc/modprobe.d/blacklist.conf

以下を追記してやる
blacklist rtl8192cu


そしたらRebootしてやれば,これで完了.

で,そもそもの気になる点がどうなったかというと,
・GW-USValue-EZが恐ろしく熱くなる. ---> ほどほどに熱くなるぐらいになった.
・青のLEDが点灯しっぱなしになってる. ---> 点滅するようになった.
・通信スピードが遅い気がする. ---> んー,よくわからん.
といったところ.

まぁ,前よりはよくなったので良しとしよう.動作は特に問題なく安定しているようだ.
ただ,このインストール作業,カーネルのアップデートをすると再度やらないといけないので注意.

では,お試しあれ.

nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

GingerBreadのフォントを入れ替えてみる [beagleboard]

BeagleBoard-xMにインストールしたGingerBreadのフォントがいわゆる中華フォントなので,これを入れ替えてみる.

入れ替えるフォントは,Android 4.0で採用されたモトヤフォントを使ってみる.

フォントのダウンロードは,
https://github.com/android/platform_frameworks_base/tree/master/data/fonts

からできる.
ここの,MTLc3m.ttfってのと,MTLmr3m.ttfってのがモトヤフォントだ.MTLc3m.ttfはモトヤLシーダ3等幅というやつでゴシック,MTLmr3m.ttfがモトヤLマルベリ3等幅で丸ゴシックだ.
Apache Licenseに基づき提供されてる.
モトヤのプレスリリースはこれ
ちなみにモトヤフォントはChrome OSにも採用されてるらしい.

で,今回は丸ゴシックなMTLmr3m.ttfを使ってみる.

まず,Androidのフォントについて.
フォントは/system/fonts/に配置されてる.ここに,DroidSansFallback.ttfというファイルがあるはずだ.これがマルチバイト用のフォントで,いわゆる中華フォントの表示に使われているフォントだ.
普通,日本のAndroid端末とかだと,DroidSansJapanese.ttfというのが配置されているらしい.これは日本語用のフォントファイルだ.
日本語環境だと,DroidSansJapanese.ttfがあればこちらが使用されるが,なければDroidSansFallback.ttfが使われる.
で,今のBeagleBoard-xMの/system/fonts/下を見てみると,確かにDroidSansJapanese.ttfは見当たらなくて,つまり中華フォントであるDroidSansFallback.ttfが使われているということになる.

というわけで,DroidSansJapanese.ttfを用意してやれば,日本語フォントを入れ替えられる.
で,先ほどのモトヤフォントの出番だ.

作業はとっても簡単だ.
普通のスマートフォンだとroot取ったりしないとダメらしいが,BeagleBoard-xMならそんなの気にしなくていい.元からroot奪取済みなんだし.
というわけで,まず,ダウンロードしたMTLmr3m.ttfのファイル名をDroidSansJapanese.ttfに変更してやる.
cp MTLmr3m.ttf DroidSansJapanese.ttf

で,あとはadbを使ってコピー.
adb push DroidSansJapanese.ttf /system/fonts/

そしたら再起動してやる.
フォントが変更されてるはずだ.

別にモトヤフォントじゃなくても,世にはいろいろフリーのフォントがあるので,気に入ったものに変更してもいい.手書きっぽいのとか,明朝なんかもいろいろあるようだ.
まぁこの辺はお好みで.
お試しあれ!

nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

GingerBreadの画面をSXGAにしてみる [beagleboard]

以前ビルドしたGingerBreadの画面解像度がVGAのままだったので,変更してみる.
いま使ってるLCDモニタの解像度にあわせて,SXGAにしてみる.

変更するのは,boot scriptを作成しているところだ.
以前は,mkbootscrの,setenvのところを以下のようにしていたが,
setenv bootargs 'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y vram=8M omapfb.vram=0:8M'

今回は以下のようにしてやる(赤字部分を追記してやる).
setenv bootargs 'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapfb.mode=dvi:1280x1024MR-16 omapdss.def_disp="dvi" vram=8M omapfb.vram=0:8M'


そしたら以前と同様にboot.scrを作成してからSDカードを作成してやれば,SXGAで起動するはずだ.

それにしても,SXGAにしただけでかなり印象が変わる...
今までVGAの画像が引き延ばされてたからボケた感じだったけど,それがしゃっきりしたし,なにより画面が広い(当たり前だけど).
なんかいい感じだ.

タグ:boot.scr SXGA
nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

BeagleBoard-xMのAndroidにUSB WiFiをつないでみるの続きの続きをやってみる [beagleboard]

前回の続きをやってみる.

まず,ドライバのディレクトリに行って,ファイルを展開してやる.
cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/driver/
tar xzvf rtl8188C_8192C_usb_linux_v3.4.3_4369.20120622.tar.gz

で,展開したディレクトリ下に移動して,
cd rtl8188C_8192C_usb_linux_v3.4.3_4369.20120622/

そこにあるMakefileを以下のように修正してやる.
CONFIG_PLATFORM_I386_PC = y
となっているので,
CONFIG_PLATFORM_I386_PC = n
に変更して,
CONFIG_PLATFORM_BEAGLEBOARD = y
を追記してやる.

それから,以下を追記.
ifeq ($(CONFIG_PLATFORM_BEAGLEBOARD), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN 
ARCH := arm
CROSS_COMPILE := ~/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
KSRC := ~/rowboat-android/kernel
MODULE_NAME := wlan
endif


で,ドライバのビルドをしたいところだが,カーネルコンフィグに「CONFIG_WIRELESS_EXT=y」を追加してやる必要がある(そうしないとドライバのビルドが失敗する).
そのために,USB ZD1201を組み込んでやる.別にUSB ZD1201なんて必要ないんだけど,CONFIG_WIRELESS_EXT=yにするのにお手軽なので.
cd ~/rowboat-android/kernel/
make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig

で,
Linux/arm 2.6.37 Kernel Configuration
Device Drivers > Network Device Support > Wireless LAN > <*> USB ZD1201 based Wireless device support

となるように設定する.

そしたら,カーネルをビルドして,
make ARCH=arm CROSS_COMPILE=arm-eabi- uImage


ドライバをビルド.
cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/driver/rtl8188C_8192C_usb_linux_v3.4.3_4369.20120622
make


ビルドできたら,wifiディレクトリを作ってそこにwlan.koをコピー.
cd ~/rowboat-android/out/target/product/beagleboard/system
mkdir wifi
cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/driver/rtl8188C_8192C_usb_linux_v3.4.3_4369.20120622/
cp wlan.ko ~/rowboat-android/out/target/product/beagleboard/system/wifi/


で,rootfsのビルド.
cd ~/rowboat-android/
make TARGET_PRODUCT=beagleboard OMAPES=5.x -j2


終わったら,root filesystemのtarballを作る.
cd ~/rowboat-android/out/target/product/beagleboard
mkdir android_rootfs
cp -r root/* android_rootfs
cp -r system android_rootfs
sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2


SDカードの作成.さっき作ったuImageとrootfs.tar.bz2をコピーして,
cd ~/rowboat-android
cp kernel/arch/arm/boot/uImage image_folder/
cp out/target/product/beagleboard/rootfs.tar.bz2 image_folder/

そしたらSDカードに書き込み.
export LANG=C
cd image_folder
sudo ./mkmmc-android.sh /dev/sdb MLO u-boot.bin uImage boot.scr rootfs.tar.bz2


これで完了.

あとは,Android上のWiFiの設定をGUI上でやってくださいな.
設定->ワイヤレス設定で設定できるはず.
お試しあれ!

nice!(1)  トラックバック(0) 
共通テーマ:日記・雑感

BeagleBoard-xMのAndroidにUSB WiFiをつないでみるの続きをやってみる [beagleboard]

前回の続きをやってみる.

具体的にどんなことをやってるのかは,ダウンロードしてきたドライバのandroid_reference_codesディレクトリ下にあるrealtek_wifi_SDK_for_android.txtに書かれてるので,ここでは単純に作業内容をメインに書いておく.
なんか気になることがあったら聞いてくださいな.

では...

まず,libwpa_clientの置き換え.
ひとまず,ダウンロードしてきたドライバのandroid_reference_codesディレクトリ下にあるファイルを展開する.
cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/android_reference_codes
tar xzvf realtek_wifi_SDK_for_android_20120618.tar.gz

そしたら,いくつかファイルをコピー&置き換えてやる.
cd external/
cp -r hostapd-0.6.9_rtl/ ~/rowboat-android/external/

cd ~/rowboat-android/external/wpa_supplicant/
mv Android.mk Android.mk.bak

cd ~/rowboat-android/external/wpa_supplicant_6/wpa_supplicant/
mv Android.mk Android.mk.bak

cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/android_reference_codes/external/wpa_supplicant
cp Android.mk ~/rowboat-android/external/wpa_supplicant/

cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/android_reference_codes/external/wpa_supplicant_6/wpa_supplicant
cp Android.mk ~/rowboat-android/external/wpa_supplicant_6/wpa_supplicant/


次は,libhardware_legacyの置き換え.
cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/android_reference_codes/hardware/libhardware_legacy/wifi/
cp wifi_realtek.c ~/rowboat-android/hardware/libhardware_legacy/wifi/

cd ~/rowboat-android/hardware/libhardware_legacy/wifi/
mv Android.mk Android.mk.bak

cd ~/RTL8188C_8192C_USB_linux_v3.4.3_4369.20120622/android_reference_codes/hardware/libhardware_legacy/wifi/
cp Android.mk ~/rowboat-android/hardware/libhardware_legacy/wifi/


wpa_supplicant.confの作成.
~/rowboat-android/out/target/product/beagleboard/system/etc/下にwifiディレクトリを作って,
cd ~/rowboat-android/out/target/product/beagleboard/system/etc/
mkdir wifi
cd wifi

で,wifiディレクトリの下にwpa_supplicant.confファイルを作って以下の内容を記載してやる.
ctrl_interface=DIR=/data/misc/wifi/wpa_supplicant GROUP=wifi
update_config=1
ap_scan=1


で,ドライバのビルド.
なんだけど,ちょっと長くなってきたので,続きはまた今度にしよう.
次回,ドライバのビルドをやったら完成だ!

nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

BeagleBoard-xMのAndroidにUSB WiFiをつないでみる [beagleboard]

前回,BeagleBoard-xM上のUbuntu 12.04にUSB WiFiをつないでみた.
そのときのUSB WiFiは,PLANEXのGW-USValue-EZだ.



今回は,AndroidのGingerbreadに対応させてみる.

まずは,以前やったように普通にソースコードからビルドする.よって以後の作業はUbuntu上で行うことになる.
で,正常に起動することを確認しておく.ここで正常に起動しなかったら,先に進んでもダメだからだ.

正常に起動するのが確認できたら,WiFiの組み込みを始める.

以前にも書いた通り,GW-USValue-EZに使われているのは,Realtek社のRTL8192CUだ.
Linux用のドライバは,Realtek社からダウンロードできる.
ダウンロード先は,ここ

そこから,「RTL819xCU _USB_linux_v3.4.3_4369.20120622.zip」というファイルがダウンロードできるはずだ.

ダウンロードできたら,展開する.今回はホームディレクトリ直下にダウンロードして,で,展開先もホームディレクトリ直下にした.
cd ~/
unzip RTL819xCU _USB_linux_v3.4.3_4369.20120622.zip

展開すると,documentディレクトリに説明ファイルがいろいろあるし,androidへのポーティング関係は,Gingerbreadまでならandroid_reference_codesディレクトリに,ICSならandroid_reference_codes_ICS_nl80211にある.今回はGingerbreadなので,android_reference_codesディレクトリが対象だ.

で,今回のポーティング作業の詳細は,このディレクトリ内にある「realtek_wifi_SDK_for_android.txt」に書かれてて,これを参考に行ってる.ただし全部をやってる訳じゃなくて必要なとこだけなんだけど.

じゃあ具体的な作業はここから.

まず,BoardConfig.mkを編集する.このファイルは基板ごとの構成を設定するファイルだ.
編集するファイルは,~/rowboat-android/device/ti/beagleboard/下にある.ここのBoardConfig.mkを編集して,以下を末尾に追記してやる.
# for Realtek Wi-Fi RTL8192cu
BOARD_USES_REALTEK_WIFI := true
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
WPA_SUPPLICANT_VERSION := VER_0_6_X

次は,init.rcを編集する.
編集するファイルは,~/rowboat-android/out/target/product/beagleboard/root/下にある.
まず,以下を末尾に追記.
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf -dd
	disabled
	oneshot

service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL
	disabled
	oneshot

それから,もともと記載されてる,wlan_loader,wpa_supplicantとdhcpcdはコメントアウト.
# service wlan_loader /system/bin/wlan_loader -n \
#     -f /system/etc/wifi/firmware.bin \
#     -i /system/etc/wifi/tiwlan.ini
#     disabled
#     oneshot

# service wpa_supplicant /system/bin/wpa_supplicant -Dtiwlan0 -itiwlan0 -c/data/misc/wifi/wpa_supplicant.conf -dd
#     socket wpa_tiwlan0 dgram 660 wifi wifi
#     disabled
#     oneshot

# #service dhcpcd /system/bin/dhcpcd -o domain_name_servers -ABKL
# service dhcpcd /system/bin/dhcpcd  -ABKL tiwlan0
#     disabled
#     oneshot

それから,wifi.interfaceがtiwlan0になってるのをwlan0に修正.
#    setprop wifi.interface tiwlan0
    setprop wifi.interface wlan0


このあと,いくつかのモジュールをRealtek社提供のものと置き換える作業と,ドライバのビルドがあるんだけど,ちょっと長くなってきたので今回はここまで.

nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

BeagleBoard-xMにUSB WiFiをつないでみる [beagleboard]

BeagleBoard-xMを無線LANに対応させてみる.
BeagleBoard-xMにつなぐなら,とにかくちっちゃいのがいい!ということで,PLANEXのGW-USValue-EZを採用.



ホント小さい.そして安い.Amazonで¥900ぐらいで買える.
ちなみに,GW-USValue-EZで使われているチップは,Realtek社のRTL8192CUだ.

まずは,BeagleBoard-xM上のUbuntu 12.04で試してみる.
あとでAndroidでも試すが,まずはハードルの低そうなUbuntuから試してみる.

Linux用のドライバは,Realtek社からダウンロードできる.
ダウンロード先は,ここ
が,しかし,今回はダウンロードしない.
実はUbuntu 12.04には既にこいつのドライバが含まれているのだ.

というわけで,BeagleBoard-xMのUSBポートにGW-USValue-EZをつっこんで,あとはUbuntu上でアクセスポイントに対してパスワードとか設定すれば,あっさりと接続完了.
まったく難しくない.

しかし,しばらく使ってると,GW-USValue-EZが恐ろしく熱くなる.どれぐらい熱いかって言うと,触り続けてたら身の危険を感じるぐらい.で,「熱っ!」って思わず言ってしまうぐらい.
あと,青のLEDが点灯しっぱなしになっているのと,通信スピードが遅い気がするのが,気になる点...

ま,とりあえずは普通に使えてるので良しとしよう.


追記:
Realtelのドライバをインストールしてみた.詳細はここ

nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

GingerBread 2.3.4のビルドの続きをやってみる [beagleboard]

前回はソースコードのダウンロードまでやったので,その続きをやってみる.

DevKitのダウンロード.ディレクトリはお好みで.
cd ~/
wget http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/exports/TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz

ダウンロードしたら展開.
tar xzvf TI_Android_GingerBread_2_3_4_DevKit_2_1.tar.gz

Tool chainにパスを通しておく.
export PATH=~/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

これも実際は.bash_profileに書いておく.

そしたらいよいよビルド作業開始.
まずx-loader.
cd ~/rowboat-android/x-loader/
make CROSS_COMPILE=arm-eabi- distclean
make CROSS_COMPILE=arm-eabi- omap3beagle_config
make CROSS_COMPILE=arm-eabi-

これで,x-loader/下にx-load.binが生成される.
そしたらx-load.binからMLOファイルを生成する.
ちなみに,BeagleBoard-xMのブートシーケンスでは,bootromからx-loader(MLO)が起動され,そのあとu-bootが起動してからLinux(android)が起動するというようになっているようだ.
x-load.binからMLOを生成するにはsignGPというツールを使うのだが,こいつはさっきダウンロードしたDevKitに含まれてる.参考サイトの説明によれば,signGPはx-loaderディレクトリにコピーしろとあるので,コピーしてから実行する.最後にファイル名をMLOにしたら完了だ.
cd ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/signGP/
cp signGP ~/rowboat-android/x-loader/
cd ~/rowboat-android/x-loader/
./signGP ./x-load.bin 
mv x-load.bin.ift MLO


そしたら次はu-boot.
cd ~/rowboat-android/u-boot/
make CROSS_COMPILE=arm-eabi- distclean
make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_config
make ARCH=arm CROSS_COMPILE=arm-eabi- 

これで,u-boot/下にu-boot.binが生成される.

で,kernelのビルド.
cd ~/rowboat-android/kernel/
make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_android_defconfig
make ARCH=arm CROSS_COMPILE=arm-eabi- uImage

そこそこ時間がかかる.


そしたら,Android filesystemのビルド.
そのままビルドしようとするとエラーとワーニングが出るので,ちょっと対策.

まずエラー対策.
以下のファイルを修正する.
~/rowboat-android/frameworks/base/libs/utils/Android.mk
変更前:
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
変更後:(-fpermissiveを追加)
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive

次にワーニング対策.
以下のファイルを修正する.
~/rowboat-android/build/core/combo/HOST_linux-x86.mk
変更前:
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
変更後:(ーU_FORTIFY_SOURCEを追加)
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

で,ビルド.
cd ~/rowboat-android/
make TARGET_PRODUCT=beagleboard OMAPES=5.x -j2

最後の「-j2」ってところの数字はビルドするマシンの環境(プロセッサ数)によって変わる.参考サイトによればプロセッサ数の2倍の値にしろとあるので-j2とした(うちのビルドマシンは古いのでシングルプロセッサなのである...).

で,こいつはkernelのビルドよりもずっと時間がかかる.
気長に待ちましょう.

終わったら,root filesystemのtarballを作る.
cd ~/rowboat-android/out/target/product/beagleboard
mkdir android_rootfs
cp -r root/* android_rootfs
cp -r system android_rootfs
sudo ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2


あとちょっと...
boot scriptを作成.
cd ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-bootscr

mkbootscrを編集.setenvのところを以下のように書き換える.
setenv bootargs 'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y vram=8M omapfb.vram=0:8M'

書き換えて保存したら,
./mkbootscr

これでboot.scrができる.

SDカードの作成.
まず必要なものを1つのディレクトリに集める.
cd ~/rowboat-android
mkdir image_folder
cp kernel/arch/arm/boot/uImage image_folder/
cp u-boot/u-boot.bin image_folder/
cp x-loader/MLO image_folder/
cp ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-bootscr/boot.scr image_folder/
cp out/target/product/beagleboard/rootfs.tar.bz2 image_folder/
cp ~/TI_Android_GingerBread_2_3_4_DevKit_2_1/Tools/mk-mmc/mkmmc-android.sh image_folder/

そしたらSDカードに書き込み.
export LANG=C
cd image_folder
sudo ./mkmmc-android.sh /dev/sdb MLO u-boot.bin uImage boot.scr rootfs.tar.bz2

で,完了です.おつかれさまでした.

これで,BeagleBoard-xMにセットして電源ON!してやれば,Androidが起動するはずです.
nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感

GingerBread 2.3.4をビルドしてみる [beagleboard]

先日VAIOにUbuntu 12.04をインストールしたので,その環境でGingerBread 2.3.4をビルドしてみる.

参考にしたのは,「TI-Android-GingerBread-2.3.4-DevKit-2.1 DeveloperGuide」だ.

まず,ビルドに必要なツール類をインストール.
まず,Java 6のインストール用にリポジトリを追加.
sudo apt-get install python-software-properties
sudo apt-add-repository ppa:flexiondotorg/java
sudo apt-get update


なお,公開鍵エラーが出るので以下を実行しておく.
sudo gpg --keyserver keyserver.ubuntu.com --recv 2EA8F35793D8809A
sudo gpg --export --armor 2EA8F35793D8809A | sudo apt-key add -


で,必要なものをまとめてインストール.Javaはjava-6-sunが使われるようにする.
sudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev minicom tftpd uboot-mkimage expect
上記は1行で.
で,
sudo update-java-alternatives -s java-6-sun

javaのバージョンは以下で確認できる.
java -version

うちではこんな感じで表示された.
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) Client VM (build 20.5-b03, mixed mode, sharing)


そしたら,ソースのダウンロード.
homeディレクトリにbinディレクトリを作ってパスを通しておく.
mkdir ~/bin
PATH=~/bin:$PATH

とりあえず上記でできるが,ま,面倒なので,.bash_profileに以下のように書いとく.
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
PATH=~/bin:$PATH
export PATH

で,Repoスクリプトをダウンロードして,実行権限をつけてやる.
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo

そしたらソースコードのダウンロードディレクトリを作ってから,ダウンロード(sync)実行.
mkdir rowboat-android
cd rowboat-android
repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-GingerBread-2.3.4-DevKit-2.1.xml
repo sync

途中で,名前とかメールアドレス.あと表示に色が使えるかとか聞かれるので答える.

かなりの量をダウンロードするのでとても時間がかかる.
寝る前に実行して夜中に回しとくのがいいかな...

とりあえず今回はここまで.次回はビルド作業だ.
タグ:Git repo sync
nice!(0)  トラックバック(0) 
共通テーマ:日記・雑感
前の10件 | - beagleboard ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。