2009年5月31日日曜日

USB Gadget EthernetとOS X

Linux USB Gadget Ethernetはイーサーネットアドレスをランダムで設定するため,OS Xに繋ぐ度にOS X側のネットワークインタフェース(en?)が増えていってしまう。これを防ぐためにLinux側のg_etherモジュールでMACアドレスを固定的に割り当てるよう以下のように設定する。
$ cat /etc/modprobe.d/options.conf
# assigne fixed MAC addresses
options g_ether host_addr=46:0d:9e:67:69:eb dev_addr=46:0d:9e:67:69:ec
$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto usb0
iface usb0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
$ sudo modprobe g_ether
$ ifconfig usb0
usb0 Link encap:Ethernet HWaddr 46:0d:9e:67:69:ec
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:106 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12842 (12.8 KB) TX bytes:420 (420.0 B)

OS X側に作成されてしまった余分なenインタフェースを削除するためには
/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
を削除すればよい。

2009年5月24日日曜日

Android VNC Server

SurfaceFlingerのVNC Server機能を使ってみる。
(1) frameworks/base/libs/surfaceflinger/SurfaceFlinger.cppの中のENABLE_VNC_SERVERを有効にしてAndroidをビルドする。
#define ENABLE_VNC_SERVER   1
(2) VNC Serverはローカルにbindされるので外からアクセスできない。"Android VNC Server ?"の投稿に従ってsimple-tcp-proxyを実行する。
$ simple-tcp-proxy 192.168.1.2 5900 127.0.0.1 5900
(3) 192.168.1.2:5900のVNCサーバに接続するとAndroidの画面が表示される。
Android VNC Server
* Android1.5ではこのVNC機能がソースコードより削除された模様……。

2009年5月16日土曜日

Android Linux 2.6.29 for BeagleBoard

EMBINUXで公開されているAndroidのカーネルではHDMI端子に接続したBRAVIAに画面表示することができなかった。DSS2を使えばHDMIから画面表示できることは事前に確認できていたので,ディスプレイドライバにDSS2を使ったBeagle Board用Androidカーネルをビルドすることにする。以下はその手順。

1.  Androidの取得
repo init & sync で Android の master branch をダウンロードする。

2. Android patch の作成
Linux 2.6.29に対してのAndroid修正分の差分patchを作成する。gitを使ってtag 2.6.29とandroid-2.6.29ブランチの差分をとる。
$ cd mydroid/kernel
$ git diff 2.6.29 android-2.6.29 > android_diff-2.6.29.patch

3. Beagle Board用Linuxの取得
 linux-omapのmaster branchを持ってきて,tag  2.6.29-omap を checkoutする。
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6
$ cd linux-omap-2.6
$ git checkout -b beagle_android-2.6.29 2.6.29-omap

4. DSS2パッチの適用
2.6.29に対するDSS2パッチをrcn-ee.comより取得・適用する。
$ wget http://www.rcn-ee.com/deb/kernel/beagle/jaunty/v2.6.29-58cf2f1-oer33/v2.6.29-58cf2f1-oer33.diff
$ patch -p1 < v2.6.29-58cf2f1-oer33.diff

5. Android パッチの適用
2.6.29に対するAndroid修正分のパッチを適用する。
$ patch -p1 < android_diff-2.6.29.patch

reject された部分を手で修正(2ファイル)

6. Kernel Build
dss_omap3_beagle_defconfigを元に,menuconfig で Android に必要なカーネルオプションを有効にしてカーネルをビルドする。
$ make ARCH=arm dss_omap3_beagle_defconfig
$ make ARCH=arm menuconfig
$ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm uImage

7. Androidのビルド
EMBINUXからAndroidをrepo syncしてmakeする。
あとは,BeagleboardUbuntuに従って用意したUbuntu環境にuImageとAndroidを組み合わせればOK

8. その他
* キーボードが効かなかったが,/system/usr/{keylayout,keychars}/のファイルを chmod 666 することで解決。感謝>Android Zaurus

2009年5月9日土曜日

Cut the Zsh Prompt Down to Size

zsh でプロンプトにカレントディレクトリを表示するとき,長いパス名を適当に短くして表示するための設定。
set_rps1() {
DIR=`pwd|sed -e "s|$HOME|~|"`
if [ ${#DIR} -gt 30 ]; then
CurDir=${DIR[1,12]}...${DIR[${#DIR}-15,${#DIR}]};
else
CurDir=$DIR;
fi
RPS1="(${CurDir})"
}
precmd() {
set_rps1
}

.zshrcに設定しておくと,以下のような表示になる。
nishio@macBook[1]$                                                       (~)
nishio@macBook[2]$ cd /opt/codesourcery/libexec/gcc/arm-none-linux-gnueabi/
nishio@macBook[3]$ (/opt/codesou...ne-linux-gnueabi)

参照:Customizing the Terminal: The Prompt