2013年4月7日日曜日

Fedora 18でBlueZ 5.3をビルドしてみよう

LinuxではBlueZ 5.0で、Bluetooth 4.0のLEモードが実装されています。
ですが、現状のところBlueZ 5.xのパッケージが用意されているディストリビューションはありません。

そんなわけで、とりあえずビルドしてみましょう。

今回使うのは、Fedora 18。64ビット版の(Live-CDFedora-18-x86_64-Live-Desktop.iso)をVMware仮想マシン上にインストールしました。

インストールに関しては省略します。まあ、特殊なことは何もありません。普通にインストールしましょう。
ちなみに、VMware上でインストールがうまくいかない(画面が正常に表示されない)場合には、"3Dグラフィックのアクセラレーション"をOFFにしておくと良いようです。

インストール後は、一旦UPDATEを行ったのち、BlueZのビルドに必要なパッケージを追加でインストールします。
$ su
# yum install gcc libusb-devel dbus-devel glib2-devel libudev-devel libical-devel readline-devel

vmware-toolをインストールしたい場合は下記も追加します。
# yum install kernel-devel

あと追加でwgetも。
# yum install wget
# exit


bluezのソースコードを入手します。公式のHPより現状最新のbluez-5.3をダウンロードしてきます。
$ wget http://ftp.kernel.org/pub/linux/bluetooth/bluez-5.3.tar.xz

展開します。
$ xz -d bluez-5.3.tar.xz
$ tar xvf bluez-5.3.tar

ビルド
$ cd bluez-5.3
$ ./configure
$ make

続けてインストールしますが、これを行うとプリインストールされているBluetoothアプレットは使えなくなりますのでご注意。
$ su
# make install

動作確認するためには、一旦再起動します。

再起動後、試しにhcitoolコマンドを打ってみます
$ hclitool
...
lescan
lewladd
...

LE系のコマンドが追加されていますね。


さて、 続きはまた今度。

2013年3月3日日曜日

pandaboard ESで4AJ.2.2(Android JB)を動かしてみよう

Omappediaで公開されたpandaboard向けの
4AJ.2.2 OMAP4 Jelly Bean Panda Notes
を実践してみたレポートでございます。

大まかな手順については、以前の4AI.1.4と同じですが、細々と変わってる部分もありますので、また一通り書いておきます。

使うのはUbuntu 12.04(64bit版)と、pandaboard ESです。


環境準備
手順の通りでOK。

まずは以下のパッケージをインストールします。
$ sudo apt-get install git-core flex bison gperf libesd0-dev zip gawk ant libwxgtk2.6-dev zlib1g-dev build-essential tofrodos
$ sudo apt-get install lib32readline6-dev libstdc++6 lib32z1 lib32z1-dev ia32-libs g++-multilib libx11-dev lib32ncurses5-dev uboot-mkimage

追加で
$ sudo apt-get install gcc-4.4 gcc-4.4-multilib g++-4.4 g++-4.4-multilib

手順には載ってませんが、ビルドが通らないため以下も追加で
$ sudo apt-get install libxml2-utils xsltproc kpartx

armのツールチェインのインストールについては、下記の手順を例に。
$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ sudo mkdir -p /opt/toolchains
$ sudo tar jxvf arm-2010q1-202-* -C /opt/toolchains/
/opt/toolchains/arm-2010q1/にインストールされます。

repoツールの入手
$ mkdir ~/bin -p
$ sudo apt-get install curl
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH

JDK6についてはこちらを参照。


ソースツリーのダウンロード
ここは手順通りでOKです。

まずはAndroidのソースツリーのダウンロード。
適当なワーク用ディレクトリ下にて、
$ mkdir -p 4AJ.2.2; cd 4AJ.2.2
$ export YOUR_PATH=`pwd`
$ mkdir -p mydroid; cd mydroid
$ export MYDROID=`pwd`
$ repo init -u git://git.omapzoom.org/platform/omapmanifest.git -b 27.x -m RLS4AJ.2.2_JellyBean.xml
$ repo sync
回線によっては半日近くかかりますので、気長に待ちましょう。

続いてはKernel。githubに変わっていますね。
$ cd ${YOUR_PATH}
$ git clone git@github.com:icepeda/omap.git kernel/android-3.0
$ cd kernel/android-3.0
$ git fetch origin icepeda-panda-4aj22:master
$ git checkout master
Permission denied (pubickey).
と怒られてしまった場合は、こちらを参照。

続いてはU-boot
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/u-boot.git u-boot
$ cd u-boot
$ git checkout 2af35fca236557add6fdd33b836bf5c64455ac8f

続いてはX-loader
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/x-loader.git x-loader
$ cd x-loader
$ git checkout 4975b24da3887edff5cd24e44ca7cb4013f04239

パッチあて
こちらも基本手順の通りでOK。

まずはX-loaderへのパッチあて。
$ cd ${YOUR_PATH}/x-loader
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6228/xloaderpanda.patch
$ git am xloaderpanda.patch

続いてはU-bootへのパッチあて
$ cd ${YOUR_PATH}/u-boot
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6229/ubootpanda.patch
$ git am ubootpanda.patch

Kernelへのパッチあては必要なし
最後はAndroidへのパッチあて。
$ cd ${MYDROID}/device/ti/panda
$ git fetch git@github.com:icepeda/panda.git icepeda-panda-4aj22:master
$ git checkout master
$ cd ${MYDROID}/device/ti/proprietary-open
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6240/proprietaryopenpanda.patch
$ git am proprietaryopenpanda.patch
$ patch -p1 < devicepanda3.patch
$ cd ${MYDROID}/hardware/ti/wlan
$ wget https://gforge.ti.com/gf/download/frsrelease/961/6239/hardwarepanda.patch
$ git am hardwarepanda.patch
$ cd ${MYDROID}/hardware/ti/dvp/
$ wget https://gforge.ti.com/gf/download/frsrelease/1021/6404/hardwarepanda2.patch
$ git am hardwarepanda2.patch
最後のパッチだけ手順とは当てる場所が異なっていますので注意。


ビルド
面倒なのでスクリプトを書きましょう。(単なるコピペですが。)

まずは環境変数のセット。下記をbuildenvというファイル名で保存しましょう。
#common
export YOUR_PATH=`pwd`
export PATH=$PATH:/opt/toolchains/arm-2010q1/bin
export MYDROID=${YOUR_PATH}/mydroid
mkdir -p $MYDROID/logs
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PATH=${YOUR_PATH}/u-boot/tools:$PATH
 
#for WLAN Driver
export KERNEL_DIR=${YOUR_PATH}/kernel/android-3.0
export KLIB=${KERNEL_DIR}
export KLIB_BUILD=${KERNEL_DIR}
 
#for SGX Driver
export KERNELDIR=${YOUR_PATH}/kernel/android-3.0
X-loaderのビルドを行うbuild_xloader.shです。
#!/bin/bash
 
. buildenv
 
cd ${YOUR_PATH}/x-loader
make distclean
make ARCH=arm omap44XXpanda_config
make ift 2>&1 |tee $MYDROID/logs/x-loader_make.out

U-bootのビルドを行うbuild_uboot.shです。
#!/bin/bash
 
. buildenv
 
cd ${YOUR_PATH}/u-boot
make distclean
make ARCH=arm omap44XXpanda_config
make 2>&1 |tee $MYDROID/logs/u-boot_make.out

KernelとModuleのビルドを行うbuild_kernel.KernelとModuleのビルドを行うbuild_kernel.shです。
#!/bin/bash
 
. buildenv
 
cd ${YOUR_PATH}/kernel/android-3.0
#make ARCH=arm distclean
make ARCH=arm panda_defconfig
make ARCH=arm uImage 2>&1 |tee $MYDROID/logs/kernel_make.out
make ARCH=arm modules 2>&1 |tee $MYDROID/logs/kernel_modules.out
WLAN Driverのビルドを行うbuild_wlan_driver.shです。
#!/bin/bash
 
. buildenv
 
cd $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx
make ARCH=arm 2>&1 |tee $MYDROID/logs/wlan_driver_make.out

Androidのビルドを行うbuild_android.shです。
#!/bin/bash
 
. buildenv
 
cd $MYDROID
source build/envsetup.sh
lunch full_panda-eng
#make clean ;#(required for rebuild only)
make HOST_CC=gcc-4.4 HOST_CXX=g++-4.4 HOST_CPP=cpp-4.4 -j4 2>&1 |tee $MYDROID/logs/android_make.out

OMAP4OMAP4に搭載されているGraphicアクセラレータ用のSGX Driverをビルドするbuild_sgx_driver.shです。
#!/bin/bash

. buildenv

if [ ! -d $MYDROID/device/ti/proprietary-open/omap4/sgx_src/eurasia_km ]; then
   cd $MYDROID/device/ti/proprietary-open/omap4/sgx_src
   tar xzf eurasia_km.tgz
fi

cd $MYDROID
source build/envsetup.sh
lunch full_panda-eng

cd $MYDROID/device/ti/proprietary-open/omap4/sgx_src/eurasia_km/eurasiacon/build/linux2/omap4430_android
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- TARGET_PRODUCT="blaze_tablet" BUILD=release TARGET_SGX=540 PLATFORM_VERSION=4.0
最後は、書き込むイメージを一か所にまとめるbuild_img.shです。
#!/bin/bash

. buildenv

#Preparing Android binaries
export BOARD_TYPE="panda"

cd $MYDROID/out/target/product/$BOARD_TYPE
mkdir -p system/lib/modules
cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/compat/compat.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/net/wireless/cfg80211.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/net/mac80211/mac80211.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/wl12xx.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/wl12xx_sdio.ko system/lib/modules/

cp $MYDROID/out/target/product/$BOARD_TYPE/target/kbuild/pvrsrvkm_sgx540_120.ko system/lib/modules/

#Updating Ducati
cd ${MYDROID}/out/target/product/panda/system/vendor/firmware/
rm ducati-m3.bin
wget https://gforge.ti.com/gf/download/frsrelease/997/6342/4AJ.2.2_Blaze_ducati-m3.bin
mv 4AJ.2.2_Blaze_ducati-m3.bin ducati-m3.bin

#Preparing images
cd $YOUR_PATH
mkdir -p omap4_sd_files_$BOARD_TYPE
cd omap4_sd_files_$BOARD_TYPE
cp -f $MYDROID/out/host/linux-x86/bin/fastboot .
cp -f $MYDROID/out/host/linux-x86/bin/mkbootimg .
cp -f $MYDROID/out/host/linux-x86/bin/simg2img .
cp -f $MYDROID/out/host/linux-x86/bin/make_ext4fs .

cp -f ${YOUR_PATH}/x-loader/MLO .
cp -f ${YOUR_PATH}/u-boot/u-boot.bin .
cp -f ${YOUR_PATH}/kernel/android-3.0/arch/arm/boot/zImage .

#Creating img files
cd ${MYDROID}
find out/target/product/$BOARD_TYPE -name *.img -exec rm -f {} \; 
source build/envsetup.sh
lunch full_panda-eng
make HOST_CC=gcc-4.4 HOST_CXX=g++-4.4 HOST_CPP=cpp-4.4
cp -f ${MYDROID}/out/target/product/$BOARD_TYPE/*.img $YOUR_PATH/omap4_sd_files_$BOARD_TYPE

cd $YOUR_PATH/omap4_sd_files_$BOARD_TYPE
./mkbootimg --kernel zImage --ramdisk ramdisk.img --base 0x80000000 --board omap4 -o boot.img

cd $YOUR_PATH/omap4_sd_files_$BOARD_TYPE
dd if=/dev/zero of=./cache.img bs=1048510 count=128
mkfs.ext4 -F cache.img -L cach

各シェルスクリプトには実行権限を与えておきましょう。下記のように実行します。

$ cd ${YOUR_PATH}
$ ./build_xloader.sh
$ ./build_uboot.sh
$ ./build_kernel.sh
$ ./build_wlan_driver.sh
$ ./build_android.sh
$ ./build_sgx_driver.sh
$ ./build_img.sh

SDカードへのAndroidブートイメージ書き込み
ここは完全に前回と同じですので略..
シリアルコンソールでautobootを止めて、fastbootで書き換えるいつもの手順です。

起動させてみると...


なんか画面の大きさが...期待外れ...
一応WiFiは動く。
Bluetoothは起動せず。

画面遷移などはわりとサクサク動きますね。
ブラウザは凄まじく動作が重いですが。

ソースコードはあるので、カスタマイズできると面白くなるかも。

一応、以上です。

2013年2月24日日曜日

githubのアカウントを作ろう

githubで公開されているとあるソースツリーを入手(git clone)したかったんですが、
Permission denied(publickey)
と怒られてしまいまして。

どうやらgithubに登録しておかなければいけないようです。


無料アカウントを作る
githubのPlans & Pricingのページで、無料の"Create a free account"をクリックします。

アカウント名、メールアドレス、パスワードを入力します。

以上でアカウント作成は完了。

SSHキーを登録する
Permission denied(publickey)と怒られる場合は、これが必要です。

Ubuntuでの手順ですが、Linuxなら大体同じで良いかと思います。

まず、自分のキーを生成するために下記コマンドを入力します。
$ ssh-keygen -t rsa -C "アカウント作成時に登録したメールアドレス"
Enter file in which to save the key (~/.ssh/id_rsa):
(キーの保存先を変更するかどうか?特に問題なければEnter)
Enter passphrase (empty for no passphrase):
(パスフレーズを入力せよ。なくてもOK。Enterで)
Enter same passphrase again:
(パスフレーズをもう一度入力せよ。Enterで)
すると、秘密鍵と公開鍵がホームディレクトリの.ssh/のid_rsa、id_rsa.pubに生成されます。
(使い回しもできますので、どこかに大切に保管しておきましょう。)

続いて、githubにサインインしておきまして、右上の方にある"Account Settings"のアイコンをクリックします。
左側のメニューから"SSH Keys"をクリックします。
そして、"Add SSH key"をクリック。

Titleは任意に入力。
Keyには上記で生成した~/.ssh/id_rsa.pubの中身をそのままコピーして貼り付けます。

"Add key"をクリックして登録完了です。

これでgithubのgit cloneが無事に進行します。

以上。やってみたらわりと簡単でしたね。

2013年2月17日日曜日

pandaboard ESでUbuntu 12.04

pandaboardでUbuntuを動かすには、OMAP4用のイメージがすでに用意されていますのでAndroidよりもお手軽です。

OMAP4用のUbuntu 12.04.2のダウンロードはこちらから。
今回はPreinstalled desktop imageの
Texas Instruments OMAP4 (Hard-Float) preinstalled desktop image
を試してみましょう。

まずは、ダウンロードしたファイルを適当な解凍ツールを使って解凍します。
ubuntu-12.04-preinstalled-desktop-armhf+omap4.img.gz

解凍すると
precise-preinstalled-desktop-armhf+omap4.raw
というファイル(2GB)があらわれますので、
これをUbuntuであればddコマンド、WindowsであればDD for Windowsを使ってSDカードに直接書き込みます。
なお、初期イメージは2GBですが、内容はインストーラーイメージになっており、セットアップの途中で全領域が使われるようになりますので2GBよりも大きいSDカードでOKです。

続いて、pandabord ESに上記で作成したSDカード、キーボード、マウス、HDMI、必要に応じてLANケーブルを接続し、電源を入れます。

Ubuntuのローディング画面が表示されてからずいぶん(10分少々)と待たされますが、 起動完了するとUbuntuのインストールセットアップのウィザードが表示されますので、通常通り進めていけばインストールは完了します。


起動すると普通にUbuntuです。

インストールしたての状態では、
WiFiは動くようですが、Bluetoothは動かないようです。
kenrelのバージョンは3.2.0(OMAP4用)ですね。

2012年7月22日日曜日

pandaboard ESで4AI.1.4(Android ICS)を動かしてみよう

Omappediaでは4AIというTI OMAP4向けのリリースが行われています。これは本来TIのOMAP4評価ボード向けのリリースであり、pandaboardでは動かすことができません。
ところがしかし!4AI.1.4 OMAP4 Icecream Sandwich Panda Noteというページが突然出現しました。
これはつまり、pandaboardでも動かせるということでしょうか。

今回はUbuntu 12.04(64bit版)と新規入手したpandabaord ESを使って試してみましょう。

環境準備
必要なパッケージのインストールについては、公式サイトに載っているのですが、こちらはまだUbuntu 11.10となっていて情報が古い。
ので、Linaroを参考にする方がよさそうです。

まずは以下のパッケージをまとめてインストールします。
$ 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 lib32z-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils uuid-dev libgl1-mesa-dev

さらに今回はUbuntu 12.04ですので、手順の通り、以下のパッケージもインストール。
$ sudo apt-get install lib32readline5-dev

加えて、今回のpandaboard用ビルドに必要となるパッケージをインストールします。参考はこちら
$ sudo apt-get install gcc-4.4 gcc-4.4-multilib g++-4.4 g++-4.4-multilib

armのツールチェインのインストールについては、下記の手順を例に。
$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ sudo mkdir -p /opt/toolchains
$ sudo tar jxvf arm-2010q1-202-* -C /opt/toolchains/
/opt/toolchains/arm-2010q1/にインストールされます。

Javaは、以前紹介したこちらの手順でJDK6をインストールしておきます。

repoツールについては以下のようにインストール。
$ mkdir ~/bin -p
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH

ソースツリーのダウンロード
こちらの手順に従います。

まずはAndroidソースツリーのダウンロードです。
適当なワーク用ディレクトリ以下にて、
$ mkdir -p 4AI.1.4; cd 4AI.1.4
$ export YOUR_PATH=`pwd`
$ mkdir -p mydroid; cd mydroid
$ export MYDROID=`pwd`
$ repo init -u git://git.omapzoom.org/platform/omapmanifest.git -b 27.x -m RLS4AI.1.4_IcecreamSandwich.xml
$ repo sync
回線によっては半日近くかかりますので、気長に待ちましょう。

続いてはKernel
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/kernel/omap.git kernel/android-3.0
$ cd kernel/android-3.0
$ git checkout d5e6ee8b7b648094892e501b4ee6e2424d59f7d1

続いてはU-boot
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/u-boot.git u-boot
$ cd u-boot
$ git checkout b2f9ce5c0c2747f1af86d26f9cadbc36af9b7da6

続いてはX-loader
$ cd ${YOUR_PATH}
$ git clone git://git.omapzoom.org/repo/x-loader.git x-loader
$ cd x-loader
$ git checkout 835089cdb52288fcf1ca2f14018ae756842be724

パッチあて
4AI.1.4というリリースはTIのOMAP4評価ボード用のソースコードです。そのため、pandaboardで動かすには、パッチをあてる必要があります。
手順の通りgit amでパッチを当てればよいのですが、私は容量削減のために.gitなどはすべて削除してあります。そのためpatchコマンドを使ってあてていきます。

まずはX-loaderへのパッチあて。
$ cd ${YOUR_PATH}/x-loader
$ wget https://gforge.ti.com/gf/download/user/9174/5768/xloaderpanda.patch
$ patch -p1 < xloaderpanda.patch

続いてはU-bootへのパッチあて
$ cd ${YOUR_PATH}/u-boot
$ wget https://gforge.ti.com/gf/download/user/9174/5769/ubootpanda.patch
$ patch -p1 < ubootpanda.patch

続いてはKernelへのパッチあて
$ cd ${YOUR_PATH}/kernel/android-3.0
$ wget https://gforge.ti.com/gf/download/user/9174/5770/kernelpanda1.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5771/kernelpanda2.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5772/kernelpanda3.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5775/kernelpanda4.patch
$ patch -p1 < kernelpanda1.patch
$ patch -p1 < kernelpanda2.patch
$ patch -p1 < kernelpanda3.patch
$ patch -p1 < kernelpanda4.patch

最後はAndroidへのパッチあて。
$ cd ${MYDROID}/device/ti/panda
$ wget https://gforge.ti.com/gf/download/user/9174/5778/devicepanda1.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5779/devicepanda2.patch
$ wget https://gforge.ti.com/gf/download/user/9174/5780/devicepanda3.patch
$ patch -p1 < devicepanda1.patch
$ patch -p1 < devicepanda2.patch
$ patch -p1 < devicepanda3.patch
$ cd ${MYDROID}/device/ti/proprietary-open
$ wget https://gforge.ti.com/gf/download/user/9174/5777/proprietaryopenpanda.patch
$ patch -p1 < proprietaryopenpanda.patch
$ cd ${MYDROID}/device/ti/common-open
$ wget https://gforge.ti.com/gf/download/user/9174/5776/commonopenpanda.patch
$ patch -p1 < commonopenpanda.patch

ビルド手順を試していて手順通りではビルドが通らないという不都合があったので、下記パッチを当てます。コピペしてpanda_defconfig.patchという名前で保存しましょう。
--- a/kernel/android-3.0/arch/arm/configs/panda_defconfig
+++ b/kernel/android-3.0/arch/arm/configs/panda_defconfig
@@ -325,16 +325,16 @@ CONFIG_SND_OMAP_SOC_SDP4430=y
 CONFIG_SND_OMAP_SOC_OMAP4_HDMI=y
 CONFIG_SND_OMAP4_ABE_USE_ALT_FW=y
 # wl12xx support
-CONFIG_CFG80211=y
+CONFIG_CFG80211=m
 CONFIG_NL80211_TESTMODE=y
 CONFIG_LIB80211=y
-CONFIG_MAC80211=y
+CONFIG_MAC80211=m
 CONFIG_MAC80211_LEDS=y
 CONFIG_MAC80211_DEBUGFS=y
 CONFIG_USB_ZD1201=y
-CONFIG_WL12XX_MENU=y
-CONFIG_WL12XX=y
-CONFIG_WL12XX_SDIO=y
+CONFIG_WL12XX_MENU=m
+CONFIG_WL12XX=m
+CONFIG_WL12XX_SDIO=m
 CONFIG_CRYPTO_PCBC=y
 CONFIG_CRYPTO_MD4=y
 CONFIG_CRYPTO_MICHAEL_MIC=y
panda_defconfig.patchをあてる。
$ cd ${YOUR_PATH}
$ patch -p1 < panda_defconfig.patch

さらに.gitを消している場合ではビルドに失敗してしまうので下記のパッチも当てます。
当てます。 compat_driver_wl12xx.patchという名前で保存しましょう。
--- a/mydroid/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/Makefile
+++ b/mydroid/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/Makefile
@@ -7,8 +7,8 @@ define filechk_version.h
                        "$(shell git describe --dirty)";')
 endef
 
-$(obj)/version.h: .git/HEAD .git/index .git/refs/tags
-       @$(call filechk,version.h)
+#$(obj)/version.h: .git/HEAD .git/index .git/refs/tags
+#      @$(call filechk,version.h)
 
 $(obj)/main.c: $(src)/version.h
 
--- /dev/null
+++ b/mydroid/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/version.h
@@ -0,0 +1,2 @@
+static const char *wl12xx_timestamp = __TIMESTAMP__;
+static const char *wl12xx_git_head = "BETA_01202012_01-1407-gd5e6ee8-dirty";
compat_driver_wl12xx.patchあて。
$ cd ${YOUR_PATH}
$ patch -p1 < compat_driver_wl12xx.patch

ビルド
あとはビルド手順通りに実行すればいいわけですが、修正して再ビルドをかけるときなどで毎回コマンドを手打ちするのは面倒です。というわけでスクリプトを書きましょう。(単なるコピペですが。)

まずは環境変数のセット。下記をbuildenvというファイル名で保存しましょう。
#common
export YOUR_PATH=`pwd`
export PATH=$PATH:/opt/toolchains/arm-2010q1/bin
export MYDROID=${YOUR_PATH}/mydroid
mkdir -p $MYDROID/logs
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PATH=${YOUR_PATH}/u-boot/tools:$PATH

#for WLAN Driver
export KERNEL_DIR=${YOUR_PATH}/kernel/android-3.0
export KLIB=${KERNEL_DIR}
export KLIB_BUILD=${KERNEL_DIR}

#for SGX Driver
export KERNELDIR=${YOUR_PATH}/kernel/android-3.0
X-loaderのビルドを行うbuild_xloader.shです。
#!/bin/bash

. buildenv

cd ${YOUR_PATH}/x-loader
make distclean 
make ARCH=arm omap44XXpanda_config
make ift 2>&1 |tee $MYDROID/logs/x-loader_make.out

U-bootのビルドを行うbuild_uboot.shです。
#!/bin/bash

. buildenv

cd ${YOUR_PATH}/u-boot
make distclean
make ARCH=arm omap44XXpanda_config
make 2>&1 |tee $MYDROID/logs/u-boot_make.out

KernelとModuleのビルドを行うbuild_kernel.shです。
#!/bin/bash

. buildenv

cd ${YOUR_PATH}/kernel/android-3.0
#make ARCH=arm distclean
make ARCH=arm panda_defconfig
make ARCH=arm uImage 2>&1 |tee $MYDROID/logs/kernel_make.out
make ARCH=arm modules 2>&1 |tee $MYDROID/logs/kernel_modules.out

WLAN Driverのビルドを行うbuild_wlan_driver.shです。
#!/bin/bash

. buildenv

cd $MYDROID/hardware/ti/wlan/mac80211/compat
make ARCH=arm 2>&1 |tee $MYDROID/logs/wlan_driver_make.out

Androidのビルドを行うbuild_android.shです。
#!/bin/bash

. buildenv

cd $MYDROID
source build/envsetup.sh
lunch full_panda-eng
#make clean ;#(required for rebuild only)
make HOST_CC=gcc-4.4 HOST_CXX=g++-4.4 HOST_CPP=cpp-4.4 -j4 2>&1 |tee $MYDROID/logs/android_make.out

OMAP4に搭載されているGraphicアクセラレータ用のSGX Driverをビルドするbuild_sgx_driver.shです。
#!/bin/bash

. buildenv

cd $MYDROID
source build/envsetup.sh
lunch full_panda-eng

cd $MYDROID/device/ti/proprietary-open/omap4/sgx/src/eurasia_km/eurasiacon/build/linux2/omap4430_android
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- TARGET_PRODUCT="blaze_tablet" BUILD=release TARGET_SGX=540 PLATFORM_VERSION=4.0
最後は、書き込むイメージを一か所にまとめるbuild_img.shです。
#!/bin/bash

. buildenv

#Preparing Android binaries
export BOARD_TYPE="panda"

cd $MYDROID/out/target/product/$BOARD_TYPE
mkdir -p system/lib/modules
cp $MYDROID/hardware/ti/wlan/mac80211/compat/compat/compat.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat/net/wireless/cfg80211.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat/net/mac80211/mac80211.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/wl12xx.ko system/lib/modules/
cp $MYDROID/hardware/ti/wlan/mac80211/compat/drivers/net/wireless/wl12xx/wl12xx_sdio.ko system/lib/modules/

cp $MYDROID/out/target/product/$BOARD_TYPE/target/kbuild/omaplfb_sgx540_120.ko system/lib/modules/
cp $MYDROID/out/target/product/$BOARD_TYPE/target/kbuild/pvrsrvkm_sgx540_120.ko system/lib/modules/

#Preparing images
cd $YOUR_PATH
mkdir -p omap4_sd_files_$BOARD_TYPE
cd omap4_sd_files_$BOARD_TYPE
cp -f $MYDROID/out/host/linux-x86/bin/fastboot .
cp -f $MYDROID/out/host/linux-x86/bin/mkbootimg .
cp -f $MYDROID/out/host/linux-x86/bin/simg2img .
cp -f $MYDROID/out/host/linux-x86/bin/make_ext4fs .

cp -f ${YOUR_PATH}/x-loader/MLO .
cp -f ${YOUR_PATH}/u-boot/u-boot.bin .
cp -f ${YOUR_PATH}/kernel/android-3.0/arch/arm/boot/zImage .

#Creating img files 
cd ${MYDROID}
find out/target/product/$BOARD_TYPE -name *.img -exec rm -f {} \;  
source build/envsetup.sh
lunch full_panda-eng
make HOST_CC=gcc-4.4 HOST_CXX=g++-4.4 HOST_CPP=cpp-4.4
cp -f ${MYDROID}/out/target/product/$BOARD_TYPE/*.img $YOUR_PATH/omap4_sd_files_$BOARD_TYPE

cd $YOUR_PATH/omap4_sd_files_$BOARD_TYPE
$MYDROID/device/ti/support-tools/boot/omap4/umulti2.sh

cd $YOUR_PATH/omap4_sd_files_$BOARD_TYPE
dd if=/dev/zero of=./cache.img bs=1048510 count=128
mkfs.ext4 -F cache.img -L cache

各シェルスクリプトには実行権限を与えておきましょう。下記のように実行します。
$ cd ${YOUR_PATH}
$ ./build_xloader.sh
$ ./build_uboot.sh
$ ./build_kernel.sh
$ ./build_wlan_driver.sh
$ ./build_android.sh
$ ./build_sgx_driver.sh
$ ./build_img.sh

SDカードへのAndroidブートイメージ書き込み
まだAndroidを起動できるSDカードを持っていない場合には、以下の2段階手順で書き換える必要があります。すでにAndroidが起動できるSDカードを持っている場合は、1段階目は飛ばしてOKです。

1段階目は、ブートローダが起動できるSDカードの作成手順です。

こちらのサイトで説明されているomap3-mkcard.shを開いて、テキストファイルに貼り付けます。
(※そのままダウンロードしてしまうと、HTMLファイルとなっているので、実行できません。)

UbuntuにSDカードを差して、omap3-mkcard.shに実行権限を与えておいた上で、
$ sudo ./omap3-mkcard.sh /dev/sdb
※/dev/sdbの部分はUbuntu上で認識されているSDカードのデバイスファイルを指定

SDカードのフォーマットが成功したら、いったんSDカードを抜き差しし、Ubuntuのファイルブラウザで認識させます。
下記で、ブートローダをbootパーティションに書き込みます。
$ cd ${YOUR_PATH}/omap4_sd_files_panda
$ cp MLO /media/boot/
$ cp u-boot.bin /media/boot/

書き込みが完了したら、SDカードをアンマウントしてUbuntuからは外し、pandaboard ESに差して電源を入れます。(シリアルコンソールで確認するのが良いですが、自動でfastbootモードに移行するはずです。)
pandaboard ESとUbuntuとをminiUSBケーブルで接続して下記コマンドをたたきます。
$ cd ${YOUR_PATH}/omap4_sd_files_panda
$ sudo ./fastboot oem format
$ sudo ./fastboot flash xloader MLO
$ sudo ./fastboot flash bootloader u-boot.bin
$ sudo ./fastboot reboot
これにより、SDカードがAndroid用にフォーマットされ、ブートローダのみが書き込まれた状態となります。

2段階目がこちらからです。
上記の最後のコマンドでリブートし、再びfastbootモードに入っているはずです。入ってなさそうであれば、いったん電源を切って、再度電源を入れなおしましょう。
※なお、2回目以降の書き換えでは、何もしないとKerneが起動してしまうので、シリアルコンソールでu-boot起動時に何かキーを押して止めるという手順が必要です。

pandaboard ESとUbuntuとをminiUSBケーブルで接続した状態で。
$ sudo ./fastboot flash boot boot.img
$ sudo ./fastboot flash system system.img
$ sudo ./fastboot flash cache cache.img
$ sudo ./fastboot flash userdata userdata.img
$ sudo ./fastboot reboot

これでAndroidが起動してくるはずです。以降、SDカードを差して電源を入れればAndroidが起動します。



壁紙がエラーなく表示できることがLinaroとの違いでしょうか。
しかし、これは、WiFiもBluetoothも起動しない...
まあ、また次回見ていきましょう。

2012年7月20日金曜日

UbuntuでJavaコントロールパネルの日本語文字化けを何とかする

さて先日、Ubuntu 10.10にJDKをインストールできたわけなんですが、
おもむろに、
$ /usr/lib/jvm/java-6-oracle/bin/ControlPanel
でJavaコントロールパネルなんかを開いてみると日本語が文字化けしとるやないか!


まあ実際、Javaコントロールパネルはどうでもいいのですが、最近私が使っている"Process Dashboard"も盛大に日本語が文字化けしておりまして、萎えていたところだったのです。(仕事がはかどらない!)

どうやら"Process Dashboard"の文字化けも、Javaコントロールパネルの文字化けも、日本語フォント設定に不備があることが原因のようです。

というわけで解決策。
$ cd /usr/lib/jvm/java-6-oracle/jre/lib/fonts/
$ sudo mkdir fallback
$ cd fallback
$ sudo ln -s /usr/share/fonts/truetype/takao/Takao* .
何をやっているかというと、javaの代替フォント用フォルダを作成し、そこに日本語TrueTypeフォントへのシンボリックリンクを作成するということ。(実際よくわかってませんが。)
日本語フォントの部分は自分の好きなものに変えてもらってかまわない。

これでもう一度、Javaコントロールパネルを表示させてみると...
見事に文字化けが直っている!
"Process Dashboard"の方も。。。
見事に文字化けが直っている!
これで仕事がはかどりますね!

めでたし、めでたし

(今回は以前にUbuntu 10.10へ手動でインストールしたJDKでの話ですが、他のJavaでも大体一緒だと思います。)


2012年7月16日月曜日

Ubuntu 12.04で10.04と同じ操作性(ユーザインタフェース)に変更する

Ubuntu 12.04ではインストールしたての状態だとUnityという今までとは異なる操作性を持ったデスクトップ画面が表示されます。
今後はこれに慣れていこうとは思ったのですが、やはり耐え難いwww
というわけでUbuntu 10.04と同じ操作性を持つGNOME Shellに変えてしまいましょう。

※インストール直後の場合は、まずはパッケージのUpdateをしておきましょう。パッケージが古いとUbuntuソフトウェアセンターに検索窓が付いてなかったりしますので。。。

Ubuntuソフトウェアセンターにて、
"gnome-shell"
を検索します。"GNOME Shell"というパッケージが検索結果に出てきますのでそれをインストールします。

インストール後は再起動を求められますので再起動を行いましょう。

さて、再起動してそのままログインしても元のUnityの画面のままです。
ユーザインタフェースを変えるには、ログイン画面で"GNOME"に変更してやる必要があります。

選択箇所は下図にて。

デフォルトでは"Ubuntu"の選択となっていますので、それを"GNOME"に変更します。
後は通常通りログインしましょう。
最低限の手順ですので、自由にカスタマイズして使いやすくしましょう。

以上。