背景
筆者は組み込み系の開発に3年間携わってきましたが、Qiitaに組み込み系開発の記事が少ないと感じました。
Web系の開発であれば言語+フレームワーク等学ばなければならないツールや環境が明確に記載されています。
しかし、組み込み系は開発案件によってOS、統合開発環境、通信プロトコルは様々です。(主に使用するハードのCPUに依存することが多い)
そこで私が3年間で関わった案件の開発環境をここにまとめることで、これから組み込み系エンジニアを目指す方の勉強する目的や目安になればいいな思います。
組み込み系の開発って?
組み込みシステムについてWikipediaでは下記のように定義されています。
組み込みシステム(くみこみシステム、英: Embedded system)とは、特定の機能を実現するために家電製品や機械等に組み込まれるコンピュータシステムのこと。
これだけだといまいちイメージが付きにくいと思いますので、私の関わってきた主な開発現場を紹介することで、組み込み系開発って何を開発するの?という疑問にお答えできればと思います。
・L2スイッチ開発
・メディアゲートウェイ開発
・列車用無線機開発
・クレジット決済端末開発
他にもありますが、イメージしやすい物だと上記になります。
開発言語
開発を補助したり、テストを行うツール以外は全てC言語とC++で開発を行いました。
- C言語
- C++
- Lua(Linux内でプロセスを立ち上げるときに各種設定を行うスクリプトとして)
- Python(テストツール)
- C#(GUIで動くテストツール)
OS
ネットワークスイッチ関連ではLinux、組み込み機器開発ではiTRONが多かったイメージです。
- Linux
- MontaVista
- Wind River
- NetBSD
- CentOS - iTRON
- Windows(作業用)
統合開発環境
使用するマシンのCPUに合わせてチョイスしている感じです。
ネットワーク機器開発では開発用のサーバを用意して、その中でViでコードを書いてコンパイルすることが多いです。
- HEW
- IAR
プロトコル
ネットワーク機器開発では知識として必要とされるプロトコルは多いです。
- TCP/IP
- UDP
- LAG
- VLAN
- EoE
- リングプロトコル
- TIPC
- CORBA
まとめ
組み込み系の開発はネットワーク、OS(メモリ管理、プロセス制御)、プログラミング言語、簡単なハードウェアの知識等、新しくはなく古い知識ですが幅広い知識を要求されます。
もしこれから組み込み系エンジニアになりたいという方の手助けができれば幸いです。
追記
https://kosuke-rb.hateblo.jp/entry/2019/10/07/154126
こちらにテスト環境についての情報と、各環境における詳細説明を記載した物を作りましたので、ご興味がある方はどうぞ。