ブログトップ 記事一覧 ログイン 無料ブログ開設

キャズムを超えろ! このページをアンテナに追加 RSSフィード Twitter

2008-11-30

「組み込みソフトウェア」とは何か 〜PC系ソフトウェアとの違い〜

Web業界の方に「組み込み系ソフトウェア」「家電系ソフトウェア」という話しをすると途端に表情に?マークが浮かび、会話がかみ合わなくなることがある。先日id:amachangと飲みながらそんな話しをしていたので、組み込みソフトの世界について、Web業界・PC業界の方にもわかりやすく説明してみたい。折しも就職活動が激化する時期でもあるので、組み込みソフトウェア業界ってものがいったい何を指すのかよくわからん、という学生の諸君の参考にでもなればと思う。

そんなものにもOS

自宅にあるルーターDVDレコーダー、テレビ、カーナビ。普段なんの気なしに使っているけど、実は中をあけてみると、WindowsだのLinuxだのといったOSが入っていることがほとんど。でも起動するときにWindowsのロゴマークとか出ないのは、単に出ないようにしているだけ。ものすごい極端に言えば、メディアレイヤーしか使えないように改造したWindowsがあって、起動と同時にメディアレイヤーが表示されればハードディスクレコーダーっぽい、よね? こんな感じで身の回りのハイテク家電類は片っ端からOSを積んで、「映像を見るアプリケーション」やら「音楽を再生するアプリケーション」が動いている。一言で言えば、こういう「パソコンじゃない機器」向けのソフトウェアを開発するのが「組み込みソフトウェア開発」である。

ここで1つだけ区別しておきたいが、OSを介さないようなSimpleな電気信号制御プログラムも「組み込みソフト」であるが、業界全体としてはそういったソフトウェアは減ってきている。というわけで、今日ここで紹介する話からは除かせていただきたい。あと、OSをわかりやすくするためにWindowsとしたけど、組み込み用途のために極限までカーネル容量を削ったLinuxだったり、itron,μitronだったりする。

iPodみたいなものを作ろう

では、実際にいまから「iPodのような携帯型音楽再生機」を作ると仮定して、組み込みソフトウェア開発の流れを見ていこう。

x86とARM/SH

一般的に目にする普通のパソコンは全て「x86アーキテクチャ」と呼ばれるCPUで動いており、AMDIntelVIAなど複数の会社のCPUがあるけれど、どれも同じ「x86系でうごくWindows」が起動する。でも、パソコン用のx86CPUは消費電力が大きい*1。1個あたりのお値段も高い。パソコンみたいに10万円もするものではなくて、1万円だか2万円だかで売るiPodみたいなものに入れなきゃいけないうえに、小さなバッテリーで長時間動かさないといけないからx86だとちょっと難しいわけだ。

そこで出てくるのが、安い値段で省電力なCPU。組み込み用途向けCPUという呼ばれ方をすることも多い。モノとしてはARMとかSHとかいろいろあるけど、ここでは組み込みで代表的なCPUといえばARM系CPU、としよう。じゃぁこのARMとやらでいつものWindowsLinuxを動かせばいいじゃない、というとになるが、ことはそうカンタンにはいかない。

アーキテクチャ」が違うCPUの上では、同じOSバイナリイメージ)は動かないから、当該CPU用のOSを作るところからはじめないといけない。といってもLinuxとかだとソースコードが公開されているから、OSをゼロから開発することなく(結構手間はかかるけど)ARM用だのSH用だののOSを作ることができる。この作業をOSポーティングという。だいたいの場合、ここまでは既に他の会社がやってくれたものをダウンロードして手にいれたり、購入したりすることができたりする。

問題はここからだ。

ハードウェア的な設計・接続

パソコン用のマザーボードはどこでも売っていて、ぱちり!とCPUを刺せば誰だって動かせる。でもARMを使ってあなたがこれから作ろうとしているiPodのようなデバイスに使える小型のマザーボードなんてどこにも売っていない。

こればっかりは作るしかない。組み込みLinuxとは少々無縁だが、これをがんばって作る....のが家電業界。実際にはソフトウェアではなく「ハード屋さん」と呼ばれる人たちがここで登場する。必要な機能を充足するにはどんな部品が必要で、それらをどうやって小さな嬌態に押し込めるマザーボードにするかを考える人たちだ。そのバックにはマザーボードの試作をする工場があったりする。

まぁハードの話しは今回の本題ではないので、ここでは取り急ぎアリモノを使うことにしよう。世の中には便利なものがいっぱいある。下記にあるBeagle Boardなんてのはその典型だ。携帯電話用最新鋭組み込みCPU(ARM系)であるOMAP3530を搭載した超小型マザーボードだ。もとがケータイ用ってことで携帯電話サイズのバッテリーでも数時間動かしたりすることができる。回路図から何から全てオープンソースになっているので、習得には最適だろう。何といっても価格が激安。こういう開発キットは業務用のものが多くて10万円とか平気でするんだけれども、Beagle Boardはとにかくやすい。

http://search.digikey.com/scripts/DkSearch/dksus.dll?pname?site=jp;lang=ja;name=296-23428-ND

あとはその組み込み機器に何を接続したいか、だ。パソコンだったら液晶ディスプレイマウスキーボード、音源、LAN無線LANぐらいだろうが、iPodみたいな機器に必要なものは?

音源と、ボタンと、タッチディスプレイ? 無線LANも欲しい? 家電の開発では、これらの機器をどうつなぐかをハード屋さんが考えて回路をつくり、マザーボードに接続端子を組み込む。Beagle BoardではUSBSDぐらいしかクチがないので、USBを分岐しまくってがんばってつなごう。USB接続型無線LANUSB接続型音源、USB接続型液晶 etc 世の中にゃ便利なものがいっぱいある。

※普通USBに液晶はつながないが、一応あるにはある

 

ドライバーってダウンロードすればいいものじゃないの?

物理接続までだけなら誰でもできる。OSから何かデバイスをコントロールしようと思うと、ドライバーがいる。そう、周辺機器を買ってきたらCDを入れてインストールする、あれだ。仮にバッキャローというメーカーが作ったUSB音源があるとする。これをあなたのパソコン(OS)が知っているはずもない。だからその音源をあなたのWindowsから使えるようにするために「ドライバー」を入れて「こうやって電気信号を送ればこの音源は"ド"の音を出してくれますよ」という情報をOSに伝えるわけだ*2

バッキャロー社はx86環境で動くWindowsLinux用にドライバーを作って配布している。だからあなたはバッキャロー社のサイトやCDROMからドライバーをコピーすればカンタンに使える。でも、ARM-CPUで作る組み込み機器は? ARM−CPU用にコンパイルされたLinuxの上ではどうなる? 残念ながらそのままで使えることは稀。

じゃどーするかというと、そのバッキャロー社が使っている音源部品のメーカーから「どういう電気信号を送ればどういう動作をしてくれるのか」という仕様書を取り寄せ、ARM用Linuxに向けたサウンドカード・ドライバーを自分で書くしかない。


結構、だいぶ、相当、大変。

でもこれができれば、神にもなった気分になれる。電気的な仕様さえわかれば世の中にあるどんなものだってあなたが作る機器で動かすことができるからだ(ちょっと言いすぎw)。感圧センサー? 傾斜センサー? 液晶ディスプレイ? マウス? ゲームパッド? タッチディスプレイ? モーター? ヒーター?

組み込みソフトウェア

そして最後に、これら全てを制御するソフトを書く。感圧センサー上をなぞるように指が右回転すれば、画面を下にスクロールするGUIプログラム。音楽の再生を行うプログラム。音楽の再生が開始されると同時に、10個あるLEDが音量と比例して点灯する、イコライザープログラム。再生と同時に無線LANでどこかのサーバに視聴履歴を送付するプログラムなどなど。

最後に組み込むソフトウェアの開発と、その前のドライバー開発、最初のOSポーティング作業などをひっくるめて「組み込みソフトウェア開発」と呼ぶ。

x86CPUの上で動いているOSの上で開発する一般的なPCプログラミングとの違いは多々あるけれど、全体を通して一人でやればかなり低いレイヤー(ハードウェアの電気電子的な要素)から自分のプログラムの制御下に置くことができるため、制約事項が少ないというのが大きな違いである。

これまで企業内の機密だったノウハウなどが多く、まだまだドキュメント類が少ないという特徴もある。逆に今いろいろと情報を出せる人は、注目される....かもしれない。

というわけで、株式会社Cerevoにて組み込みに限らずですが組み込み系の話題も多くなると思われる、「Cerevo tech blog」なる技術情報発信Blogを立ち上げました。私ではなく、Cerevoの技術陣があれやこれやの組み込み系・Web系技術情報を発信していくBlogとなる予定ですので、よろしければRSSリーダー登録などをお願いいたします。

http://tech.cerevo.com/blog/

*1:組み込み用x86もあるけどまぁここでは話しをややこしくするので省略

*2PCM音源時代にドレミファもないもんだがwww

774774 2008/12/01 00:20 リアルタイム性についても書いて欲しかった。

BlueくんBlueくん 2008/12/01 05:36 > そのバッキャロー社が使っている音源部品のメーカーから「どういう電気信号を送ればどういう動作をしてくれるのか」という仕様書を取り寄せ
pdf ダウンロードするなどして、昔ここまで来たけど、資料の読み方がわからず止まりました。
どうすれば、どこのレジスタに値をセットすればよい、とかを読み取れるんですか。
というか、そういうところに興味があるので期待してます。

androidzaurusandroidzaurus 2008/12/01 08:45 AndroidかわいいよAndroid。

0x077400020x07740002 2008/12/01 09:25 企画部あがりは、やっぱりこの程度の理解か(失笑
幼稚杉www

匿名ドライバ屋さん匿名ドライバ屋さん 2008/12/01 10:55 >逆に今いろいろと情報を出せる人は、注目される....かもしれない。
だから、機密保持契約してるので出せませんって(^^;。
開発に関わっていることすら話しちゃだめな場合もある。
情報なんか出したら二度と仕事はこないどころか、訴えられる可能性もある。
あ、注目って、もしかして職業倫理の無さで注目されるってこと?

tohokuaikitohokuaiki 2008/12/01 11:30 小さな嬌態ってちょっと萌えますね。

stpete97stpete97 2008/12/01 11:35 ドライバ楽しいですよねぇ。
あのコントロールしてる感がなんとも言えんのです。
企画や営業の(悪)影響を受けないという点でもエンジニアの聖地。

しかし近年組み込みソフトも規模が大きくなりすぎて、なかなか
ドライバの開発にありつけないのが現状です。この業界では10年
以上もキャリアがあるとたいていリーダーですし、最近は泣きながら営業が喜ぶイカサマアプリを作る(正確には作らせる)日々です。

Cerevoには期待してますよ!

通りすがり通りすがり 2008/12/01 14:48 レジスタに関して言えば、回路の実装にも依存するんで、通り一遍等な答えはないよね。
直にポートを叩けばいいのか、メモリマップされてるのか、そもそも通信を必要とするものか。
そのあたりは、「自分が作る機械を知る」以外に方法がないよな。

通りすがり通りすがり 2008/12/01 23:27 >どうすれば、どこのレジスタに値をセットすればよい、とかを読み取れるんですか。
基本的な知識が全然不足しているようです。
もっと基礎的なことからしっかり勉強してください。

通りすがり2通りすがり2 2008/12/02 00:36 >どうすれば、どこのレジスタに値をセットすればよい、とかを読み取れるんですか。
ヒント。ロシアン・ルーレット

通りすがり2通りすがり2 2008/12/02 00:37 >どうすれば、どこのレジスタに値をセットすればよい、とかを読み取れるんですか。
ヒント。ロシアン・ルーレット

ロートルロートル 2008/12/02 04:10 x86用に公開されてるドライバをゴニョゴニョして制御方法を知ることも…
これが紙のドキュメントより信頼できたり…

goyokigoyoki 2008/12/16 00:02 申し訳ありません。
操作ミスでトラックバックを連続で送ってしまいました。。

しかし組み込み業界は、保守義務なんかも絡んでいるのでしょうが、
やっぱり閉鎖的というか、情報が出にくいところがありますよね。
巷のプログラマの勉強会でも、組み込み屋は中々おらず寂しい思いをしています。

花痴花痴 2012/02/14 17:45 レビトラ: http://www.86and81.com/Product/21.html
蟻力神: http://www.86and81.com/Product/398.html
levitra: http://www.86and81.com/Product/21.html
VVK: http://www.86and81.com/Product/30.html

巨人倍増巨人倍増 2012/02/14 17:46 VVK: http://www.hellokanpou.com/p/pro325.html
精力剤: http://hellokanpou.com/CL02/
女性用媚薬: http://hellokanpou.com/CL05/
蟻力神: http://www.hellokanpou.com/p/pro132.html

媚薬媚薬 2012/02/14 17:46 FLY D5: http://www.xxkanpo.com/product/251.html
媚薬 カプセル: http://www.xxkanpo.com/product/391.html
小情人: http://www.xxkanpo.com/product/47.html
イカオウ: http://www.xxkanpo.com/product/440.html

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。