組み込みLinuxでのGolangのススメ(Go con版)

Description
1. 1 組み込み Linux での  Golang のススメ (Go con 版 ) Tetsuyuki Kobayashi 2018.4.15 Go Conference 2018 Spring 2. 2  The latest version of this slide will…

Please download to get full document.

View again

of 35
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information
Category:

Engineering

Publish on:

Views: 67 | Pages: 35

Extension: PDF | Download: 0

Share
Transcript
  • 1. 1 組み込み Linux での  Golang のススメ (Go con 版 ) Tetsuyuki Kobayashi 2018.4.15 Go Conference 2018 Spring
  • 2. 2  The latest version of this slide will be available from here  http://www.slideshare.net/tetsu.koba/presentati ons
  • 3. 3 Who am I?  20+ years involved in embedded systems  10 years in real time OS, such as iTRON  10 years in embedded Java Virtual Machine  Now GCC, Linux, QEMU, Android, …  Blogs  https://qiita.com/tetsu_koba  http://d.hatena.ne.jp/embedded/  http://kobablog.wordpress.com/(English)  Twitter  @tetsu_koba
  • 4. はじめに  以前 CELF テクニカルジャン ボリーで同じタイトルで発表を 行いました。  今日は Go conference 向けに 内容を編集し直しています。
  • 5. 本日の聞いてくださる方の想定  Golang はすでによく知ってい る。  組み込み Linux は初めて。
  • 6. 本日話すること  組み込み Linux に関して  Golang はどんな言語か  Golang の組み込み Linux への導入 のしやすさ  組み込みソフト技術者として気に なるところ  実際に使ってみての感想
  • 7. 組み込み Linux に関して
  • 8. 想定する動作環境  NanoPi NEO ( またはラズパイ )  Cortex-A7, RAM 512MB  USB や i2c でセンサーを接続  その計測データをネットワークで サーバに送信  GUI 無し
  • 9. 組み込み Linux を使う理由  プロトコルスタック標準装備  ネットワーク  USB  デバイスドライバが入手しやすい  WiFi ドングルなど 
  • 10. Golang はどんな言語か
  • 11. Golang  Go 言語  検索しにくいので “ golang”  https://golang.org/
  • 12. Golang の特徴  型あり  ガベージコレクタあり  コンパイル言語  インタープリタではない  コンパイル速度は速い
  • 13. Golang の特徴 (2)  関数値を複数返せる  goroutine: 並列処理を記述しやすい。メ ニーコアに対応  オブジェクト指向ではない  継承でなくて委譲  例外無い  愚直に if 文でエラー処理  Generices 無い gofmt UTF-8
  • 14. システム記述言語として  「スクリプト言語並みの書きやす さと C 言語並みの実行性能」  OS のシステムコール使える  mmap, ioctl, select  C 言語で書けることはだいたいで きる ( はず )  C の関数を呼べる (CGO)
  • 15. Golang の組み込み Linux への 導入のしやすさ
  • 16. 組み込み Linux への導入のしや すさ  ビルドホストへのインストール が容易  クロスコンパイルが容易  ランタイムの移植が不要
  • 17. ビルドホストへのインストール が容易  4 ステップで最新版 golang がインストー ルできる  sudo apt-get install golang-go  golang のソースコードを入手して展開  cd src; ./make.bash  PATH を設定  Golangの最新版をソースからビルドする
  • 18. クロスコンパイルが容易  環境変数 GOARCH, GOARM を セットして go build するだけ  GOARCH=arm GOARM=7 go build  static link された実行ファイルができ るので、それを実機に持って行くだけ  カーネルにしか依存しない。 glibc, uclibc に無関係に動作する  Linuxでネットワークインタフェースの活動状況を調べる by Golang
  • 19. ランタイムの移植が不要 Linux kernel libraries Application language runtime Usual languages Linux kernel libraries Application language runtime Golang static linked binary Independent Comes from Golang toolchain
  • 20. 後方互換性の高さ  Version up の不安が無い  コンパイラを入れ替えるだけ  Golang 1.2 から 1.10 まで使っ ていてトラブル無し  互換性のない変更が入るときは Golang 2.x になるらしい
  • 21. フルセットの嬉しさ  たくさんある 3rd party ライブ ラリがそのまま利用可能  組み込み向け XX はサブセット であることが多かった  世の中のライブラリがそのま ま使えない
  • 22. 組み込みソフト技術者として 気になるところ
  • 23. 組み込みソフト技術者として気 になるところ  スレッドモデル  ガベージコレクタ  物理メモリへのアクセス  割り込みの受け方  実行ファイルのサイズ削減
  • 24. スレッドモデル  goroutine  M:N model  ブロックするシステムコールを 呼んでも大丈夫  Thread Local Storage 無し  goroutine の優先度設定無し
  • 25. ガベージコレクタ  コンカレント GC  停止時間微小 msec オーダー  version up ごとに改善されてい る  私の経験では GC による停止時 間が問題になったことは無い
  • 26. 物理メモリへのアクセス  /dev/mem を mmap  UIO で切り出した領域を mmap  Golangから物理メモリを読み 書きする
  • 27. 割り込みの受け方  UIO で read に変換  GPIO ならば /sys/class/gpio と poll(2) で可能  GolangでGPIOの割り込み通 知を受け取る
  • 28. 実行ファイルのサイズ削減  デバッグシンボルを削除  Busybox 方式  複数の実行ファイルを結合し てそれぞれシンボリックリン クを張る  Golangの実行ファイルを複数まとめてトータルのファイルサイズを減らす工夫(busybox方式)
  • 29. 実際に使ってみての感想
  • 30. 実際に使ってみての感想  コンパイルが速いのは気持ちいい  ガベージコレクタのある言語はメ モリ管理が楽  PC Linux 上で実験したコードがク ロスコンパイルして実行ファイル を 1 個コピーするだけで実機で動 かせる
  • 31. 実際に使ってみての感想 (2)  標準ライブラリが充実している。 うまく利用してコードを短くでき る  検索すると有用な情報がすぐ見つ かる  Golang ライブラリや、既存ライブ ラリの Go binding が豊富
  • 32. 実際につかってみての感想 (3)  クラッシュしたときのバックト レースがわかりやすい  デバッガは不要だった  標準のプロファイルツールが簡 単に使えた
  • 33. 全般的な感想  コード量が少なくてすむので見通しが よい  早い段階から安定して動かすことがで きた  原因不明のトラブルに悩まされるこ とはなかった  これからも Golang を積極的に使って いきたい
  • 34. References  書籍「プログラミング言語 Go 」  https://golang.org/  golang-jp.org/ は情報が古い  組み込みLinuxでGolangのススメ - Qiita
  • 35. 35 Q & A @tetsu_koba Thank you for listening!
  • Similar documents
    We Need Your Support
    Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

    Thanks to everyone for your continued support.

    No, Thanks