組込み開発におけるLinuxシステムについて

組込み開発におけるLinuxシステムについて

組み込みLinuxの開発環境

ここ最近、組み込み機器でも利用用途が広がってきているLinux(リナックス)に対して、本コラムではLinuxのオーバービューから始まり、入門、ハードウェアの選定という所に対してコラムを記載していますが、今回はソフトウェア寄りの話として、開発環境について簡単に説明していこうと思います。

  • Date: 2014年6月17日
  • Author: EIPC

ソフトウェア開発を行う際の開発環境

組み込み機器開発に限らず、プログラム、アプリケーションの開発を行う際には開発環境を利用することがほとんどです。既にご存知の方も多いとは思いますが、プログラマーや開発者が例えばC言語にてプログラムを記述したとしても、この言語は人間が理解しやすい言語でしかなく、コンピューターが理解できる言語ではありません。よって、C言語で記述されたプログラムをコンピューターが解釈することは不可能であり、コンピューターにとっては意味のないものとなってしまいます。逆にコンピューターが理解できる形式でプログラムを作成すれば問題は解決するのですが、コンピューターが理解できる言語は人間には理解が困難な言語であり、開発効率が非常に悪くなってしまいます。そこで、人間のわかり易い言語でプログラムを記述し、それをコンピューターの理解できる言語に変換してコンピューターに理解させる事で、プログラム通りにコンピューターが動作するわけです。これらのプログラムの記述、変換、動作、動作確認を行うためのツール群を開発環境と呼びます。

利用者が多いであろうWindows上でのプログラム開発を例にすると、開発環境はVisual C6.0++、Visual Studio .NETなどがそれにあたります。先に挙げたVisual C6.0++、Visual Studio .NETなどもそうですが、近年では統合開発環境を利用するのが一般的となっており、プログラムの記述、変換(ビルド)、動作、動作確認(デバッグ)が1つの開発環境で出来るようになっています。しかし、実際アプリケーションの内部ではどうなっているかというと、ビルド、デバッグなどそれぞれの段階において内部的にはツールが実行されており、それらが連携する事で統合開発環境が実現されているのです。

プログラム開発のプロセスに必要な開発ツールの紹介

プログラムの開発を行うためには、プログラムの記述、変換、動作・動作確認を行います。統合開発環境を利用しない場合には、これらの各プロセスでどのような開発ツールを利用するのかを解説します。
プログラムの記述は基本的には文章の記載と変わりません。テキストエディター、メモ帳など文字を書けるものであれば何でも良いでしょう。ただし定型単語を強調してくれたり、対応する括弧を強調表示してくれたりとプログラム開発向けのエディターを利用すればよりわかりやすく、ミスの少ないプログラムを記述することが可能となります。
プログラムの変換はコンパイラ、アセンブラ、リンカーというツールを利用します。C言語で記載したプログラムをコンパイラというツールで変換を行うとアセンブラ言語に変換されます。このアセンブラ言語はC言語ほどわかり易くはありませんが、まだ理解しやすい言語になります。次にコンパイラによって出力されたアセンブラ言語のプログラムをアセンブラというツールで変換することで、コンピューター(正確にいえばCPU)が理解可能なマシン語に変換されます。次にマシン語のプログラムをリンカーというツールで変換することで、実行することが可能なオブジェクトと呼ばれる形式にまで変換されます。

プログラムの動作・動作確認には、デバッカーと呼ばれるツールを利用してデバッグを行います。念のために補足しておきますと、デバッグとはプログラムの誤り(バグという方がなじみ深いでしょうか)を見つけ、修正する作業を言います。プログラムは人間が作成するため、どうしてもバグが発生してしまいますので、このデバッグという作業はプログラム開発において重要な作業となります。
統合開発環境では、これらのツールをシームレスに連携させ、開発者が開発しやすいような機能を提供しているため意識していない人が多いかもしれません。しかし、実際には各段階ごとに対応する開発ツールが利用されている事を御理解いただけたでしょう。

組み込みLinuxを利用したプログラム開発の場合には統合開発環境が準備されていないことが殆どであるため、これらの開発ツールを個々に活用しながらプログラムを開発していくことになります。

組み込みLinuxにおけるプログラムの記述

組み込みLinux上で動作するプログラムを記載する上ではC言語、またはC++言語にて記述することがまだまだ多いかと思います。上記でも記載をしましたが、これらのプログラムを記述する場合には最低限、文字が書けるという基礎的な機能があればプログラムを記述できますので、どのようなエディターでも問題はありません。しかし、プログラム開発を効率的に行うための機能が搭載されたエディターも世の中には存在します。

搭載されていると便利な機能としては、固定ワードの強調機能、WindowsとLinuxの両方を利用した場合に問題になる文字コードの違いに対応し、Linux開発では特に必要となるカーネル内部の膨大なソースコードの閲覧、検索を行う際に必須となるgrep機能が含まれているものが便利だと思います。ここでは私の個人的な見解で、組み込みlinuxにおいてプログラムを記述するときに良く利用されている、おすすめエディターを何個か紹介します。

サクラエディタ
1つめはサクラエディタです。このエディターはオープンソースで開発されていますが、ヘルプも充実しており、カスタマイズ性に優れたエディターです。当然上で挙げた機能が搭載されつつ、マクロ機能、自動バックアップなどの幅広い機能がを軽快に操作できるというのが大きい点かと思います。しかもweb上から無料でダウンロードできます。残念な点としては、プログラミングに慣れてくるとマクロ機能を利用するようになってきますが、このマクロ機能に数の制限がある点でしょう。

秀丸エディター
2つめにおすすめするのは秀丸エディターです。こちらは有料のエディターではありますが、サクラエディタにも負けない豊富な機能と強力なマクロ機能が搭載されており、私の周りのプログラマーの中には根強いファンが多いエディターです。統合開発環境があるにも関わらず、プログラムの記述は秀丸エディターを使う人も多いです。

Notepad++
3つめはNotepad++です。秀丸エディターのようなマクロ機能に加え、外部プログラムの呼び出し、実行など数多くのプラグインが準備されているのが大きな特徴です。こちらは無料でダウンロードできるため秀丸エディターと比較すると利用しやすいかと思います。

これらエディターは正直どれも素晴らしいエディターで、全ての機能を使い尽くしている人が少ないぐらい数多くの便利機能が搭載されています。一度使ってみて好みのものを選んでいただければよいかと思います。

組み込みLinuxにおけるコンパイラ・アセンブラ・リンカー

組み込みLinuxでのプログラム開発を行う上で利用するコンパイラ、アセンブラ、リンカー。これらのツールは利用するCPUによって決定します。皆様すでにお分かりかと思いますが、これらのツールは人間が理解しやすい言語からコンピュータ(CPU)が理解できる言語に変換するツールのため、当然ながらCPUが変わればツールも変更する必要があるのです。組込みLinux開発の場合には、各CPUメーカーがこれらのツールを提供していますので、それを利用していくことになります。特筆すべきポイントとしては統合開発環境ではありませんので、コマンドラインインタフェース(Command Line Interfaceの先頭の1文字をとってCLIなんて略したりします。CUI、標準入出力に同じ)にて利用する必要があります。
CLIの簡単な例で、ファイルのコピーを例にすると【copy C:\Windows\version.txt D:】などがそれにあたります。入力ファイルであるCドライブのWindowsフォルダー内にあるversion.txtというファイルをDドライブにコピーするというツールを利用する場合の例です。コマンドラインインタフェースに関しての詳細な説明をし始めると長い長い文章となってしまいますのでここでは割愛しますが、このような文字入力により利用するツール、入力ファイル、出力ファイルを指定しながら各種ツールを利用します。Linuxでは代表的なものとして、コンパイラはgcc、アセンブラはasm、リンカーはldが主流なのではと思います。

組み込みLinuxプログラミングにおけるデバッガー

ここまでのツールを利用した段階で、プログラムは実行可能なオブジェクトの形式になっているかと思います。ここでは、その実行可能なオブジェクトを実際に動かして、思った通りのプログラムになっているか、プログラムにミスがないかの確認を行っていきます。別のコラムでもふれていますが、Windows系のwebシステム開発におけるデバッグ作業と、組み込みシステム開発におけるデバッグ作業には大きな違いがあり、難易度も全く違います。Windowsプログラムではプログラムを実行するCPUとデバッグ作業を行うCPUが同一のため、より細かい部分までデバッグが行えます。しかし組み込み開発では、プログラムを実行するCPUは多くの場合、別のCPUになっており、JTAG、ICEなどのリモートデバッグ用の機器を利用してデバッグを行います。

組み込みLinuxでも当然JTAG、ICEを利用したリモートデバッグ(開発環境とは別のマシンを使ってファイルを動作させ、デバッグすること)を実施しますが、私の経験上ではJTAG、ICEを利用したとしてもなかなか思った通りの動作、期待した結果を得ることができませんでした。シリアルポートに文字を出力してデバッグを行う、良く言えば伝統的な、悪く言えば古臭いプリントデバッグを実施する方が多い印象です。アプリケーションのデバッグでは、Linux開発ではメジャーなgdbを利用したデバッグが有効です。こちらはリモートデバッグになるため、gdbサーバとクライアントを利用してのデバッグとなりますが利用方法に違いはありませんので、PC-LinuxOSなどで利用したことがあるのであれば問題なく利用可能かと思います。

デバイスドライバの開発は組み込みならでは

情報システムの開発と違い、組み込みシステム開発においてはデバイスドライバの構築が必要になってくるのも特徴です。組み込み開発の世界では、LinuxをはじめOSの種類があまりに多く、チップとの組み合わせも多数あるためデバイスドライバが存在しないのです。オープンソースのLinuxの場合は、チップの技術情報を開示してもらうなどして、開発者自身がドライバを開発する必要があります。
上記は一例ですが、組み込み開発ではこのように、システム構築や開発する範囲が広いという特徴があることも覚えておいてください。

組み込みlinuxの開発環境まとめ

本コラムでは、組込みLinux上でのソフトウェア開発、プログラム開発を行う際に利用する開発環境、ツールチェインに関して解説を行いました。今現在では統合開発環境を利用することが多い組み込み開発の中で、組み込みlinuxの場合だけ各種ツールを単独で、しかもコマンドラインで利用していくというのは少々戸惑いがあるかもしれません。しかし、慣れてしまえば全く問題なく利用できるようになりますので一度経験してみるのは良いかと思います。各種ツールの詳細に関してはここでは触れませんでしたが、また機会があればコラムとして取り上げていこうと思います。