AVR初体験

必要になって、AVRを触ってみたのだけれど、とりあえずツールインストールして、LED操作まで到達。
さて、デバッグでもしてみるかといった感じで、ターゲットにブレーク張ってとめたいのだけれど、どうしても出来ない。
なんでかなと調べていて、シミュレータだと出来るので、「これってもしかしてターゲット上ではデバッグできない?」と思ったら、AVRで使われるISP(インシステムプログラミング)ではデバッグI/Fは持ってない模様、OH!
別途対応のJTAG(8bitなのにJTAGまであるのか!!)だと出来るんだけど、それに対応したデバッガ(AVR Dragon)が千石で8000円くらい。一応メーカー対応みたいだけど、中国製で壊れやすいみたい。
純正のISPライタ(AVRISPMK2)が3000円なので、自分用に買ってしまっても良いのだけれど、なんかそれも・・・。
自作ライタも多数出ているみたいだが、こちらはAVR Studio5での対応がまだ進んでいない・・・。

というわけで、連休はとりあえずはシミュレータでツールの使い方を覚えつつ、ちまちまコードを書いて、ビルドしつつ、ほとんど忘れたCを思い出すのがよさそう。
新しい物を覚えるのは楽しいんだけど、今回はあまり時間が無いので、必要なところは早めにキャッチアップしておかないと、後が辛い。

早速触っていて、前に使ったHCS08との比較。
・実機デバッグをするにはAVRはツールを選ぶ。HCS08は数千円の評価ボードでもBDMがついているので便利。しっかり仕様とコーディングしないで、実機で様子を見ながら作るものぐさ太郎には不便。まぁその辺はPICも安いライタなら一緒だけど。
・ツールがVisual StudioベースのAVRに対し、eclipseベースのCodeWarrior
これはべつに安定して、かつ軽く動けば何でも良いのだけれど、どこも最近の流行は独自ソフトではなくて、一般的な評価開発環境へのアドオンにするみたい。
カスタマイズを一発で初期設定に戻してくれるのは、慣れないうちは「あれ、あのウィンドウどこ行った?」って時に役立つ。
起動は多少かかるが、それほど不満はない。
・AVRは書籍はそれなりにあるし、ウェブも情報があるが、どれもAVR Studio4のときの情報が多い。調べると、5が出たのは11年5月だから、まだ新しい部類に入るのだろう。
5からCコンパイラも統合されたが、それまではアドオン。アセンブラ開発も多いみたい。(実際買った本も「アセンブラが大事」って論調。)アセンブラも必要になるとなると、メモリもアドレスも考えずに作るってわけにはいかないかも。
・分厚いマニュアルを全部日本語化して公開している人がいて、すごいなと思う。ただ、英語で読むようにしているから、あくまで参考用。

・ここ1-2年のAVRの露出はもっぱらArduinoだが、atmelのHPでは全くといって良いほど触れていない。ユーザーが勝手にやってるという感なんだろう。

・エレキジャックの記事はまとまっていて、流れをつかむのに便利。シミュレータでのデバッグとかはここでわかったし。

SamsungのA9 Dual

ORIGENのマニュアルに書いてあったのでメモ
==========
※ CPU related term explanation
Orion: Title of Exynos4 series development project, Orion ispopular name of Exynos4
Dualcoreseries
S5PC210: Cortex-A9 Dualcore POP type SoC, Exynos4 + LPDDR2
S5PV310: Cortex-A9 Dualcore Single type SoC, only Exynos4, RAM is outside equip.
Exynos4 series: Orion is project title, S5PC210& S5PV310 impose a new brand name for preventconfuse name.

オライオン、オリオン?:プロジェクトネーム
エクシノス? :実際のチップのブランドネーム
==========

ADBのインストールに失敗、パッケージが無いとかなんとか

ADBの初回導入時になぜかADTが入らない。
x64が理由とか、galileoにしないとだめとかいろいろある見たいだが、結局のところ、eclipse側のプラグインを最新にする必要があり。

Check for updateを実施してクリア。

    • -

Cannot complete the install because one or more required items could not be found.
Software being installed: Android Development Tools 12.0.0.v201106281929-138431 (com.android.ide.eclipse.adt.feature.group 12.0.0.v201106281929-138431)
Missing requirement: Android Development Tools 12.0.0.v201106281929-138431 (com.android.ide.eclipse.adt.feature.group 12.0.0.v201106281929-138431) requires 'org.eclipse.gef 0.0.0' but it could not be found

    • -

u-bootのsetenvの設定順

u-bootのsetenvで未定義の環境変数を使って別な環境変数を定義すると、環境変数が定義されない。
理由は
setenv name value
に対して、valueを指定しない場合はその環境変数を削除するから。

以下が例。
==========
BBG U-Boot > setenv test1 a ->test1 に a を定義する
BBG U-Boot > echo ${test1} ->test1 を読む
a ->設定した a が読めるのでOK
BBG U-Boot > setenv test1 'a' ->ちなみに ' で囲んでも同じ。
BBG U-Boot > echo ${test1}
a
BBG U-Boot > setenv test2 ${test1} ->test2 を test1 で定義する
BBG U-Boot > echo ${test2} ->test2 を読む
a ->設定した a が読めるのでOK

=>ここまでは普通の話。

BBG U-Boot > setenv test4 ${test3} ->未定義の test3 で新しく test4 を定義する
BBG U-Boot > setenv test3 b ->未定義だった test3 を b で定義する
BBG U-Boot > echo ${test4} ->設定したはずの test4 を読む
->存在しない!!
BBG U-Boot > echo ${test3} ->ここで test3 を読んでみる
b                 ->今は定義されている
BBG U-Boot > setenv test4 ${test3} ->もう一度定義してみる
BBG U-Boot > echo ${test4} ->test4 を読んでみる
b ->きちんと読める
==========

あらかじめ定義されているものを上書きするなら良いが、
その途中で未定義のものを参照し、最後に未定義のものを定義すると、
setenvとしては環境変数を「削除」する。

マニュアルに設定が書いてあるからと、それをコピペしても設定が有効にならないので、
echo ${bootcmd}
で順番に追いかける中でわかった。

結局のところ
echo ${bootcmd}で追いかけて、どんな設定でブートするのかを見ないとだめらしい。

git apply --check

    • -

§ $ cd /opt/imx-android-r10.2.1/code/r10.2.1/platform/frameworks/base.git
§ $ ls *.patch > series
§ $ cd ~/myandroid/frameworks/base
§ $ git quiltimport --patches /opt/imx-android-r10.2.1/code/r10.2.1/platform/frameworks/base.git
If error happened when applying some patch, please use git apply to patch it seperately.

    • -

git quiltimport --patches
でseriesの中身を全部適用してくれればよいのだけれど、止まるとダメ?
(そうでない場合もある?)

パッチを適用したいディレクトリに移動して
git apply --check 
するとできた。
結局合計80個全部手動で適用。

http://progit.org/book/ja/ch5-3.html
git applyはpatch -p1 <
と同じ意味らしい。

ディレクトリ構造を表示するtreeコマンド

apt-get install tree
で導入。
tree -d ./xxx
でOK。

log

      • -

r10.2.1
├── device
│?? └── fsl.git
├── kernel_imx.git
└── platform
├── bootable
│?? ├── bootloader
│?? │?? └── uboot-imx.git
│?? └── recovery.git

      • -

u-bootの起動コマンド

自動起動するコマンドを見る

bootcmdが該当する

    • -

BBG U-Boot > echo ${bootcmd}
run bootcmd_SD; bootm ${loadaddr} ${rd_loadaddr}
BBG U-Boot >
BBG U-Boot > echo ${bootcmd_SD}
mmc read 1 ${loadaddr} 0x800 0x2000; mmc read 1 ${rd_loadaddr} 0x3000 0x300;
BBG U-Boot >

    • -

ここでbootmがOSイメージの起動コマンド。
以下のように設定する

    • -

bootm - OSとアプリケーションの起動
文法: bootm [addr [initrdaddr]]

    • -


この環境の時の設定例は以下。(ブートしなかったけど。)

          • -

BBG U-Boot > printenv
bootdelay=3
baudrate=115200
netdev=eth0
ethprime=FEC0
bootdelay=3
uboot=u-boot.bin
kernel=uImage
loadaddr=0x70800000
nfsroot=/opt/eldk/arm
bootargs_base=setenv bootargs console=ttymxc0,115200
vga=setenv bootargs ${bootargs} init=/init androidboot.console=ttymxc0 di1_prima
ry video=mxcdi1fb:GBR24,VGA-XGA vga
lcd=setenv bootargs ${bootargs} init=/init androidboot.console=ttymxc0 di0_prima
ry calibration
hdmi=setenv bootargs ${bootargs} init=/init androidboot.console=ttymxc0 video=mx
cdi0fb:RGB24,1080P60 tve gpu_memory=256M
claa_lcd=setenv bootargs ${bootargs} init=/init androidboot.console=ttymxc0 vide
o=mxcdi0fb:RGB565,CLAA-WVGA calibration
bootcmd_SD1=run bootargs_base bootargs_android
bootcmd_SD2=mmc read 0 ${loadaddr} 0x800 0x2000;mmc read 0 ${rd_loadaddr} 0x3000
0x300;bootm ${loadaddr} ${rd_loadaddr}
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serveri
p}:${nfsroot},v3,tcp
bootcmd_net=run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${kernel}; boot
m
bootcmd_android_recovery=run bootargs_base bootargs_android_recovery;mmc read 0
${loadaddr} 0x800 0x2000;bootm
bootargs_android_recovery=setenv bootargs ${bootargs} init=/init root=/dev/mmcbl
k0p4 rootfs=ext4
ethact=FEC0
bootargs_android=setenv bootargs ${bootargs} init=/init androidboot.console=ttym
xc0 di0_primary calibration
ethaddr=00:04:9f:00:ea:d3
fec_addr=00:04:9f:00:ea:d3
loadaddr=0x90800000
rd_loadaddr=0x90D00000
bootcmd=run bootcmd_SD; bootm ${loadaddr} ${rd_loadaddr}
bootcmd_SD=mmc read 1 ${loadaddr} 0x800 0x2000; mmc read 1 ${rd_loadaddr} 0x3000
0x300;
bootargs=console=ttymxc0 init=/init androidboot.console=ttymxc0 di1_primary gpu_
nommu, gpu_memory=32M calibration ip=dhcp
stdin=serial
stdout=serial
stderr=serial

Environment size: 1726/131068 bytes
BBG U-Boot >
BBG U-Boot >

                                                • -

参考:u-bootに日本語マニュアル
ftp://ftp.mlb.co.jp/pub/u-boot/mini-itx/u-boot-0229.pdf