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

More Related Content

What's hot (20)

PPTX
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
PDF
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
 
PDF
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
 
PDF
DBスキーマもバージョン管理したい!
kwatch
 
PPTX
Dockerからcontainerdへの移行
Akihiro Suda
 
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
PDF
BuildKitの概要と最近の機能
Kohei Tokunaga
 
PPTX
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 
PDF
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
 
PDF
Dockerイメージ管理の内部構造
Etsuji Nakai
 
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
 
PDF
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
 
PDF
Twitterのsnowflakeについて
moai kids
 
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
PDF
Hopper アーキテクチャで、変わること、変わらないこと
NVIDIA Japan
 
PDF
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
 
PDF
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
 
PDF
オンラインゲームの仕組みと工夫
Yuta Imai
 
PDF
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
 
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
 
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
 
DBスキーマもバージョン管理したい!
kwatch
 
Dockerからcontainerdへの移行
Akihiro Suda
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
BuildKitの概要と最近の機能
Kohei Tokunaga
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
 
Dockerイメージ管理の内部構造
Etsuji Nakai
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
 
Twitterのsnowflakeについて
moai kids
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
Hopper アーキテクチャで、変わること、変わらないこと
NVIDIA Japan
 
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
 
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
 
オンラインゲームの仕組みと工夫
Yuta Imai
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 

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

PDF
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
 
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
 
PDF
Golang handson
Ryuto Yasugi
 
PDF
Firefox mobile for android internals
Makoto Kato
 
PDF
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Tetsuyuki Kobayashi
 
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
PPTX
ライトニングノードをたててみよう
takayaimai
 
ODP
Gopenflow demo v1
Hiroaki Kawai
 
PPTX
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
Akihiro Suda
 
PDF
Android App Development with Gradle & Android Studio
Soichiro Kashima
 
PDF
runC概要と使い方
Yuji Oshima
 
PDF
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
 
PDF
LibreOfficeをビルドしてみよう(Windows)
Masataka Kondo
 
PDF
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
PDF
Rocroにおけるgcp活用事例
Kishin Yagami
 
PDF
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
 
PDF
Prometheus meetup tokyo#3 slide
cosmo0920
 
PDF
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
Takashi Okawa
 
PDF
go.mobile で Android 開発
Hiroshi Kurokawa
 
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
 
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
 
Golang handson
Ryuto Yasugi
 
Firefox mobile for android internals
Makoto Kato
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Tetsuyuki Kobayashi
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
ライトニングノードをたててみよう
takayaimai
 
Gopenflow demo v1
Hiroaki Kawai
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
Akihiro Suda
 
Android App Development with Gradle & Android Studio
Soichiro Kashima
 
runC概要と使い方
Yuji Oshima
 
Tricky implementation of Go ARM soft float
Tetsuyuki Kobayashi
 
LibreOfficeをビルドしてみよう(Windows)
Masataka Kondo
 
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
Rocroにおけるgcp活用事例
Kishin Yagami
 
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
 
Prometheus meetup tokyo#3 slide
cosmo0920
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
Takashi Okawa
 
go.mobile で Android 開発
Hiroshi Kurokawa
 
Ad

More from Tetsuyuki Kobayashi (20)

PDF
some topic of ffmpeg
Tetsuyuki Kobayashi
 
PDF
New VIdeo CODEC AV1
Tetsuyuki Kobayashi
 
PDF
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
 
PDF
Try new transport protocol SRT
Tetsuyuki Kobayashi
 
PDF
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Tetsuyuki Kobayashi
 
PDF
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
 
PDF
ARM 64bit has come!
Tetsuyuki Kobayashi
 
PDF
Virtual memory 20070222-en
Tetsuyuki Kobayashi
 
PDF
Simple and efficient way to get the last log using MMAP
Tetsuyuki Kobayashi
 
PDF
Tips of Malloc & Free
Tetsuyuki Kobayashi
 
PDF
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
 
PDF
Patch101
Tetsuyuki Kobayashi
 
PDF
ADB(Android Debug Bridge): How it works?
Tetsuyuki Kobayashi
 
PDF
Tweaking Google TV emulator
Tetsuyuki Kobayashi
 
ODP
Inter-process communication of Android
Tetsuyuki Kobayashi
 
PDF
Android is NOT just 'Java on Linux'
Tetsuyuki Kobayashi
 
PDF
Android ipm 20110409
Tetsuyuki Kobayashi
 
PDF
Init of Android
Tetsuyuki Kobayashi
 
PDF
Android On Ubuntu for developer
Tetsuyuki Kobayashi
 
PDF
Reusing your existing software on Android
Tetsuyuki Kobayashi
 
some topic of ffmpeg
Tetsuyuki Kobayashi
 
New VIdeo CODEC AV1
Tetsuyuki Kobayashi
 
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
 
Try new transport protocol SRT
Tetsuyuki Kobayashi
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Tetsuyuki Kobayashi
 
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
 
ARM 64bit has come!
Tetsuyuki Kobayashi
 
Virtual memory 20070222-en
Tetsuyuki Kobayashi
 
Simple and efficient way to get the last log using MMAP
Tetsuyuki Kobayashi
 
Tips of Malloc & Free
Tetsuyuki Kobayashi
 
Basic of virtual memory of Linux
Tetsuyuki Kobayashi
 
ADB(Android Debug Bridge): How it works?
Tetsuyuki Kobayashi
 
Tweaking Google TV emulator
Tetsuyuki Kobayashi
 
Inter-process communication of Android
Tetsuyuki Kobayashi
 
Android is NOT just 'Java on Linux'
Tetsuyuki Kobayashi
 
Android ipm 20110409
Tetsuyuki Kobayashi
 
Init of Android
Tetsuyuki Kobayashi
 
Android On Ubuntu for developer
Tetsuyuki Kobayashi
 
Reusing your existing software on Android
Tetsuyuki Kobayashi
 
Ad

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