Hatena::ブログ(Diary)

不沈船金義丸

2010-12-12

auの携帯間のアドレス帳コピー

今回、INFOBAR2からIS01にアドレス帳をコピーした。

microSDを使うのがよいと思う。

今回やった手順。

  1. INFOBAR2の「アドレス帳」→「メニュー」→「microSDバックアップ」、でアドレス帳データをmicroSDに保存。
  2. IS01にmicroSDを差す。
  3. IS01の「設定」→「システム」→「microSD&内蔵メモリ」→「SDバックアップ」→「読み込み」→ロックNo.を入力→「電話帳」を選択
  4. 1.で保存したファイルが出てくるはず。ファイルを選択して、右下の「追加登録開始」

ググって探しきれなかったので、メモ。

2010-10-24

12ステップで作る組み込みOS自作入門 3ステップ目

kzload.elfのSymbol tableをアドレス順に並べてみる

頭の中がごちゃごちゃしてきたので整理のために。

(わざわざVBScriptを覚えて、サクラエディタのマクロを書いて)*1アドレスとおぼしきValueが小さい順にソートしてみた。

Symbol table '.symtab' contains 76 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 SECTION LOCAL  DEFAULT    1 
     6: 00000000     0 FILE    LOCAL  DEFAULT  ABS vector.c
     8: 00000000     0 FILE    LOCAL  DEFAULT  ABS main.c
    13: 00000000     0 FILE    LOCAL  DEFAULT  ABS lib.c
    45: 00000000     0 FILE    LOCAL  DEFAULT  ABS serial.c
    50: 00000000   256 OBJECT  GLOBAL DEFAULT    1 _vectors
     2: 00000100     0 SECTION LOCAL  DEFAULT    2 
    55: 00000100     0 NOTYPE  GLOBAL DEFAULT    2 _text_start
    60: 00000100     0 NOTYPE  GLOBAL DEFAULT    2 _start
     7: 0000010a     0 NOTYPE  LOCAL  DEFAULT    2 .L1^B1
    10: 0000010c   148 NOTYPE  LOCAL  DEFAULT    2 _printval
    74: 000001a0   130 NOTYPE  GLOBAL DEFAULT    2 _main
    12: 00000220     0 NOTYPE  LOCAL  DEFAULT    2 .L4
    59: 00000222    26 NOTYPE  GLOBAL DEFAULT    2 _memset
    15: 0000022a     0 NOTYPE  LOCAL  DEFAULT    2 .L8
    14: 00000236     0 NOTYPE  LOCAL  DEFAULT    2 .L7
    58: 0000023c    40 NOTYPE  GLOBAL DEFAULT    2 _memcpy
    17: 0000024a     0 NOTYPE  LOCAL  DEFAULT    2 .L16
    16: 00000258     0 NOTYPE  LOCAL  DEFAULT    2 .L15
    66: 00000264    58 NOTYPE  GLOBAL DEFAULT    2 _memcmp
    22: 00000270     0 NOTYPE  LOCAL  DEFAULT    2 .L27
    20: 00000284     0 NOTYPE  LOCAL  DEFAULT    2 .L22
    19: 0000028a     0 NOTYPE  LOCAL  DEFAULT    2 .L21
    18: 00000292     0 NOTYPE  LOCAL  DEFAULT    2 .L26
    21: 00000294     0 NOTYPE  LOCAL  DEFAULT    2 .L17
    71: 0000029e    26 NOTYPE  GLOBAL DEFAULT    2 _strlen
    24: 000002a6     0 NOTYPE  LOCAL  DEFAULT    2 .L35
    23: 000002b0     0 NOTYPE  LOCAL  DEFAULT    2 .L34
    64: 000002b8    30 NOTYPE  GLOBAL DEFAULT    2 _strcpy
    26: 000002c0     0 NOTYPE  LOCAL  DEFAULT    2 .L37
    25: 000002ce     0 NOTYPE  LOCAL  DEFAULT    2 .L38
    48: 000002d6    50 NOTYPE  GLOBAL DEFAULT    2 _strcmp
    32: 000002dc     0 NOTYPE  LOCAL  DEFAULT    2 .L55
    27: 000002e4     0 NOTYPE  LOCAL  DEFAULT    2 .L53
    30: 000002f4     0 NOTYPE  LOCAL  DEFAULT    2 .L46
    29: 000002fa     0 NOTYPE  LOCAL  DEFAULT    2 .L45
    28: 00000300     0 NOTYPE  LOCAL  DEFAULT    2 .L50
    31: 00000302     0 NOTYPE  LOCAL  DEFAULT    2 .L41
    67: 00000308    66 NOTYPE  GLOBAL DEFAULT    2 _strncmp
    39: 00000318     0 NOTYPE  LOCAL  DEFAULT    2 .L63
    35: 00000326     0 NOTYPE  LOCAL  DEFAULT    2 .L61
    34: 0000032c     0 NOTYPE  LOCAL  DEFAULT    2 .L60
    33: 00000332     0 NOTYPE  LOCAL  DEFAULT    2 .L57
    37: 0000033a     0 NOTYPE  LOCAL  DEFAULT    2 .L59
    38: 0000033e     0 NOTYPE  LOCAL  DEFAULT    2 .L58
    36: 00000340     0 NOTYPE  LOCAL  DEFAULT    2 .L56
    51: 0000034a    46 NOTYPE  GLOBAL DEFAULT    2 _putc
    40: 00000364     0 NOTYPE  LOCAL  DEFAULT    2 .L65
    53: 00000378    36 NOTYPE  GLOBAL DEFAULT    2 _puts
    42: 00000384     0 NOTYPE  LOCAL  DEFAULT    2 .L72
    41: 00000390     0 NOTYPE  LOCAL  DEFAULT    2 .L71
    63: 0000039c   100 NOTYPE  GLOBAL DEFAULT    2 _putxval
    43: 000003be     0 NOTYPE  LOCAL  DEFAULT    2 .L86
    44: 000003e2     0 NOTYPE  LOCAL  DEFAULT    2 .L75
    62: 00000400    54 NOTYPE  GLOBAL DEFAULT    2 _serial_init
    56: 00000436    36 NOTYPE  GLOBAL DEFAULT    2 _serial_is_send_enable
    72: 0000045a    86 NOTYPE  GLOBAL DEFAULT    2 _serial_send_byte
    47: 00000482     0 NOTYPE  LOCAL  DEFAULT    2 .L4
     3: 000004b0     0 SECTION LOCAL  DEFAULT    3 
    52: 000004b0     0 NOTYPE  GLOBAL DEFAULT    2 _etext
    68: 000004b0     0 NOTYPE  GLOBAL DEFAULT    3 _rodata_start
    75: 00000521     0 NOTYPE  GLOBAL DEFAULT    3 _erodata
     4: 00fffc20     0 SECTION LOCAL  DEFAULT    4 
    61: 00fffc20     0 NOTYPE  GLOBAL DEFAULT    4 _data_start
    65: 00fffc20     2 OBJECT  GLOBAL DEFAULT    4 _global_data
     9: 00fffc22     2 OBJECT  LOCAL  DEFAULT    4 _static_data
    46: 00fffc24    12 OBJECT  LOCAL  DEFAULT    4 _regs
     5: 00fffc30     0 SECTION LOCAL  DEFAULT    5 
    11: 00fffc30     2 OBJECT  LOCAL  DEFAULT    5 _static_bss
    54: 00fffc30     0 NOTYPE  GLOBAL DEFAULT    5 _bss_start
    69: 00fffc30     0 NOTYPE  GLOBAL DEFAULT    4 _edata
    49: 00fffc32     2 OBJECT  GLOBAL DEFAULT    5 _global_bss
    57: 00fffc34     0 NOTYPE  GLOBAL DEFAULT    5 _ebss
    70: 00fffc34     0 NOTYPE  GLOBAL DEFAULT  ABS _end
    73: 00ffff00     0 NOTYPE  GLOBAL DEFAULT    5 _stack

No version information found in this file.

で、これをマニュアルの図3.1も見ながら、表にまとめてみる。

モード5のはず。そして、EMCビットがよくわからなかったから、EMCビット=1の前提でみている。

アドレス値マニュアル記載の位置セクション
0x00000100内蔵ROM(開始).text
0x000004b0内蔵ROM(途中).rodata
0x00ffffc20内蔵RAM(途中).data
0x00ffffc30内蔵RAM(途中).bss

確かに本の通りになってるっぽい。

メモ

  • Tera Termが起動しっぱなしだと、フラッシュROMの書き換えに失敗する
    • com1 open error!
  • BSSは block started by symbol の略
  • リンカとローダの関係がよくわからない
    • セクション情報はリンカが使う
      • 多分、リンカスクリプトによって書かれる
    • セグメント情報はローダが使う
      • 誰が書いてる?
    • elfファイルフォーマットが詳細に分かれば、分かる気がする
    • ロードとは、セグメント情報がメモリに展開されること、らしい。
      • そして、ロード作業はbss領域には必要ないらしい。
      • たぶん、main()実行前に、実行形式ファイルに記載されてる値を、data領域に入れるということ
  • _stackのあるところはマニュアルには外部アドレス空間ってなってる
    • スタックポインタの開始位置?

*1:readelfにそういうオプションがあったのかもしれないけど、久しぶりにコードを書きたくなったので。

2010-10-23

12ステップで作る組み込みOS自作入門 2ステップ目

講義パート入りましたー。

ストップビットの必要性

自分とおんなじ疑問を持ってる人がいた。

http://okwave.jp/qa/q2566382.html


うーん。

データ長が8ビット程度であれば間違えずにデータ取れるけど、

データ長さが長くなってくると怪しいということか?

例えば、0010_0011ってデータが左から順に送られる場合、

はじめの連続0は2連続であって、次の連続0は3連続というのは確実にわかる。

でも、1000連続とかになってくると間違えずに0をカウントする自信がない。

ってことでいいのかな。




メモ

  • 「普通、メモリは数メガバイト単位にに分割されているから、CS信号が要るんだよ」と読める
    • 分割されているのはどうしてなんだろう?
  • H8/3069Fのおまけ付属品の水晶発振器は、25Mhzのもの。
  • motファイルをテキストエディタで開くと、大概が0~Fの「文字列」になっている。
    • ぱっと見バイナリっぽい。へんなの。
  • BRRの設定計算式
    • マニュアルの13.2.8 ビットレートレジスタ(BRR)
    • 64で割ったり、8で割ったりする。その数字の根拠がよくわからない。
  • いろんなcファイルあるけど、それらが機械語になるまでの過程がよくわからない
    • externの意味もなんとなくしかわからない

2010-10-21

12ステップで作る組み込みOS自作入門 1.1ステップ目

h8write動かず

make: *** [write] Error 127

が出て、フラッシュに書き込めてない模様。


gcc3.4.6がインストールできてないことを疑う。

この方、gcc-4.5.1をすんなりインストールできているよう。

http://blog.livedoor.jp/furikku9310/archives/52054343.html


ということは、h8関係のものが怪しい…か?

とりあえず再インストール

gcc-3.4.6の解凍からやり直す。

このメッセージが気になる.

*** This configuration is not supported in the following subdirectories:
     target-libffi target-boehm-gc target-zlib target-libjava target-libf2c
    (Any other directories should still work fine.)

別フォルダでビルドするとか、解凍したてのまっさらな状態からやるとかやったけど、

結局これから逃れられず。

s-traent.ads:61:01: (style) blank lines not allowed at end of file
a-exexda.adb:346:01: (style) multiple blank lines
a-exextr.adb:216:01: (style) multiple blank lines
make[1]: *** [ada/a-except.o] Error 1
make[1]: Leaving directory `/usr/local/gnu/gcc-3.4.6/BUILD/gcc'
make: *** [all-gcc] Error 2

そもそも

昨日の段階で、./configure以下のオプションの綴りが2、3箇所間違ってたからそのせいかも。

12ステップで作る組み込みOS自作入門 1.2ステップ目

Hello World!出ました!

ポカミスが原因のはず。

フラッシュの書き込み失敗の原因

直接の原因は、h8writeの置いてあるディレクトリ。

正:C:\cygwin2\src\tools\h8write\

誤:C:\cygwin2\src\tools\

ということです。

Makefileの記述と合ってないので、エラーとなってた。

それと、Windowsでは、

「シリアルのデバイスファイル」がcomX(Xは1,2,3のどれか)になることを

見落としてた。

本で言うとP42〜。

具体的には、

User@User-PC /src/01/bootload

$ # h8write -3069 -f20 kzload.mot com1

User@User-PC /src/01/bootload

$ make write

としなければならなかったっということ。

COMポートについては、

デバイスマネージャに出てるものを入力すればよいということなのかな?

gccのインストール

gcc-3.4.6の再インストールは、結局、

/usr/local/gnu/gcc-3.4.6/BUILDで

../configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c

としたらうまくいった。

本に書いてある、--disable-werrorは必要なし。


昨日の段階では、

--enable-languadges=c

というタイプミスをしていた可能性あり。

してなかったかもしれないけど。


フラッシュに書き込めなかったエラーは、

ディレクトリ構成の間違いか、com1の指定忘れが原因だったので、

gcc-3.4.6がインストールできてなかったかは分からない。


gcc-4.5.1は、同じやり方ではうまくいかない。

今、--disable-werrorを付加してmake中。

タイプミスとか…

俺爆発しろ、って感じ。

ていうか、make時に教えてくれないんですね。その綴り違うよって。

このブログの編集フォームのほうが親切。


仕事で似たようなことやらかさないといいけど…

2010-10-20

12ステップで作る組み込みOS自作入門 1ステップ目

はじめに

組込みの分野に就職し、知識不足を痛感する日々…。

そんなとき、「12ステップで作る組み込みOS自作入門」に出会った。


自作OS…なんと厨二な響き。

俺「OSッスかwww自作しましたけどwww」

上司に言ってみてぇ…


気がついたら、本とマイコンボードを購入しておりました。


分からないことばかりだけど、左遷回避のためにがんばるよ!


Cygwinのインストール

開発環境の選択肢として、いくつか選択肢があったんだけど、

自分はCygwinを選んだよ。


開発環境の選択肢として、いくつか選択肢があったんだけど、

自分はCygwinを選んだよ。

今あるWindows環境を壊したくなかったからだよ。ヘタレだね。


UNIXライクな環境なんて、

学部のときにFreeBSDでのサーバ構築に失敗して以来だよ…。

基本的に何もわかりません。


インストールには、下記のサイトにお世話になったよ。

Releaseフォルダのダウンロードに3時間以上かかった…

何これ常識?

失敗しない Cygwin の インストール [ Windows 7 編 ]

http://windowss7.web.fc2.com/special/cygwin/

このページを参考にさせて頂きました。

Cygwinのバージョンは1.7.7。

binutilsのインストール

binutilsは、本に載ってるのは2.19.1だけど、

自分は2.20を選択。

本どおりで問題なし。


H8/3069F付属CDのCygwinだと、

binutils-2.20はインストールが出来なかった気がする。

だから3時間もかけて、上記のCygwinインストール法をとった気がする。

そういうのきちんと記録しないと。。。


gccのインストール

4.5.1はインストールできず

gccも新しいほうがいいとおもって4.5.1をインストールしようと思うも、うまくいかず。

同じ階層(つまりカレントディレクトリがgcc-4-5.1)だと

ビルドできないという報告があったので、

/gcc-4.5.1/build/を作成したりした。


結果をまとめる。

カレント:

/gcc-4.5.1/build/

コマンド:

../configure --target=h8300-elf --disable-nls --disable-threads --enable-languadge=c

結果:

configure: error: building out of tree but . . contains host-i686-pc-cygwin. Use a pristine source tree when building in a separate tree.

備考:

本に書いてあったように--disable-werrorを付加しても、特に出力に変化はないように見える。


カレント:

/gcc-4.5.1/

コマンド:

./configure --target=h8300-elf --disable-nls --disable-threads --enable-languadge=c

結果:

*** This configuration is not supported in the following  subdirectories: 
target-libmudflap target-libgomp target-libffi target-zlib target-libjava  target-libada gnattools target-libstdc++-v3 target-libgfortran target-libobjc target-boehm-gc 
(Any other directories should still work fine.)

備考:

そのままmakeすると

configure: error: in `/usr/local/gnu/gcc-4.5.1/h8300-elf/libgcc':

configure: error: changes in the environment can compromise the build

configure: error: run `make distclean' and/or `rm ./config.cache' and start over

make[1]: *** [configure-target-libgcc] Error 1

make[1]: Leaving directory `/usr/local/gnu/gcc-4.5.1'

make: *** [all] Error 2


もう面倒くさくなって、gccは3.4.6でいいや、ってなった。

Cygwin操作

全てが初めてなので学ぶことが多い。


Tabキーによる入力補完。


ユーザー環境変数でHOMEを作成、

パスをいれるとCygwin起動時のディレクトリを指定できる。


もうほんとね、「そこからかよ!」って感じ。いろいろ。