Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

組み込みLinuxでのGolangのススメ

1,101 views

Published on

Using golang on the embedded linux system

Published in: Technology
  • Be the first to comment

組み込みLinuxでのGolangのススメ

  1. 1. 1 組み込み Linux での  Golang のススメ Tetsuyuki Kobayashi 2018.3.2 CELF
  2. 2. 2  The latest version of this slide will be available from here  http://www.slideshare.net/tetsu.koba/presentati ons
  3. 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. 4. 前提  組み込み Linux を使う。なぜな ら ..  ネットワーク  USB  CPU は arm926 以上  Cortex A7 くらいだと評価ボード が入手しやすい
  5. 5. 想定  NanoPi NEO  Cortex-A7, RAM 512MB  USB や i2c でセンサーを接続  その計測データをネットワークで サーバに送信  GUI 無し
  6. 6. そろそろ C 言語を卒業したい ..  C++ は肌に合わない  Java?  Python?  Rust?   Golang !!
  7. 7. 本日話すること  Golang はどんな言語か  Golang の組み込み Linux への 導入のしやすさ  組み込みソフト技術者として気 になるところ  実際に使ってみての感想
  8. 8. Golang はどんな言語か
  9. 9. Golang  Go 言語  検索しにくいので “ golang”  https://golang.org/
  10. 10. Golang の特徴  型あり  ガベージコレクタあり  コンパイル言語  インタープリタではない  コンパイル速度は速い
  11. 11. Golang の特徴 (2)  関数値を複数返せる  goroutine: 並列処理を記述しやすい。メ ニーコアに対応  オブジェクト指向ではない  継承でなくて委譲  例外無い  愚直に if 文でエラー処理  Generices 無い gofmt UTF-8
  12. 12. システム記述言語として  「スクリプト言語並みの書きやす さと C 言語並みの実行性能」  OS のシステムコール使える  mmap, ioctl, select  C 言語で書けることはだいたいで きる ( はず )  C の関数を呼べる (CGO)
  13. 13. Golang はどこに使われているか  サーバ側ソフト  CLI ( コマンドラインツール )  クロスコンパイルして渡すのが簡単  Golang で書かれた有名なアプリ  docker  Python からの移行が多いらしい
  14. 14. Golang の組み込み Linux への 導入のしやすさ
  15. 15. 組み込み Linux への導入のしや すさ  ビルドホストへのインストール が容易  クロスコンパイルが容易  ランタイムの移植が不要
  16. 16. ビルドホストへのインストール が容易  4 ステップで最新版 golang がインストー ルできる  sudo apt-get install golang-go  golang のソースコードを入手して展開  cd src; ./make.bash  PATH を設定  Golangの最新版をソースからビルドする
  17. 17. クロスコンパイルが容易  環境変数 GOARCH, GOARM を セットして go build するだけ  GOARCH=arm GOARM=7 go build  static link された実行ファイルができ るので、それを実機に持って行くだけ  カーネルにしか依存しない。 glibc, uclibc に無関係に動作する  Linuxでネットワークインタフェースの活動状況を調べる by Golang
  18. 18. ランタイムの移植が不要 Linux kernel libraries Application language runtime Usual languages Linux kernel libraries Application language runtime Golang static linked binary Independent Comes from Golang toolchain
  19. 19. 後方互換性の高さ  Version up の不安が無い  コンパイラを入れ替えるだけ  Golang 1.2 から 1.10 まで使っ ていてトラブル無し  互換性のない変更が入るときは Golang 2.x になるらしい
  20. 20. フルセットの嬉しさ  たくさんある 3rd party ライブ ラリがそのまま利用可能  組み込み向け XX はサブセット であることが多かった  世の中のライブラリがそのま ま使えない
  21. 21. 組み込みソフト技術者として 気になるところ
  22. 22. 組み込みソフト技術者として気 になるところ  スレッドモデル  ガベージコレクタ  物理メモリへのアクセス  割り込みの受け方  実行ファイルのサイズ削減
  23. 23. スレッドモデル  goroutine  M:N model  ブロックするシステムコールを 呼んでも大丈夫  Thread Local Storage 無し  goroutine の優先度設定無し
  24. 24. ガベージコレクタ  コンカレント GC  停止時間微小 msec オーダー  version up ごとに改善されてい る  私の経験では GC による停止時 間が問題になったことは無い
  25. 25. 物理メモリへのアクセス  /dev/mem を mmap  UIO で切り出した領域を mmap  Golangから物理メモリを読み 書きする
  26. 26. 割り込みの受け方  UIO で read に変換  GPIO ならば /sys/class/gpio と poll(2) で可能  GolangでGPIOの割り込み通 知を受け取る
  27. 27. 実行ファイルのサイズ削減  デバッグシンボルを削除  Busybox 方式  複数の実行ファイルを結合し てそれぞれシンボリックリン クを張る  Golangの実行ファイルを複数まとめてトータルのファイルサイズを減らす工夫(busybox方式)
  28. 28. 実際に使ってみての感想
  29. 29. 実際に使ってみての感想  コンパイルが速いのは気持ちいい  ガベージコレクタのある言語はメ モリ管理が楽  PC Linux 上で実験したコードがク ロスコンパイルして実行ファイル を 1 個コピーするだけで実機で動 かせる
  30. 30. 実際に使ってみての感想 (2)  標準ライブラリが充実している。 うまく利用してコードを短くでき る  検索すると有用な情報がすぐ見つ かる  Golang ライブラリや、既存ライブ ラリの Go binding が豊富
  31. 31. 実際につかってみての感想 (3)  クラッシュしたときのバックト レースがわかりやすい  デバッガは不要だった  標準のプロファイルツールが簡 単に使えた
  32. 32. 全般的な感想  コード量が少なくてすむので見通しが よい  早い段階から安定して動かすことがで きた  原因不明のトラブルに悩まされるこ とはなかった  これからも Golang を積極的に使って いきたい
  33. 33. 次は  Golang + Buildroot  Buildroot で最小限の rootfs を作成  コードは shell script と Golang のみで  既存ソフトウェアとの連携方法  CGO  unix ドメインソケット  シグナル
  34. 34. Reference  書籍「プログラミング言語 Go 」  https://golang.org/  golang-jp.org/ は情報が古い  組み込みLinuxでGolangのススメ - Qiita
  35. 35. 35 Q & A @tetsu_koba Thank you for listening!

×