きょうのかんぱぱ

デジモノが大好きなかんぱぱの日記です。

第18回 IT基礎技術勉強会に参加してきました

  • 投稿日:
  • by
  • Category:
この勉強会はKOZOSという学習向け自作組み込みOSを開発されている@kozossakaiさんが開催しているものです。
前回はFreeBSD(x86)を使って「Hello World」を追ってみましたが、今回はARMというマイコンが題材です。
ARMはmbedMARYでなじみがありますが、ARMのアセンブラを直接書いたことはありませんのでぜひ体験したいと考えました。
Interface誌とかトラ技増刊などでARMの基板も付録でついてきますし、秋月電子等でも1000円ぐらいでARMの評価ボードが買える時代です。ARMは知っておくべきでしょう。
準備としては前回同様にノートPC上のFreeBSD-8.3を使いましたが、今回はクロスコンパイル環境ですので、ARM用のgccやgdbなどを事前にビルドしておきました。
勉強会は前回同様な流れで進みましたが、前回とは違って説明資料は無く、ついていくのが精一杯だったのでなるべくメモを取ることに重点をおきました。
今回おもしろかったのはRISCプロセッサならではの1命令が4バイトの固定長のため、レジスタに定数を設定するだけでも工夫が必要なこと、startup.Sの役割、ゼロから標準ライブラリをどのように作っていくか、ARMは奇数アドレスにコードがあると16ビットコードと認識していることなど、新鮮な内容でした。
今回もかなりスピードが速かったので、メモを見ながらもう一度復習して、大筋は理解できたかなと思います。
次回はどんなテーマでしょうか。楽しみです。

第17回 IT基礎技術勉強会に参加してみました

  • 投稿日:
  • by
  • Category:

第17回 IT基礎技術勉強会「Assembler, Kernel, Binary 勉強会」に参加してみました。

この勉強会はKOZOSという学習向け自作組み込みOSを開発されている@kozossakaiさんが開催しているものです。
なぜこの勉強会に参加しようかと思ったかは、FreeBSDを使っていることと、いわゆる「Hello World」を追ってみるというこれまでやったことがない題材だったからです。
アセンブラはZ80とかである程度経験はありますが、そのあたりの知識があればカーネル内部まで追うことができるのかも興味がありました。
準備としてFreeBSD-8.3をノートPCにインストールする必要がありましたが、VMwareを使って準備しておきました。WindowsのTeraTermからVMwareのFreeBSDにログインすることができますので、少し古いThinkPad X61sでも問題ありませんでした。
会場には無線LANのAPやFreeBSDサーバ環境も準備されていましたが、私はネットワークには接続せずにすべてローカルで進めました。
勉強会ではアセンブラに慣れることからはじまりましたが、基本的なCのプログラムを静的コンパイルして、できた実行ファイルをobjdump -d で逆アセンブルした結果を追ってみるという方法でした。確かにこの方法であれば引数の受け渡しや戻り値や関数呼び出しがどのように扱われているのかがよくわかりました。
その知識を前提として、いよいよhello.cをコンパイルしてそれを追っていきました。この中でいろいろなテクニックを交えてどんどん深く追いました。gdbのステップ実行を使ってint 80hのソフトウェア割り込みからカーネルの内部まで追うことができました。また、実際にシステムコールを行っているところをreadelf -aで出力したシンボル情報からバイナリのどの場所であるかを特定し、hexeditでNOPに書き換えることでその処理が行われなくなることも確認できました。
最後にFreeBSDとLinuxでのシステムコールの呼び方の違いにも触れることができ、こういうところがパフォーマンスとかに影響しているのかなとも少しわかったように思います。
一番印象に残ったのは「アセンブラは細かいところまでは見ないでざっと見ればよい」ということです。確かにそのやりかたで思っていたより簡単に追うことができました。
あとは講師のかたの進行スピードが相当速かったのである程度の前提知識がないと厳しかったかもしれません。でもこの内容を2時間で収めるためにはやむをえないでしょう。しかし非常に充実した内容だったことには違いありません。
次回はARMを素材にして同様のことを行ってみるそうなのでまた申し込んでおきました。