2010/03/20

githubを使ってみる

gitに慣れないので、使っておこう。

githubというところにアカウントを作った。
ローカルだけだと、やはりわからないことがあるのよねぇ。

作ったといっても、ずいぶん前だ。
もしかすると、ここにも書いたかもしれない。
が、すっかり忘れてしまった。

というわけで、ここは「githubのアカウントをずいぶん前に作ったけど忘れてしまった人へ」ということで。


まず、ブラウザでgithubのサイトにアクセス。
そして自分のアカウントでログイン。
ここまではできないと、いかん。


まずはソースを持ってくるところから。

ログインすると、Public Repositoriesという欄にリポジトリが出ているので、選択。
そうすると、画面の真ん中くらいにテキストボックスがある。
そこに「git@github.com:XXXXX」というようなのが書いてある。
それを使えば、落とすことができる。

cygwinとかで、git clone。

$ git clone git@github.com:XXXX

そのまま打てばよい。
ここで注意するのは、実行するディレクトリ。
git cloneすると、ディレクトリをリポジトリ名で作ってくれるようだ。
だから、git initとかはしなくていい。
SVNでいうところのチェックアウトにあたる操作だな。

実行すると、まずsshキーのパスワードを訊かれる。
なので、それは思い出せないといかん。
思い出せないようなら、作り直せばよいのかな。
私は幸い思い出すことができた。


git branchで見ると、masterになっていた。
githubのサイトに「Switch Branches」というのがあり、ブランチを見ることができる
当時の私は、2つのブランチを作っていたようだ(masterとbranch3)。

選んでみよう。

$ git checkout branch3
Branch branch3 set up to track remote branch branch3 from origin.
Switched to a new branch 'branch3'

切り替わったようだ。
確認しよう。

$ git branch
* branch3
master

もしかすると、checkoutはブランチがなければ勝手に作ってしまうのでは?
心配になったので試してみよう。

$ git checkout branch4
error: pathspec 'branch4' did not match any file(s) known to git.

よし、大丈夫だ。
checkoutすると、ソースの中身がいきなり切り替わるので、すこし驚く。
ファイルの変更をしただけのままcheckoutするとエラーになる。

error: You have local changes to 'XXXXXX'; cannot switch branches.

XXXXXXはファイル名ね。
なので、commitするなり破棄するなりせねばならぬ。
そのファイルを削除すると、checkoutできた。
そしてまたcheckoutして戻ると、ファイルが復元されていた。
ふーん。
git stashを使うと、変更を保持してくれるらしい。

今のところファイルが1つしかないので、よくわからん。
追加しておこう。

$ git checkout master
$ vi NOTE
$ git commit -a
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# NOTE
nothing added to commit but untracked files present (use "git add" to track)

これはだめみたいだ。
新規のファイルは、addが必要みたい。

$ git add *

よかった、ワイルドカードは使えるんだ。
Linuxは(bashは?)、*をファイル名に自動的に展開してくれるから問題ないのかな。

$ git commit

ちなみに、cygwinだとviが立ち上がるようだ。

$ git checkout branch3

lsで見ると、NOTEはなくなっている。
新規作成してaddもcommitもしなかったファイルはどうなるのだろう?

$ touch TEST
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.

lsで見ると、TESTは残っている。
まあ、消える理由はないわな。

checkoutの最後に出ているメッセージは「origin/masterよりもあんたのブランチの方が進んでますよ」ということか。
origin/masterはgithubにあるリポジトリを指しているのだろう。

$ git push

sshのパスワードを訊かれるので、書くと転送される。


branch3の中身とmasterの中身に違いがあるな・・・。
マージを使ってみよう。

$ git merge branch3
Merge made by recursive.
README | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

READMEってファイルに差分があったのだが、マージしてくれたようだ。
コンフリクトとかもするのだろうね。

$ git merge master
Updating 7d18de0..e743a44
Fast-forward
NOTE | 2 ++
README | 2 +-
2 files changed, 3 insertions(+), 1 deletions(-)
create mode 100644 NOTE

意図してコンフリクトさせるのは難しいな・・・。
mergeすると、存在しないファイルの追加も行ってくれるようだ。


あとはタグくらいか?
タグも、githubから見られる。
コマンドなら、

$ git tag
B3-FORTH
FIRST
SECOND
THIRD

うん、記憶にない。
さっきコミットしたので、タグ名を付けてみよう。
tagは今の状態にタグ名を付けるのではなく、最後に行ったコミットに対して名前を付けるらしい。

$ git tag MERGE-master

では、試しに古いタグ名のものを引っ張ってきてみよう。

$ git checkout SECOND
Note: moving to 'SECOND' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 079cb12... second

親切に、ブランチを作りたいんなら-bをつけるんだよ、とコメントが出てきた。
まあ、今回は作らないよ。
試しにもう一度やってみよう。

$ git checkout THIRD
Previous HEAD position was 079cb12... second
HEAD is now at 0df2178... third

あ、コメントが違う。
どうも、ブランチを切り替えた後にタグでcheckoutすると出てくるようだ。
あせるではないか。

もちろん、タグ名もpushしないとgithubに反映されない。
pushすれば、反映されるはず。

・・・されない。
なんでだ?

$ git branch
* (no branch)
branch3
master

no branch ?

どうやら、タグでcheckoutするとそうなるらしい。
ふーん。

では、どうやってタグ名をアップするかというと、--tagsオプションらしい。

$ git push --tags

うん。githubにも反映された。
取ってくるときは、pull --tagsらしい。


さて、repo syncで取ってきたときも、no branchになっている。
名前を付けないと不便だ。

$ repo start master --all

やはりmasterという名前がしっくりくるな。
変更するので、もう1つブランチを切っておく方がいいだろう。

2010/03/18

マイ コンピューター

なんか、ハードディスクの調子が悪かったので、スキャンディスクしてみることにした。
チェックディスクと呼ぶのかもしれんが、どっちでもいいや。
MS-DOSのときは、chkdskだったな。

デスクトップに「マイコンピュータ」があるので、ダブルクリックしてドライブを表示させ、そこからコンテキストメニューを出して、チェックする、と。

そして気付いたのだが、マイコンピュータのフォルダ表示でステータスバーを表示させていると、右下には「マイ コンピューター」と表示されているのだ。
タイトルは「マイ コンピュータ」なのに!

もしや!と思ってプリンタのフォルダを開いてみたが、こっちは出ていなかった。

私が学生の時の教科書で、「キー」が「キ」になっているのがあった。
キよ、キ!
ショットキバリア(ダイオード)、とか。
わからんわぁ。

しかし、当時はよく理解せぬまま終わっていた。
今調べてみると、ショットキーバリアで検索できたが、それは「Schottky」だった。
まあ、そのままだとショットキー、でよさそうだが、少なくとも私が思っていた「shot key」ではなかった。
当時は、インターネットもまだ普及していないときだったから、図書館とかで見つけられないとわからないのよねぇ。
と、言い訳をしておこう。

2010/03/15

choosecombo?

SmartQ5用に何度もビルドしている私であるが、そのやり方はAndroidのページに書いてあるとおりにやっているだけ。

しかし、よそ様のページを見ていると、やり方が少し違う。
そしてOESFのAndroidも、同じようにやり方が違う。


違うのは、make前に手順があること。

# source build/envsetup.sh
# choosecombo

この2つ。
ちなみに、私のところでは、それらをやらなくてもビルドできている。
それはたぶん、ルートにbuildspec.mkを置いているからだろう。

ちなみに、buildspec.mkはこんなファイルだ。

TARGET_PRODUCT:=smartq5

たぶん、どっかのをまねしたのだろう。


sourceの方は、まあいいだろう。
環境変数などの設定をしているんだろうさ。

気になるのは、choosecombo。
字面だけ見ると、コンボボックスから選択するような感じがする。
が、実際はコマンドラインのツールで、カーネルのmake configみたいに数字を選んでいく(4つくらいだけど)。
省略して、

# choosecombo 1 1 omap3beagle 3

みたいな書き方もできる。

さて、choosecombo。
whichで見てみても、そんなコマンドはない。
envsetup.shをやらないと、使えない。
ということは、envsetup.shの中にあるはず。

function choosecombo()
{
choosesim $1

echo
echo
choosetype $2

echo
echo
chooseproduct $3

echo
echo
choosevariant $4

echo
set_stuff_for_environment
printconfig
}

こんなのだ。
SIM(デバイスかシミュレータか)と、タイプ(debugかreleaseか)と、プロダクト(TARGET_PRODUCT)と、eng, eng-user, userとかなんとかを選択する。

これって、PDKのファイルにはあったなぁ。

続きを読む "choosecombo?" »

2010/03/14

[BB]DVI-DとDVI-I

BeagleBoardには、HDMIコネクタがある。
先に言っておくが、私はこの辺に詳しくない。
最近はテレビとビデオを接続するのにHDMIを使うのが主流らしい。
D端子ってのがあったはずでは・・・と思ったが、あまり使われていないようだ。

話を戻そう。

BeagleBoardにはHDMIコネクタがあるが、信号としてはDVI-Dらしい。
つまり、ケーブルとしてHDMI→DVI-D変換ケーブルが必要ということだ。
さて、店でそのケーブルを見に行ったのだが・・・高い。
単なるケーブルだと思っていたので、値段がこんなにばらついている上に全体的に高いと思っていなかったのだ。
ヨドバシだから高いのかな?と思ってドスパラに行ってみたのだが、そんなに変わらん。
高いものなんだ・・・。

そしてもう1つ。
ケーブル名が「HDMI-DVIケーブル」なのだが、これらのDVIは全部DVI-Dを指しているのだろうか?
もしかすると、いくつかはDVI-Iになっていたりするのではなかろうか?

私はだまされたくない!


そんなわけで、私のBeagleBoardは未だに画面を表示させることができていない・・・。
USB接続できるモニタでも表示できるみたいなので、そっちにするか?
接続が楽なものもあるし、めんどくさいものもあるらしい。
表示させるまでに時間を食うのは、ちゃっとやだな。

2010/03/13

[Q5]OESF版実行(cupcake)

昨日ビルドしたOESF版のAndroidを、SmartQ5で動かしてみた。

kernelは、Covia版eclairのものを使った。

あっさり動いた。。。


起動のアニメーション画面がOESF版になっているので、ちょっと派手だ。

まあ、OESF版に特有なアプリは何も動かしていないのだがね。
WiFiが使えないし。
Bluetoothは動くかなー、と思ったが、

E/bluetooth_common.cpp( 1877): dbus_func_args_timeout_valist: D-Bus error in GetMode: org.freedesktop.DBus.Error.ServiceUnknown (The name org.bluez was not provided by any .service files)

E/BluetoothDeviceService.cpp( 1877): startDiscoveryNative: D-Bus error: org.freedesktop.DBus.Error.ServiceUnknown (The name org.bluez was not provided by any .service files)

これは、init.rcがeclair版を使っているためかも。

ドライバを動くようにしないと、あまり遊べないのかねぇ。

[Q5]OESF版ビルド(cupcake)

昨日はビルド中に時間切れ(私が)になったので、今日続きを行った。

Eclair版でビルドできているvendor/coviaをそのままコピーし、system/core/rootfsを少しいじってgoldfish関係をコメントアウトしたくらい。
goldfish関係のソースファイルはコピーしないようにできるのかいな?

ルートにbuildspec.mkをおいて、いざビルド!

うん、何もなく終わりました。
あとは動かしてみるだけ、なのだが・・・

1. 眠たい。非常に。
2. kernelはどれを使うといい?

というわけで、もうおしまい。
今週は疲れたわい。

2010/03/11

OESFの組込みAndroid

OESFが、組込み向けAndroidを公開した。

この件を書くとき、少し迷った。
つまらんことだが「OESF」に、さん付けするかどうかだ。

Googleは、Google、だ。
Microsoftは、Microsoft、だ。
Coviaは、Coviaさん、と呼んでいる。
私の中で、この切り分けはどうなっているのだろう?

よくわからないけど、ここはOESFと書くことにした。


今日は時間も遅いし、ダウンロードだけだ。

と思っていたが・・・そのダウンロードすら順調にいかない。
vmware上のubuntuでダウンロードしていたのだが、ディスクに空きがなくなってしまった。
2時間くらいかけてダウンロードしたのに、またやり直し?

と思ったが、git cloneしたものは、git pullで取ってこれるらしい。

・・・
ダウンロード中に空きがなくなったせいか、中途半端になっているみたい。
しかし、よくよく見てみると、ダウンロードまでは終わっているようだ。
その後、展開する途中で空きがなくなったように見える。

こんな方法でよさそうだ。

$ git reset --hard HEAD

どうやら、ダウンロードしたものは.gitディレクトリに置かれるようだ。
それを展開しているようである。
HEADは最新の状態という意味なので「最新版にresetしなさい」というところかな。
--hardと--softがあったと思うけど、よくわからん。

$ git reset --soft HEAD^

これは、直前のコミットを取り消してくれるらしい。

--hardも似たようなものだが、変更内容も含めて元に戻すのかな。
やってみたいところだが、眠たいのでやめておこう。

続きを読む "OESFの組込みAndroid" »

2010/03/10

gitに慣れたい・・・

Covia版のeclair用に提供されるkernelを使えるようになった。
特に何かしているわけではないが、まあよかろう。

さて、次は何をするか。


まず、gitをなんとかせんといかん。

というのも、自分でソースファイルを書き換えたとしても、repo syncすると消えてしまうのだ。
マージしてくれるのではなく、上書きになっている。

repo syncは、新規ならば、git cloneで取得する。
つまり新規取得になるわけだ。

1回でも同期をとったことがあれば、git remote updateとgit rebase origin/branch、に変わる。

他にも細々したことが書いてあるが、眠たさが限界だ。
ここを逃すと眠れなくなりそうなので、またね。

2010/03/08

[Q5]media serverが再起動

昨日、kernelをCovia版eclairに置き換えたので、ついでに周辺のファイルも見直していた。
init.rcなどの設定ファイル。

そうしたら、起動しなくなってしまった・・・。


adbはつながらないものの、USBシリアル変換は使えたので、それでコンソールからlogcatで追っていく。

そうすると、media serverなるものが再起動を繰り返していた。
何も考えず、init.rcのmedia_server関係をコメントアウト。

それで進むようになったものの・・・終盤の方でServiceManagerがずっと待っているのだ。

Waiting for sevice media.audio_policy...

ソースを見ると、返ってくるまで無限ループ。
なんとかしないといかんらしい。


昔の作業記録を見ると、/dev/sndをinitで使えるようにしている。

{ "/dev/snd/", 0660, AID_SYSTEM, AID_AUDIO, 1 },

なんでそうしようと思ったのか、書いてない。
ついでに、init.rcに次のような記述を追加した。

chmod 0777 /dev/snd
chmod 0777 /dev/snd/pcmC0D0c
chmod 0777 /dev/snd/pcmC0D0p
chmod 0777 /dev/snd/controlC0
chmod 0777 /dev/snd/timer
chmod 0777 /dev/snd/dsp
chmod 0777 /dev/snd/mixer
chmod 0777 /dev/snd/audio

chown root audio /dev/snd
chown root audio /dev/snd/controlC
chown root audio /dev/snd/pcmC0D0c
chown root audio /dev/snd/pcmC0D0p
chown root audio /dev/snd/timer
chown root audio /dev/snd/mixer
chown root audio /dev/snd/dsp
chown root audio /dev/snd/audio

どっちが効いたのかわからないけど、よくなった。
ALSAは使えないのだけど、そもそもそれがよくないのか?

E/ALSALib ( 630): external/alsa-lib/src/control/control.c:909:(snd_ctl_open_noupdate) Invalid CTL AndroidOut
W/AudioHardwareALSA( 630): Unable to attach mixer to device AndroidOut: No such file or directory
E/ALSALib ( 630): external/alsa-lib/src/control/control.c:909:(snd_ctl_open_noupdate) Invalid CTL AndroidIn
W/AudioHardwareALSA( 630): Unable to attach mixer to device AndroidIn: No such file or directory

音楽に興味はないけど、やはり「ぽちっ」くらいの音は出てほしいものだ。
まあ、おいおいやろう。

2010/03/07

[Q5]タッチパネルが効かん

Covia版の新しいkernelを使うと、タッチパネルが効かなくなる件を調査しよう。

前回は、frameworks\base\libs\ui\EventHub.cppに関係しているところまでわかったのだった。
/dev/input/event2を見ると、データが取得できたところまで確認したのだ。


まずはlogcat。
/dev/inputの出てくるところを抜き出そう。

I/EventHub( 1855): New keyboard: publicID=65536 device->id=0x10000 devname=' USB Keyboard' propName='hw.keyboards.65536.devname' keylayout='/system/usr/keylayout/qwerty.kl'
I/EventHub( 1855): New device: path=
/dev/input/event4 name= USB Keyboard id=0x10000 (of 0x1) index=1 fd=48 classes=0x1
I/EventHub( 1855): New keyboard: publicID=65537 device->id=0x10001 devname=' USB Keyboard' propName='hw.keyboards.65537.devname' keylayout='/system/usr/keylayout/qwerty.kl'
I/EventHub( 1855): New device: path=
/dev/input/event3 name= USB Keyboard id=0x10001 (of 0x2) index=2 fd=49 classes=0x3
I/EventHub( 1855): New keyboard: publicID=65538 device->id=0x10002 devname='S3C
TouchScreen' propName='hw.keyboards.65538.devname' keylayout='/system/usr/keylayout/qwerty.kl'
I/EventHub( 1855): New device: path=
/dev/input/event2 name=S3C TouchScreen id=0x10002 (of 0x3) index=3 fd=50 classes=0x2f
E/EventHub( 1855): could not get driver version for
/dev/input/mouse0, Not a typewriter
I/EventHub( 1855): New keyboard: publicID=65539 device->id=0x10003 devname='gpio-keys' propName='hw.keyboards.65539.devname' keylayout='/system/usr/keylayout/qwerty.kl'
I/EventHub( 1855): New device: path=
/dev/input/event1 name=gpio-keys id=0x10003 (of 0x4) index=4 fd=52 classes=0x1
I/EventHub( 1855): New keyboard: publicID=65540 device->id=0x10004 devname='gpio-keys' propName='hw.keyboards.65540.devname' keylayout='/system/usr/keylayout/qwerty.kl'
I/EventHub( 1855): New device: path=
/dev/input/event0 name=gpio-keys id=0x10004 (of 0x5) index=5 fd=53 classes=0x1
E/EventHub( 1855): could not get driver version for
/dev/input/mice, Not a typewriter

event2はタッチスクリーンであることはわかっていると思う。
なのに・・・なぜ・・・

おっと、続きのログも大切そうだ。

I/KeyInputQueue( 1855): Device added: id=0x10004, name=gpio-keys, classes=1
I/KeyInputQueue( 1855): Device added: id=0x10003, name=gpio-keys, classes=1
I/KeyInputQueue( 1855): Device added: id=0x10002, name=S3C TouchScreen, classes=2f
I/KeyInputQueue( 1855): X: min=0 max=800 flat=0 fuzz=0
I/KeyInputQueue( 1855): Y: min=0 max=480 flat=0 fuzz=0
I/KeyInputQueue( 1855): Pressure: min=0 max=1 flat=0 fuzz=0
I/KeyInputQueue( 1855): Size: unknown values
I/KeyInputQueue( 1855): No virtual keys found
I/KeyInputQueue( 1855): Device added: id=0x10001, name= USB Keyboard, classes=3
I/KeyInputQueue( 1855): Device added: id=0x0, name= USB Keyboard, classes=1

あれ、ちゃんとaddしているから、追加されてるんじゃないの?
エラーが出ていると、わかりやすいのになぁ・・・。
ちなみに、こちらはCovia版2010/03/01版のAndroidを動かしたときのlogcat。

I/EventHub( 1909): New keyboard: publicID=65536 device->id=0x10000 devname='S3C TouchScreen' propName='hw.keyboards.65536.devname' keylayout='/system/usr/keylayout/qwerty.kl'
I/EventHub( 1909): New device: path=/dev/input/event2 name=S3C TouchScreen id=0x10000 (of 0x1) index=1 fd=70 classes=0x2f
E/EventHub( 1909): could not get driver version for /dev/input/mouse0, Not a typewriter
I/EventHub( 1909): New keyboard: publicID=0 device->id=0x10001 devname='gpio-keys' propName='hw.keyboards.0.devname' keylayout='/system/usr/keylayout/gpio-keys.kl'
I/EventHub( 1909): New device: path=/dev/input/event1 name=gpio-keys id=0x10001 (of 0x2) index=2 fd=72 classes=0x1
I/EventHub( 1909): New keyboard: publicID=65538 device->id=0x10002 devname='gpio-keys' propName='hw.keyboards.65538.devname' keylayout='/system/usr/keylayout/gpio-keys.kl'
I/EventHub( 1909): New device: path=/dev/input/event0 name=gpio-keys id=0x10002 (of 0x3) index=3 fd=73 classes=0x1
E/EventHub( 1909): could not get driver version for /dev/input/mice, Not a typewriter
I/KeyInputQueue( 1909): Device added: id=0x10002, name=gpio-keys, classes=1
I/KeyInputQueue( 1909): Device added: id=0x0, name=gpio-keys, classes=1
I/KeyInputQueue( 1909): Device added: id=0x10000, name=S3C TouchScreen, classes=2f
I/KeyInputQueue( 1909): X: min=0 max=800 flat=0 fuzz=0
I/KeyInputQueue( 1909): Y: min=0 max=480 flat=0 fuzz=0
I/KeyInputQueue( 1909): Pressure: min=0 max=1 flat=0 fuzz=0
I/KeyInputQueue( 1909): Size: unknown values
I/KeyInputQueue( 1909): No virtual keys found

違いがわからん。
GPIOキーのレイアウトファイルが、私のはgpio-keys.kl(1.5版にあったもの)を使っているところをCovia版はqwerty.klを使っている、というくらいだ。
そこは関係ないだろう。
デバイス番号なんかは違うけど、これは順番だけだよな・・・。
うーむ、ログでわからないのは痛いな。


「Device added」と出しているのは、frameworks\base\services\java\com\android\server\KeyInputQueue.java。

XとかYとかは、タッチスクリーンの場合にしか出てこない。
つまり、彼(あるいは彼女)はevent2がタッチスクリーンであることはわかっているのだ。

ちなみに、CLASS_TOUCHSCREEN_MTとCLASS_TOUCHSCREENの場合のみ。
MTはマルチタッチか?


frameworks\base\services\java\com\android\server\KeyInputQueue.javaで無効になっているログを有効にして、InputDeviceReaderスレッドで受け取っているデータを見てみた。

I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=0 keycode=0 value=-110
I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=1 keycode=1 value=714
I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=3 keycode=3 value=5101
I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=4 keycode=4 value=7927

devは、Device add時の数値。今は0x10002がタッチパネル。
typeは、frameworks\base\core\java\android\view\RawInputEvent.javaのEV_***の数値。
0x03はEV_ABSで、Absolute axes scan codesらしい。
つまり、絶対座標値ということか。
scancodeは、EV_ABSの場合、0:X、1:Y。3と4はRXとRYってなってるが、何かわからん。

とにかく、Xがマイナスになっているのだから、正しく動くはずがない。
校正ができていないということだ!

というわけで、Covia版で校正した設定ファイルを持ってきて、/proc/cailbrateにcatで流し込むと正しくなった。

# cat /system/etc/calibrate > /proc/calibrate

I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=0 keycode=0 value=199
I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=1 keycode=1 value=201
I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=3 keycode=3 value=5590
I/KeyInputQueue( 1857): Input event: dev=0x10002 type=0x3 scancode=4 keycode=4 value=8555

これはわからんわなぁ。
インストール直後は、キャリブレーションアプリを自動的に起動するようにした方がいいんではなかろうか。