組み込みLinux(くみこみリナックス、)は、組み込みシステムに特化したLinuxカーネルやLinuxオペレーティングシステム、またはそれら搭載する組み込み機器を指す用語である。携帯電話や携帯情報端末、メディアプレイヤーなどの家電機器、ネットワーク機器、ファクトリーオートメーション装置、カーナビ、医療機器など様々な組み込みシステムにて利用されている。米VDC (Venture Development Corporation) の2008年における調査によると、Linux は18%の組み込みエンジニアが使用しているとされる。
通常のLinuxとの違い デスクトップおよびサーバなどの汎用的なシステムと異なり、組み込みシステムではリソースが制限されており、例えばRAMや二次記憶装置の容量が小さい。組み込みLinuxを使った機器は、二次記憶装置としてハードディスクドライブの代わりにより小さいフラッシュメモリを使うことが多い。組み込みLinuxはアプリケーションや対象ハードウェアに必要な機能に特化されていることが多く、Linuxカーネルもそのアプリケーションに対し最適化し構成されている。最適化の具体的な例は、OSのリアルタイムオペレーティングシステム化などである。
開発 一般的にLinuxは移植性にすぐれるシステムであると言われており、デスクトップコンピュータやサーバにあまり採用されていないコンピュータ・アーキテクチャにも移植されている。その中には組み込みシステムも含まれている。
組み込みシステムへのオペレーティングシステムの移植にはプロプライエタリなアセンブラやCコンパイラ、標準Cライブラリを利用するケースもあるが、それらと比較して、OS自体のソースコードを修正して再配布でき、ロイヤルティーやライセンス料が発生しないといった自由ソフトウェア/オープンソースソフトウェアとしての特徴だけではなく技術的な優位点もあり、使用メモリ量が比較的少なく(2MB以下のメモリで起動可能)、安定した動作、比較的サポートベースが大きい、などの利点がある。組み込みLinuxは、Linuxカーネルに少数の自由ソフトウェアを組み合わせたものである。標準Cライブラリにはglibcの代わりに、もっとリソース消費量の少ない dietlibc、uClibc、Newlibが採用される場合もある。
2006年05月、Linuxカーネル開発者のグレッグ・クロー=ハートマンによりLinuxのドライバ開発キットがリリースされた。また、Linux Foundation(以前はOSDL)によって開発のトレーニング講座や無料のウェビナーが開かれている。
組み込みLinuxに使われるオープンソースのミドルウェアとしては、BusyBoxなどのオールインワンなものや、SambaやWebKit、FreeTypeなどのプロプライエタリな代替が少なくかつ重要なものも多い。また、MaemoやMoblin、Androidのようにミドルウェアの大部分をオープンソースで改めて開発するものや、Palm WebOSのようにミドルウェアの多数の部分にオープンソースソフトウェアを組み合わせて使うものもある。マルチメディアに関してはオープンソースで扱う場合、GStreamer経由でハードウェアデコーダとFFmpegをバックエンドにして使われることが多いが、AndroidにおいてはOpenCoreが使われている。
開発環境としてはEclipseか、商用製品が使われることが多い。Eclipseでは組み込みにおいて以下のプラグインが使われる。 Eclipse C/C++ Development Tooling (CDT) - EclipseでのCやC++の開発に必須 Target Management (RSE) Linux Tools Project - プロファイラや動的解析などの機能を統合 Tools for mobile Linux (TmL) EGit - バージョン管理システムの一つ、Gitの統合 Mylyn - バグトラッカの統合 また、EclipseにはMoblin Eclipse Plug-inやAndroid Development Tools (ADT) など特定のOSに特化したプラグインも存在する。 また、開発にはエミュレータのQemuや分散コンパイルの為のdistccやiceccなども使われる。
シェア スマートフォン Gartnerのプレスリリースによると、2008年のLinuxのシェアは8.1%としているGartner Says Worldwide Smartphone Sales Reached Its Lowest Growth Rate With 3.7 Per Cent Increase in Fourth Quarter of 2008。AdMobのレポートによると、全世界のモバイルデバイスにおいてLinuxカーネルを採用しているOSであるAndroidとPalm WebOSを合わせたシェアは2009年8月時点で11%であり、2009年2月の2%と比べ9%伸びているAdMob Mobile Metrics Report (3頁)。また、AdMobの2010年2月のレポートによると、スマートフォンにおけるAndroidのシェアは24%に達し、2位になったとしているAdMob Mobile Metrics Report February 2010。
日本では、NTTドコモの制定したMOAP(L)及びALPベースのFOMA端末用オペレータパックに使われている。
テレビ 日本では、ネットワーク接続可能なハイエンド機種のテレビにはほぼLinuxが搭載されている。
ゲームコンソール ゲームコンソール(コンシューマーゲーム)において、Linuxが使われる例は少ない。
PS2においては、PS2 Linuxがハード込みで発売された。また、PlayStation BB UnitにはLinuxが使われている。PS3においてはLinuxがインストールできることを売りにしていたが、新型を出した際にオミットされた。また、旧型PS3においてもファームウェア更新によって無効化された。
近年ではスマートフォンのゲーム市場が活性化されておりiPhone、携帯ゲーム機としても勢力伸ばす、Androidでのゲーム市場も急速に成長しているAndroid Mobile Sales Chart - October 2009。そのためXperia PlayやODROIDのようなAndroidを使った携帯ゲーム端末が出始めている。
その他、直接組み込みLinuxが使われているコンソールとしては、GP2X/GP2X WizやLeapFrog Didj、Pandora、EVO Smart Consoleなどがある。
Linuxカーネルの組み込み向け機能 以下は、組み込み機器に特化したLinuxカーネルの機能である。"CONFIG_*"という表記はカーネルコンフィグレーションであり、コンパイルする際に機能を有効化するための識別子となる。Linuxカーネルはモノリシックであるため、カーネルコンパイル時に必要とする機能を有効化する。 多くのCPUアーキテクチャやハードウェアプラットフォームで動作 MMU (メモリ管理ユニット)の無いCPUでも動作可能 (CONFIG_MMU=n) 少ない資源でも動作 XIP (Execute in place) 読み出し専用ファイルシステム (romfs、cramfsやSquashFSなど) サイズを削ることができる (Linux Tinyなど) シングルプロセッサに最適化可能 (CONFIG_SMP=n) メモリ内圧縮スワップによるメモリの有効活用 (ramzswap(compcache)) NAND型フラッシュメモリを直接使用可能 (JFFS2やUBIFS) タイトな用途にも使用可能 マウントの早いファイルシステム (YAFFS2など) ソフトリアルタイム (CONFIG_PREEMPT) ハードリアルタイム (CONFIG_PREEMPT_RT patch set) ユーザーアプリケーションのリソース制限 (rlimit, cgroupsなど) サンドボックス (seccomp) コンテナ (LXC) リブート不要なセキュリティパッチ (Ksplice) なお、AMP (非対称型マルチプロセッシング) にはまだ対応していない。RenesasとTIはそれぞれ異なったVirtioベースの仕組みを提案しているPATCH 00/02 virtio: Virtio platform driverRFC 0/8 Introducing a generic AMP/IPC framework。
他の組み込みOSとの比較 ミドルウェアが豊富 POSIX互換であるためUNIX系のミドルウェアが使える TCPスタック、LANスタック、Wifiスタック、Bluetoothスタック、USBスタックなどの各種プロトコルスタックが揃っている 開発しやすい PC上である程度の開発が可能 Linuxカーネルはアーキテクチャー毎に開発されているのではなく、デスクトップ、サーバー、組み込み、メインフレームに関わりなく、共通のソースベースで開発されており、アーキテクチャー相互のソースレベルでの互換性は高い GCC、GNU Binutilsを利用してクロスビルドツール(クロスコンパイラ、クロスリンカなど)を用意することもでき、ビルドまではPC上ですべての開発が可能 カーネルがモジュール化されているため、再起動なくモジュールの開発が可能(ローダブル・カーネル・モジュール) NFSが使えるため、ファイル転送が容易 tftpbootが使えるため、カーネル切り替えが容易 gdbserverが使えるため、リモートデバッグが容易に可能 distccを使った分散コンパイルが容易に可能 機能が豊富、設定も柔軟(反面、複雑ともいえる) カーネルのコンパイルオプション(.config)には汎用OS向けのものも含まれる(共通のソースベースを利用しているため) カーネルのコンパイルオプション(.config)には組み込み向けの設定も多いが、その多くが何らかの資源や機能とのトレードオフであるため、知識が必要になる。 カーネル全体の状態の取得・動的な調整が可能 (/sys/以下, /proc/sys/ 以下, sysctlなどでチューニング可能) ネットワークバッファ プロセス毎の状態の取得・動的な調整が可能 (/proc/プロセス番号/ 以下, rlimitなど) メモリ逼迫時のOOMキラーによりkillされるプロセスの優先順位の設定 動作中のカーネルから別カーネルへ再起動をかけず瞬時に切り替え可能 (コールドブート機能。kexec) オープンソースである 自由に改良することができる(それぞれソフトウェアライセンスにより条件や義務が異なるが、少なくとも改変や再頒布に関してはロイヤルティー・フリーで自由に可能である) 世界中の企業・団体・個人・政府機関による持続的な開発が行われている 脆弱性も調べられているため、セキュリティが高い サポート企業・団体が複数ある 機能の開発を依頼できる所が多い 開発講座が多い 採用前に工数を見積もれる LinuxカーネルなどはGPLでライセンスされているため、機器の販売など配布を伴う場合はソースコードの開示が必要となる(しかし配布を伴わないケース、例えば「自組織内で私的に流用するのみ」ならばソースコードを一切開示する必要はない)。 ソースコードの提供によりOSSコミュニティにコードが還元され、ソフトウェアの機能向上につながり、結果として自社製品の機能強化につながる可能性もある。 採用事例が多く公開されている デバッグ/プロファイリングの仕組みが豊富 カーネルのロック依存性動的チェック (lockdep (CONFIG_LOCKDEP_SUPPORT。標準で有効)) カーネルのデバッグログの個別動的有効無効切り替え (ddebug (dynamic debug。CONFIG_DYNAMIC_DEBUG)) カーネル用のデバッガ (KDB, KGDB, KGTP(パッチ)) カーネルプローブ(kprobe, jprobes, SystemTap) ユーザー空間プローブ (uprobes (パッチ)) カーネル内イベントトレーサ (ftrace event tracer, kprobe-based event tracer, GDB tracepoint support(パッチ), trace-cmd, KernelShark) システムコールトレーサ (strace) プロセストレーサ (ptrace, utrace) 共有ライブラリトレーサ (ltrace) ユーザランド用デバッガ (GDB) プロファイリング (gcov (カーネルではGCOV_KERNEL), OProfile, perf tools) ロック競合のチェック (lock_stat, perf lock) 各種ベンチマーク (perf bench, ffsbなど) ハードウェアによって生まれるレイテンシの検出 (Hardware Latency Detector (rtパッチ)) モニタリング (top, htop, iotop, slabtop, xrestop, latencytop, powertop, apachetopなど) 動的カーネル内メモリ管理バグチェッカ (Kmemcheck, Kmemleak) 動的メモリ管理・スレッドバグチェッカ (Valgrind (UserModeLinux+パッチを使うことでカーネルのチェックも可能)) 静的解析 (Clang Static Analyzer, Smatch, Coccinelle) ロギング (MRTG, Nagios, Xymon, Zabbix, Hinemos, Cacti, Muninなど) リモート管理 (OpenSSH, adb, screen) クラッシュダンプ取得
リアルタイム性能 リアルタイムな用途では、スループットよりもレイテンシが重要となることが多い。レイテンシを改善するためには、カーネルの設定変更・チューニングの他に、アプリケーション自身も最適化する必要がある。カーネルのレイテンシを測定するためにCyclictestなどのベンチマークや各種トレーサが使われる。Linuxにおけるリアルタイム全般の情報は Real-Time Linux Wiki にまとめられている。ELCヨーロッパ2008においてソニーのFrank Rowandによりターゲットへのレイテンシ最適化の実例がプレゼンテーションされているAdventures In Real-Time Performance Tuning, Part 1Adventures In Real-Time Performance Tuning, Part 2。また、同氏によってハードウェア/カーネルに付随するリアルタイムの不足点と改善案が提示されているReal-Time Linux Failure。
かつてのLinuxカーネルはリアルタイム性能が悪かったため、高機能なLinuxカーネルをリアルタイム用途とともに使うために、Linuxカーネルよりも下にリアルタイム性能が高くリアルタイムタスクを実行可能な別のシンプルなカーネルが使われることが多かった。現在はMontaVista、レッドハットなどによりプリエンプション用のパッチセットRT PREEMPTが開発されLinuxカーネルのリアルタイム性能は大きく改善しているものの、他のカーネルとの組み合わせは現在も使われている。
また、Linuxカーネルにはバージョン2.0時点で導入された、アトミックな単一カーネルロックのBKL (Big Kernel Lock)が以前存在していたが、レイテンシ・スループットやスケーラビリティを大きく下げる原因となるため、現在はロックの細分化やロックレス・アルゴリズムへの置き換えなどによって、全てのBKLが削除されている。
2024年のLinux 6.12でRT PREEMPTは"mainline"と呼ばれるリーナス・トーバルズ管理の主要カーネルツリーへ組み込また。
他のマイクロカーネルとの組み合わせ RTAI (Adeos+Linux) RTLinux (Realtime executive+Linux) Linux on ITRON (ITRON+Linux) T-Linux (T-Engine+Linux) L4-Linux (L4+Linux) Litron (TOPPERS/JSPカーネル+Linux) Wind River Real-Time Core for Linux (Real-Time Core+Linux)
その他 KURT-Linux ART-Linux 1998年より通商産業省工業技術院電子技術総合研究所(現:産業技術総合研究所)にて開発されている。
関連団体 thumb|150px|組み込みLinuxを使っている Motorola RAZR² Linuxの組み込み用途での使用を推進する業界団体がいくつか結成されている。
2000年7月に結成された Emblix は日本における組み込みLinuxの普及とその周辺技術の標準化を目的としている。プロセスをグループ化しCPUのリソースを制限するCABIが開発されたが、現在はプロセス集約機能cgroupsに取って代わられている。
2003年に結成された CE Linux Forum はLinuxカーネル本体に組み込み用機能を含めることを目的としている。2010年10月、メンバーの重複が多いことや活動目的の一致、組み込みLinuxに関わる企業や開発者の増加からLinux Foundationと合併し、従来の活動の継続の他、組み込みLinuxの開発プロセスを容易にするためにYocto Projectという技術ワークグループを開始したLinux FoundationとCE Linux Forumが合併、新WG Yocto ProjectもスタートLinux Foundation と Consumer Electronics Linux Forum が合併。
Linuxに関する統括的団体であるLinux Foundationも組み込みLinuxを推進している。2005年にLinux Foundationに合流した Embedded Linux Consortium (2000年3月結成) には、IBM、インテル、LynuxWorks などが参加し、APIの標準化を行っていた。そこで作成された ELCPS (Embedded Linux Consortium Platform Specification) は、組み込みLinuxを使った機器の開発において、アプリケーションの移植性を有する標準プラットフォームとしてどのような機能を含めるべきかのガイドとなっている。
2004年に結成された Linux Phone Standard Forum はLinuxを使った携帯電話でのアプリケーション環境の標準化を目的としている。
2006年に結成された LiMo Foundation は、サードパーティのLinuxベース携帯電話向けアプリケーション開発のための標準インタフェースの確立を目的としている(設立時メンバーは、モトローラ、NEC、パナソニック、サムスン電子、NTTドコモ、ボーダフォン)。
2007年に結成された Open Handset Alliance は、Androidの開発推進を目的としている。
2009年に日本で結成された Open Embedded Software Foundation は、Androidに関わる企業間の協力を目的としている。また、できる限りAndroidと同じApatche 2.0ライセンスで、最小構成のAndroid (Light Weight Android)やデジタルテレビ拡張 (Digital TV Extension)、各種スタックなどの開発を予定している。2010年3月にEmbedded Masterをリリースした。これはAndroid 1.6をベースにSIP/RTPスタックやBluetoothのHID/SPP/OBEXプロファイルへの対応、リモコン対応、ポインティング対応、GUI用APIなどを追加したものである組み込み機器向けに最適化したAndroid「Embedded Master」が公開。
2010年に結成された Linaro は、六ヶ月毎に参加企業の各SoCに最適化されたツール・カーネル・ミドルウェアを提供することなどを目的とした非営利のイギリス企業である(設立時のメンバーはARM、サムスン電子、IBM、Freescale、ST-Ericsson、Texas Instruments)ARM・サムスン・IBM・TIら、組み込みLinux支援団体 Linaro を発足。
組み込みLinuxを利用している商用製品 携帯電話・スマートフォン モトローラ: RAZR² V8, RAZR² V9, ROKR E2, ROKR E6, A780, E680, A910, A1200, U9, E8 (MontaVistaなどがベース) DROID, Motorola Milestone (Androidベース) など :en:First International Computer: Neo 1973 (OpenMoko) Google: Android Dev Phone, Nexus One (Androidベース) パナソニックモバイルコミュニケーションズ: FOMA P702iD,P901iTV,P902iS,P903i, P901i (MOAP(L)ベース) P-02B (FOMA端末用オペレータパックベース) など NEC: FOMA N900iL「N900iL」は日本初のLinux携帯, N901iC, N902iL, N902iL onefone, N902iX, N903i, N904i, N905i, N905iμ, N906i, N906iμ (MOAP(L)ベース) FOMA N601i, N702iS, N703iD, N703iμ, N704iμ, N705i, N705i, N706i, N706ie (MOAP(L)ベース) N-01A, N-02A, N-03A, N-04A, N-06A, N-07A, N-08A, N-09A (MOAP(L)ベース) N-01B, N-02B (FOMA端末用オペレータパックベース) SoftBank 820N, SoftBank 821N, SoftBank 830N, SoftBank 831N, SoftBank 840N, SoftBank 841N SoftBank 930N, SoftBank 931N, SoftBank 940N, SoftBank 001N など カシオ計算機: SoftBank 830CA, SoftBank 930CA HTC Nippon: HT-03A, X06HT(HTC Desire) (Androidベース) T-Mobile: T-Mobile G1 (Androidベース) Palm: Palm Pre, Palm Pixi (Palm WebOS) ノキア: N900 (Maemo) ソニー・エリクソン: SO705i写真で解説する「SO705i」(ソフトウェア編), SO706i (MOAP(L)ベース) Xperia SO-01B (Androidベース) シャープ: IS01 (Androidベース) Emblaze Mobile: ELSE (ELSE INTUITIONベース) 東京工科大学&ネットツーコム: 工科大ケータイ 京セラ: Kyocera Zio M6000 Android (Androidベース)
Wi-Fi 電話 SMC Networks: SMC WSKP100
モバイルインターネット端末・PDA ノキア: Nokia 770 Internet Tablet, N810, N800 (Maemo) シャープ: Zaurus SL-B500, SL-C700 (Embedixベース) SL-C750, SL-C760, SL-C860 (OpenPDAベース) SL-C3000, SL-C1000, SL-C3100, SL-C3200 (Lineo uLinuxベース) NetWalker PC-Z1, PC-T1 (Ubuntuベース) ソニー: mylo■塩田紳二のPDAレポート■ ソニー「mylo」ハードウェアレポート
テレビ・レコーダ パナソニック TH-36D30T, TH-32D30T, TY-S36D50, TY-S32D50, TY-S28D50, TH-36D60, TH-32D60, TH-32D55, TH-28D55 DMR-E700BD VIERA組み込み機器技術展ET2006に「Linuxタウン」出現,ケータイもデジカメもプロジェクタも(page 2) D-dock ブルーレイDIGA, ハイビジョンDIGA など 日立 Wooo 9000シリーズ増田和夫が見た“Wooo”「W42P-HR9000」(1)高画質を支える数々の新技術薄型テレビを制したLinux,開発現場の“守護霊”と“中央線”, W50P-HR10000, W37L-HR9000など ソニー CoCoon Channel ServerCES:米MontaVista、同社Linux搭載のソニー「CoCoon」など展示 (MontaVistaベース) シャープ 東芝(現TVS REGZA) レグザ(Android TV搭載モデル除く) NEC AX10 People of Lava:Scandinavia初の“Google TV”、スウェーデンのメーカーが発表 (Androidベース)
ホームサーバー・マイクロサーバー・LAN接続型ハードディスク シャープ: ガリレオ (HG-01S, HG-02S)アックスの組み込みLinuxはほかと根本的に違う(1/2) − @IT MONOist (axLinuxベース) 玄人志向: 玄箱 (EMモードはMontaVistaベース・他のOSをインストール可能) 玄柴 (Ubuntuベース・他のOSもインストール可能) ぷらっとホーム: OpenBlockS, OpenBlockS S, OpenBlockS R, OpenBlockS 266, OpenBlockS 600 マーベル: SheevaPlug, Plug Computer 3.0, GuruPlug (Ubuntuベース・他のOSもインストール可能) アイ・オー・データ機器: LANDISKシリーズ (Debian(など?)ベース) USL-5Pシリーズ BUFFALO: LinkStationシリーズ (MontaVista(など?)ベース) TeraStationシリーズ NETGEAR: ReadyNAS DUO, ReadyNAS NV+など (Debianベース) NTTコムウェア: L-BOX
ハンディカム ソニー: HDR-SR7, HDR-CX12, HDR-CX500V
デジタルカメラ