Hatena::ブログ(Diary)

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

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

2006-12-26

Windows Vistaはゲーマーには嬉しいOS !?

12/24はクリスマスイブだというのに、モダシンさん,徳力さんと一緒にVistaのイベントにてMSの人達とトークしてきた(PodCastはこちら)。

GPUデスクトップ描画に活用、SLIもサポート

まぁ色々Webを調べれば書いてあることなのだが、VISTAで新しく採用されるWindows AERO*1なるスケスケデスクトップだが、DirectXによって書かれているらしい。そのため、従来のWindowsではCPUに負荷をかけて行っていたデスクトップ描画をGPU側に負荷をかけて実現することができ、CPU負荷が軽減されるそうな。会場ではCPU負荷メーターを表示しながらAERO-ON時、AERO-OFF時のウィンドウ移動操作をするDEMOを見せていただき、AERO-ON時はCPUにほとんど負荷がかかっていないことを確認することができた。

さらに、SLI環境を構築している場合は何とデスクトップ描画においてもSLIの効力が遺憾なく発揮されるとのこと。「ゲームやらない限り意味ないじゃん」と言われてしまうと立つ瀬のなかったゲーマー向けハイエンドグラフィックカードだが、意外なところで日常作業の快適さを提供してくれそうである。


ただ、ゲーマーとして気になるのはウィンドゥモードで実行中のゲームが、デスクトップ環境描画にGPUパワーを食われることによってパフォーマンスダウンしないのか? という点。ステージでもこの点を質問してみたものの『XPと比べて(パフォーマンスが)下がるってことはないと思います』というちょっと曖昧な答えだった。ボイスチャットやIMなど、今後ゲームとは別のデスクトップアプリケーションをゲームのために併走させるケースが増えてくると思うので、ここのところはパフォーマンスが下がらないようにするだけでなく、アプリ切り替え時の安定性についても向上させてほしいものである。

ゲームエクスプローラー, XBOX-Live連携でMacと差別化

ゲームのインストール、プレイなどをより簡単にするゲームエクスプローラー機能、XBOX-Liveとの連携など、ゲーム関連機能、サービスを充実させる方向で攻めているのは好感が持てる。私がゲーマーだからというだけの理由ではない。AppleWindows機を仕事用PCであるかのようなCMを打って大衆を扇動しようとしているが、Macが逆立ちしてもWindowsに勝てない分野がゲームであることを忘れてはならない。仕事用PCでゲームはしない。

Windows用ゲームが多い」「ゲーム用周辺機器が充実している」という従来からあるメリットはそのままに、自社オンラインゲームポータルであるXBOX-Liveへのつなぎこみ、XBOX用コントローラーのサポート、XNA対応など、ゲーム関連で打てる手はすべてぬかりなく打ってきているように感じる。

問題はXBOX-Live連携などがいつからできるようになるのか、ということだろう。現時点で具体的に話せることはまだなにもない、と仰られていたので実現しないままうやむやになってしまわないことを祈るばかりである。

さらに、こと日本においてはコアなゲーマー層が急激に縮小傾向にあるのではないか?という懸念もある。誰でも簡単にはじめることができ、XBOX,PCの垣根を越えてユーザ同士でコミュニケーションを取りあいながら楽しめるゲームタイトルの登場が望まれるところだ。

*1エアロと読む