Comments
Description
Transcript
8-2-応 組み込み開発環境に関する知識 - IPA 独立行政法人 情報処理
OSS モデルカリキュラムの学習ガイダンス 8-2-応 組み込み開発環境に関する知識 ※ 1. 科目の概要 組み込みシステムの開発手法と組み込みシステムを開発するための開発環境について、 典型的な開発環境や実際の利用例を解説する。組み込みアプリケーション開発のポイント を示し、クロス開発環境、GNU 開発環境、組み込み Linux といった具体的な開発環境を紹 介する。 2. 習得ポイント 本科目の学習により習得することが期待されるポイントは以下の通り。 習得ポイント 説 明 シラバスの対応コマ 8-2-応-1.GNU環境を構成するツール群 GCCやGDBといった基本的なツールに加え、as (アセンブラ)、ld (リンカ)、nm (シンボルテー ブルの表示)、objdumpやobjcopyといったオブジェクトファイルを操作するツール、オブジェク トファイルからシンボルを削除するstripなど、binutils (バイナリユーティリティ)に含まれる各 種のツールを説明する。 1 8-2-応-2.ソフトウェア開発の基本ツール ソフトウェアのビルドを自動化するAutotoolsや移植性を高めるconfigureスクリプト、コンパイ ル手順を自動化してビルドするmakeなど、C/C++によるソフトウェア開発に対する基本的な ツールの動作や特徴について解説する。 4 8-2-応-3.makeとconfigureの利用 Makeを利用した実行ファイルの作成方法を解説する。makeを利用することで、gccやld等の コマンドを個別に実行する必要がなくなり、効率のよい開発を実現することができるこを説明 する。また、マルチプラットフォームの環境ではconfigureを利用して、自動的にMakefileを作 成する方法も言及する。 4 8-2-応-4.ソフトウェアの開発を効率化するツール C/C++プログラムの移植性を高め、ビルド環境の設定や環境依存のマクロ定義調整を自動 化するツールであるAutoconfやAutomakeの概要と動作、利用方法について、具体的な実 行手順を交えて解説する。 4 8-2-応-5.ライブラリ化支援や依存情報解決のためのツール とくに環境依存の強いソフトウェアライブラリ作成を支援するツールであるlibtoolを解説する。 またライブラリ利用時に使用し依存情報解決を簡単にするツールであるpkg-configについて その位置付けと設定方法を説明する。 4 8-2-応-6.ユーティリティの構築 BusyBoxの構築方法を解説する。クロスコンパイラの利用方法や実際にクロスコンパイルを 行う手順を、実例を交えて説明する。 4 8-2-応-7.Linuxカーネルの構築 menuconfigを利用したLinuxカーネルの構築方法を解説する。CPUの選択や、デバイスドラ イバ、ファイルシステムなど、構築に必要な項目を列挙し、実際に構築を行うことで説明す る。カーネルハッキング(デバッグ出力)やパワーマネジメントも紹介し、必要に応じたカーネ ル構築方法を理解する。 3 8-2-応-8.デバイスドライバの組み込み 標準でサポートしていないハードウェアや、独自のハードウェアを利用するために必要なデ バイスドライバについて解説する。デバイスドライバの概要、デバッグ時とリリース時のドライ バインストールに関連することがらを説明する。 5 仮想ファイルシステムを利用してターゲット環境の確認を行う方法を解説する。procファイル 8-2-応-9.仮想ファイルシステムを利用したターゲット環境の確 システムやsysファイルシステムを紹介し、ターゲット環境の情報を確認できることを説明す 認 る。 6 8-2-応-10.ライブラリを使用した組み込みデバッグ ※ libUSBライブラリを利用し、実際にハードウェアレベルでどのように動作しているか解説す る。アプリケーションを作成しながら実例を交えることで、組み込み開発の手順、環境の使い 方、ハードウェアレベルでのデバッグ方法を説明する。 11,12,13,14 【学習ガイダンスの使い方】 1. 「習得ポイント」により、当該科目で習得することが期待される概念・知識の全体像を把握する。 2. 「シラバス」、 「IT 知識体系との対応関係」、 「OSS モデルカリキュラム固有知識」をもとに、必要に応じて、 従来の IT 教育プログラム等との相違を把握した上で、具体的な講義計画を考案する。 3. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。 独立行政法人 情報処理推進機構 OSS モデルカリキュラムの学習ガイダンス 3. IT 知識体系との対応関係 「8-2-応 組み込み開発環境に関する知識」と IT 知識体系との対応関係は以下の通り。 応用レベル 科目名 1 2 3 8-2-応 組み込み開発 応用的なコンパイ CPUエミュレータ カーネルの構築 環境に関する知識 ル環境の作成 環境の構築 4 ユーティリティの 構築 5 6 7 8 9 10 11 統合環境でのセ CPUエミュレータ CPUエミュレータ 統合開発環境で デバイスドライバ ターゲット環境の ルフ/クロスコン libUSB利用環境 環境での基本的 環境でのデバッ の組み込み開発 の組み込み 確認 パイル環境の作 の構築 なデバッグ方法 ガ使用手順 環境作成 成 12 13 14 libUSBを使用した 組み込みアプリ ケーションの作 成・1 libUSBを使用した 組み込みアプリ ケーションの作 成・2 libUSBを使用した 組み込みアプリ ケーションの作 成・3 11 12 13 <IT 知識体系上の関連部分> 分野 組 織 関 連 事 項 と 情 報 シ ス テ ム 科目名 1 2 3 4 5 6 7 1 IT-IAS 情報保証 と情報セキュリ ティ IT-IAS2.情報セ IT-IAS1.基礎的な IT-IAS3.運用上の キュリティの仕組 IT-IAS4.ポリシー IT-IAS5.攻撃 問題 問題 み(対策) IT-IAS6.情報セ キュリティ分野 2 IT-SP 社会的な観 点とプロフェッ ショナルとしての 課題 IT-SP1.プロ フェッショナルと IT-SP2.コン してのコミュニ ピュータの歴史 ケーション IT-SP6.コン IT-SP7.組織の中 ピュータの法的問 のIT 題 3 IT-IM 情報管理 IT-IM1.情報管理 の概念と基礎 IT-IM2.データ IT-IM3.データ ベース問合わせ言 アーキテクチャ 語 IT-IM4.データモ IT-IM5.データと デリングとデータ 情報の管理 ベース設計 IT-IM6.データ ベースの応用分野 4 IT-WS Webシステ ムとその技術 IT-WS1.Web技術 [1-Ⅰ-7] IT-WS2.情報アー キテクチャ [1-Ⅰ-7] IT-WS4.Web開発 IT-WS6.ソーシャ ルソフトウェア 5 IT-PF プログラミ IT-PF1.基本デー ング基礎 タ構造 6 IT-IPT 技術を統 IT-IPT1.システム IT-IPT2.データ割 IT-IPT3.統合的 合するためのプロ 間通信 り当てと交換 コーディング グラミング [1-Ⅰ-3] 7 CE-SWE ソフト ウェア工学 8 IT-SIA システム IT-SIA2.調達/手 インテグレーショ IT-SIA1.要求仕様 配 ンとアーキテク チャ 9 IT-NET ネット ワーク IT-SP3.コン IT-SP4.チーム ピュータを取り巻 ワーク く社会環境 IT-SP5.知的財産 権 8 9 10 IT-IAS9.情報セ IT-IAS7.フォレン IT-IAS8.情報の状 IT-IAS10.脅威分 キュリティサービ ジック(情報証拠) 態 析モデル ス IT-IAS11.脆弱性 IT-SP8.プロ フェッショナルと IT-SP9.プライバ しての倫理的な問 シーと個人の自由 題と責任 応 用 技 術 ェ ソ フ ト ウ ア の 方 法 と 技 術 IT-PF2.プログラ IT-PF3.オブジェ IT-PF4.アルゴリ ミングの基本的構 クト指向プログラ ズムと問題解決 成要素 ミング CE-SWE0.歴史と概 CE-SWE1.ソフト 要 ウェアプロセス IT-NET1.ネット ワークの基礎 IT-PF5.イベント 駆動プログラミン IT-PF6.再帰 グ IT-IPT6.種々の問 IT-IPT7.プログラ 題 ミング言語の概要 CE-SWE4.ソフト CE-SWE5.ソフト ウェアのテストと ウェアの保守 検証 CE-SWE6.ソフト CE-SWE7.ソフト CE-SWE9.ソフト CE-SWE11.ソフ ウェア開発・保守 CE-SWE10.ソフト ウェアプロジェク CE-SWE8.言語翻訳 ウェアのフォール トェアの標準化 ツールと環境 ウェアの構成管理 ト管理 トトレランス [1-Ⅰ-6] [1-Ⅰ-4] IT-SIA3.インテグ IT-SIA4.プロジェ IT-SIA5.テストと IT-SIA6.組織の特 IT-SIA7.アーキテ レーション クト管理 品質保証 性 クチャ [1-Ⅰ-4] IT-NET5.アプリ IT-NET4.セキュリ ケーション分野 ティ [1-Ⅰ-5] IT-NET6.ネット ワーク管理 CE-NWK4.クライア CE-NWK6.ワイヤレ CE-NWK2.通信ネッ CE-NWK5.データの CE-NWK8.組込み機 CE-NWK9.通信技術 CE-NWK10.性能評 ントサーバコン スコンピューティ CE-NWK7.データ通 トワークのプロト CE-NWK3.LANとWAN セキュリティと整 器向けネットワー とネットワーク概 価 ピューティング ングとモバイルコ 信 コル 合性 ク 要 [1-Ⅰ-3] ンピューティング CE-NWK11.ネット ワーク管理 CE-NWK12.圧縮と 伸張 CE-NWK テレコ ミュニケーション シ ス テ ム 基 盤 CE-NWK13.クラス タシステム CE-NWK14.イン ターネットアプリ CE-NWK15.次世代 ケーション インターネット [1-Ⅰ-5,7] IT-PT1.オペレー IT-PT2.アーキテ ティングシステム クチャと機構 [1-Ⅰ-3] CE-NWK16.放送 IT-PT4.デプロイ IT-PT3.コン メントソフトウェ IT-PT5.ファーム ピュータインフラ ア ウェア ストラクチャ [1-Ⅰ-4] 11 IT-PT プラット フォーム技術 12 CE-OPS オペレー CE-OPS0.歴史と概 CE-OPS1.並行性 ティングシステム 要 13 CE-CAO コン CE-CAO1.コン CE-CAO2.メモリシ CE-CAO0.歴史と概 CE-CAO3.インタ ピュータのアーキ ピュータアーキテ ステムの構成と 要 フェースと通信 テクチャと構成 クチャの基礎 アーキテクチャ 14 IT-ITF IT基礎 CE-OPS2.スケ ジューリングと ディスパッチ IT-PT6.ハード ウェア CE-OPS3.メモリ管 CE-OPS4.セキュリ CE-OPS5.ファイル CE-OPS6.リアルタ CE-OPS8.設計の原 CE-OPS9.デバイス CE-OPS10.システ CE-OPS7.OSの概要 理 ティと保護 管理 イムOS 則 管理 ム性能評価 ー ー アハ コ ン キド ピ テウ ク チア タ と IT-WS5.脆弱性 IT-IPT5.ソフト IT-IPT4.スクリプ ウェアセキュリ ティング手法 ティの実現 CE-SWE2.ソフト CE-SWE3.ソフト ウェアの要求と仕 ウェアの設計 様 IT-NET2.ルーティ ングとスイッチン IT-NET3.物理層 グ CE-NWK1. 通信 CE-NWK0.歴史と概 ネットワークの 要 アーキテクチャ 10 IT-WS3.デジタル メディア ュー ェ CE-CAO4.デバイス CE-CAO5.CPUアー サブシステム キテクチャ CE-CAO8.コン CE-CAO6.性能・コ CE-CAO7.分散・並 ピュータによる計 CE-CAO9.性能向上 スト評価 列処理 算 ャ 複 数 領 域 に ま た が る も の IT-ITF4.IT分野 IT-ITF1.ITの一般 IT-ITF6.IT分野に IT-ITF2.組織の問 (学科)とそれに関 的なテーマ IT-ITF3.ITの歴史 IT-ITF5.応用領域 おける数学と統計 題 連のある分野(学 [1-Ⅰ-4] 学の活用 科) CE-ESY0.歴史と概 CE-ESY1.低電力コ CE-ESY2.高信頼性 CE-ESY3.組込み用 CE-ESY5.ライフサ CE-ESY4.開発環境 CE-ESY6.要件分析 CE-ESY7.仕様定義 CE-ESY8.構造設計 CE-ESY9.テスト 要 ンピューティング システムの設計 アーキテクチャ イクル 15 CE-ESY10.プロ ジェクト管理 CE-ESY11.並行設 計(ハードウェ CE-ESY12.実装 ア、ソフトウェア CE-ESY23.専門シ ステム CE-ESY24.信頼性 とフォールトトレ ランス CE-ESY 組込みシ ステム CE-ESY13.リアル CE-ESY14.組込み タイムシステム設 マイクロコント 計 ローラ CE-ESY15.組込み プログラム CE-ESY16.設計手 法 CE-ESY17.ツール によるサポート CE-ESY19.インタ CE-ESY18.ネット フェースシステム CE-ESY20.センサ ワーク型組込みシ と混合信号システ 技術 ステム ム CE-ESY21.デバイ スドライバ CE-ESY22.メンテ ナンス 独立行政法人 情報処理推進機構 OSS モデルカリキュラムの学習ガイダンス 4. OSS モデルカリキュラム固有の知識 OSS モデルカリキュラム固有の知識として、組み込み Linux 環境における開発支援ツ ールの利用手法がある。GNU 開発環境などを Linux 上で実践的に利用してデバッグを行 う手法を習得する。 科目名 第1回 第2回 第3回 (1) GNUで提供される (1) CPUエミュレータ (1) カーネルの構築 ツールの種類 環境の構築 (2) OSのインストール (2) カーネルの構築 方法 第4回 (1) ユーティリティの 構築方法 第5回 (1) デバイスドライバ とは 第6回 第7回 (1) 仮想ファイルシス (1) CPUエミュレータ テムの概要 でのプラグラム実行 (2) デバイスドライバ のインストール (1) 仮想ファイルシス (2) ソースコードのデ テムの概要 バッグ (3) デバイスドライバ のリリース 8-2-応 組み込み開発 環境に関する知識 第8回 第9回 (1) QENUでのデバッ (1) 統合開発環境の グ環境 概要 (2) Eclipseを用いた 組み込み開発 第10回 第11回 (1) セルフコンパイル (1) libUSBとは 環境の作成 第12回 第13回 第14回 (1) USBデバイスを検 (1) USBデバイスの読 (1) 組み込み開発特 索する み書き 有の難しさ (2) クロスコンパイル (2) ソースコードの取 環境の作成 得 (2) ターゲット環境で の実行 (2) ターゲット環境で の実行 (2) よりよくするため に (3) クロスコンパイル (網掛け部分は IT 知識体系で学習できる知識を示し、それ以外は OSS モデルカリキュラム固有の知識を示している) 独立行政法人 情報処理推進機構 スキル区分 開発体系分野 OSS モデルカリキュラムの科目 8-2-応 組み込みシステム開発環境に関する知識 習得ポイント 8-2-応-1. GNU 環境を構成するツール群 対応する 第 1 回 応用的なコンパイル環境の作成 レベル 応用 コースウェア 8-2-応-1. GNU 環境を構成するツール群 GCC や GDB といった基本的なツールに加え、as (アセンブラ)、ld (リンカ)、nm (シンボルテーブル の表示)、objdump や objcopy といったオブジェクトファイルを操作するツール、オブジェクトファイル からシンボルを削除する strip など、binutils (バイナリユーティリティ)に含まれる各種のツールを説明 する。 【学習の要点】 * GNU 開発環境における代表的な C コンパイラは gcc であり、C ライブラリは glibc である。 * バイナリユーティリティパッケージは binutils である。 * デバッギングを行うには gdb を利用することがほとんどである。 * GNU の開発ツール群のファイル名のプレフィックス部分には、ターゲット環境名を用いることが 慣習として行われている。 * ホスト、ターゲット、そしてカーネルの組み合わせにより、必要な binutils, gcc, glibc のバージョン の組み合わせ、パッチ当ての有無が変わってくるので注意を要する。 図 8-2-応- 1 GNU 開発環境を構成するツール群 8-2-応 - 1 【解説】 1) GNU 開発環境コンパイラ * GNU 開発環境における代表的な C コンパイラは gcc である。組み込み開発環境ではそれほど 利用されてはいないが、C++のコンパイラとして c++や g++が利用されることがある。ツールチェ ーンとして提供されるコンパイラはツールチェーンホームディレクトリの下の/bin ディレクトリにあ る場合が多い。 * コンパイラはターゲット環境で動作するものを十分に検討して選択しなければならない。通常コ ンパイラのファイル名はプレフィックスでターゲット環境の CPU を示している。例えば、ARM を CPU に利用している場合だと次のような名前となる。 arm -linux-gnueabi-gcc 2) GNU 開発環境ライブラリ * GNU 開発環境における代表的な C ライブラリは glibc である。たいていはツールチェーンの下に ある lib ディレクトリに、libc-x.x.x.so というダイナミックリンクライブラリの形で提供されていることが 多い。glibc のシンボリックリンクは libc.so.x になる。 * C ライブラリとして glibc の代わりに uClibc (Ⅱ-27-6 参照)を利用することもできる。 3) GNU 開発環境バイナリユーティリティパッケージ * GNU 開発環境におけるバイナリユーティリティパッケージは binutils である。binutils には、ld, gas, ar, nm が含まれる。ld はリンカ、gas はアセンブラ、nm はシンボルテーブル表示ユーティリ ティである。 * objdump はオブジェクトファイルのデバッグ情報やヘッダ・セクション情報を表示するツールであ る。objcopy はオブジェクトファイルのコピーや raw バイナリファイルに変換するツールである。 * strip は、ライブラリからシンボルテーブルを取り除いてオブジェクトサイズを削減するユーティリ ティである。組み込みシステムにはメモリサイズの強い制限があるので、このツールを利用して 通常の OS で使用しているライブラリを組み込み用に変換する。 * binutils のバイナリユーティリティはたいていツールチェーンの bin ディレクトリに、コンパイラと共 に提供されることが多い。 4) GNU デバッグ環境 * GNU 開発環境でデバッギングを行うには gdb を利用することがほとんどである。gdb についても ターゲット環境に相当するものを利用しなければならない。たいていの場合、ファイル名のプレ フィックス部分にターゲット環境名が入っている。 arm-linux-gdb * gdb を利用してシンボリックデバッギングを行うには、コンパイル時に-g オプションが必要であ る。 * gdb には gdbserver というリモートデバッギングを可能にするモジュールがある。 5) ホスト、ターゲット、カーネル * ホスト、ターゲット、そしてカーネルの組み合わせにより、必要な binutils, gcc, glibc のバージョン の組み合わせ、パッチ当ての有無が変わってくるので注意を要する。この構成管理が、長く開 発を続けるコツになる。 8-2-応 - 2 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 17 開発ツールに関する知識 レベル 応用 8-2-応-2. ソフトウェア開発の基本ツール 第 4 回 ユーティリティの構築 コースウェア 8-2-応-2. ソフトウェア開発の基本ツール ソフトウェアのビルドを自動化する Autotools や移植性を高める configure スクリプト、コンパイル手順 を自動化してビルドする make など、C/C++によるソフトウェア開発に対する基本的なツールの動作 や特徴について解説する。 【学習の要点】 * Autotools は、Autoconf/Automake/Libtool から構成され、ソフトウェアを様々な UNIX 環境に対 応させることを支援するツールである。 * configure スクリプトは、autoconf により生成可能なシェルスクリプトであり、Makefile.in をもとに環 境に応じた Makefile を生成する。 * make は Makefile をもとに、依存関係のある一連の作業の実行を自動化するツールである。 図 8-2-応- 2 Autotools のコマンドとファイルの関係 8-2-応 - 3 【解説】 1) make Makefile ファイルを元に、成果物の作成手順を自動化するコマンド。成果物の作成にあたり、成果 物が依存するファイルの更新状態を確認し、必要な手順のみを行うため、大規模なソフトウェアの ビルド時間を短縮することが可能になる。 2) configure スクリプト Makefile.in ファイル、および config.h.in ファイルを元に、プラットフォームに合わせた Makefile ファイ ル、および config.h ファイル(環境を反映した‘#define’ディレクティブからなるヘッダファイル)を作成 するスクリプト。Makefile.in ファイル、config.h.in ファイル、および configure スクリプトは、後述する Autotools によって生成できる。 3) Autotools Autotools は、Makefile.in ファイル、config.h.in ファイル、および configure スクリプトを生成するため のツール群である。ツールを利用した生成の手順については「II-17-6. ソフトウェア開発を効率化 す る ツ ー ル 」 を 参 照 の こ と 。 こ こ で は ツ ー ル の 概 要 を 説 明 す る 。 Autotools は 、 Autoconf/Automake/Libtool の 3 つのパッケージから構成され、それぞれのパッケージがいくつか のコマンドを含んでいる。主要なコマンドを以下にあげる。 Autoconf autoconf configure.ac ファイルを元に configure スクリプトを作成する。configure.ac ファイルは開発者が 記述する。 autoheader configure.ac ファイルを元に config.h.in を作成する。 autoreconf 必要なツールを正しい順番で起動し、configure スクリプトを再作成する。 autoscan ソースコード構成をスキャンし、configure.ac ファイルの雛形を作成する。 Automake automake Makefile.am ファイル、および configure.ac ファイルを元に Makefile.in ファイルを作成する。 Makefile.am ファイルは開発者が記述する。 aclocal configure.ac ファイルを元に、必要なマクロを aclocal.m4 ファイルに出力する。 Libtool libtool プラットフォーム毎のライブラリの作成手順の違いを吸収し、共通の手順で作成することを可 能にする。 8-2-応 - 4 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 8-2-応 組み込みシステム開発環境に関する知識 レベル 応用 8-2-応-3. make と configure の利用 第 4 回 ユーティリティの構築 コースウェア 8-2-応-3. make と configure の利用 Make を利用した実行ファイルの作成方法を解説する。make を利用することで、gcc や ld 等のコマン ドを個別に実行する必要がなくなり、効率のよい開発を実現することができるこを説明する。また、マ ルチプラットフォームの環境では configure を利用して、自動的に Makefile を作成する方法も言及す る。 【学習の要点】 * make コマンドは Makefile と呼ばれる設定ファイルを利用して実行ファイルの生成を行う。 * Makefile は一度作成すると、手動で gcc, ld を実行する手間を省け、効率のよい開発を実現す る。 * configure コマンドは OS のバージョン、CPU や依存関係を判別し、自動的に Makefile を生成す るコマンドである。 図 8-2-応- 3 GNU 開発環境の利用方法 8-2-応 - 5 【解説】 1) GNU 開発環境 * 組み込み OS として Linux を選択する場合、現在では GNU 開発環境を用いる場合が多い。 * GNU 開発環境を利用する優位性は、コードの入手可能性、高品質と信頼性、幅広いハードウ ェアサポート、通信スタック等のソフトウェアスタックの充実、コミュニティからの支援、ベンダから の独立、無料等があげられる。 * GNU 開発環境の入手は ftp://ftp.gnu.org/gnu より入手する。 * GNU 開発環境は、著作権や再配布についてのライセンス条項に気をつける必要がある。特に GPL(GNU Public License)で提供されているライブラリやモジュールを静的リンクしてロードモジ ュールを作成した場合、そのロードモジュールは GPL の派生物となってしまうことには、注意を 要する。 * GNU 開発環境以外に、Eclipse や KDevelop などの開発環境を利用することもできるが、その違 いについては十分に調査する必要がある。 2) コンパイルからリンクまで * 前提条件 - aa.c, bb.c というソースファイルがあり、aa.c は bb.c の関数を呼び出しているとする。それぞ れのヘッダファイルは/include フォルダにある。ターゲットのリンカスクリプト target.ld とする。 ターゲット名は arm-abc とする。従って C コンパイラは arm-abc-gcc であり、リンカは arm-abc-ld となる。 * コンパイルコマンド: $ arm-abc-gcc -g -c -Wall -I../include aa.c $ arm-abc-gcc -g -c -Wall -I../include bb.c * -g オプションはデバッグ情報の生成のためで、-c オプションはコンパイルのみ行いリンクを抑制 するために用いた。-Wall オプションはすべての警告を出力するためで、-I オプションはヘッダ ファイルを格納しているディレクトリのサーチパスを指定する。 * コンパイルにより生成されたのは、aa.o, bb.o * リンクコマンド: $ arm-abc-ld -Map aalink.map -T target.ld -N -o aalink.exe aa.o bb.o * -N オプションは生成されたロードモジュールのテキストセクション、データセクションを読み出し/ 書き出し可能にする。 * リンクにより生成されたのは、aalink.exe, aalink.map * aalink.exe はロードモジュールでこれをターゲット環境に転送して実行する。aalink.map はコード とデータのアドレスのマッピングファイルでデバッグのために用いる。 3) makefile * 前節と等価な操作を makefile を作成することで実現できる。 * makefile を作成したら以下のように実行する。 $ make * 生成したファイルを削除したいときは次のようにする。 $make clean 8-2-応 - 6 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 17 開発ツールに関する知識 レベル 応用 8-2-応-4. ソフトウェアの開発を効率化するツール 第 4 回 ユーティリティの構築 コースウェア 8-2-応-4. ソフトウェアの開発を効率化するツール C/C++プログラムの移植性を高め、ビルド環境の設定や環境依存のマクロ定義調整を自動化する ツールである Autoconf や Automake の概要と動作、利用方法について、具体的な実行手順を交え て解説する。 【学習の要点】 * Autoconf/Automake は Makefile.am ファイル、および configure.ac ファイルをもとに、Makefile.in ファイル、config.h.in ファイル、configure スクリプトを生成する。 * autoscan コマンドは指定したディレクトリ内のソースコードファイルを検査し、configure.ac ファイ ルの雛形を生成する。 * Makefile.in ファイル、config.h.in ファイル、configure スクリプトは、autoreconf コマンドにより生成 できる。 図 8-2-応- 4 Autoreconf を利用したファイル生成 8-2-応 - 7 【解説】 1) Autoconf/Automake の目的 Autotools の内、Autoconf/Automake の主な目的は、Makefile.in ファイル、config.h.in ファイル、 configure スクリプトの生成である。これらを生成することで、「./configure; make; make install」による インストールが可能になる。Autoconf/Automake を利用して上記 3 ファイルを生成する手順を以下 に解説する。 2) Makefile.am ファイルの作成 Makefile.am ファイルは automake コマンドの入力となる設定ファイルであり、Makefile.in ファイルを 生成するのに必要な設定を記述する。以下に Makefile.am に記述する項目の例をあげる。 bin_PROGRAMS プログラムの実行ファイルのファイル名を指定する。なお、実行ファイル名を指定する項目として は、bin_PROGRAMS の他に、sbin_PROGRAMS、libexec_PROGRAMS などがあり、実行ファイル がインストールされる場所によって使い分ける。 [実行ファイル名]_SOURCES 実行ファイルを生成するために必要となるソースコードファイルを指定する。 [実行ファイル名]_LDADD 実行ファイルを生成する際にリンクする必要のあるライブラリを指定する。 Makefile.am ファイルの詳細については Web ページ (http://sources.redhat.com/automake/automake.html)を参照のこと。 3) configure.ac ファイルの作成 configure.ac ファイルは autoconf コマンドの入力となるファイルであり、configure スクリプトを生成す るためのマクロ呼び出しとシェルスクリプトから構成される。作成にあたっては、autoscan コマンドに より生成される configure.scan ファイルを configure.ac ファイルの雛形として用いることができる。以 下に configure.ac ファイルで利用されるマクロの例をあげる。 AC_INIT パッケージ名、バージョン名、バグレポートの送付先、といった情報を設定する。 AC_PREREQ 依存する autoconf バージョンを設定する。 AC_CHECK_SIZEOF 型のサイズを調べる。または、クロスコンパイル時の型のサイズを指定する。 このほかの利用可能なマクロについては、Autoconf Macro Reference (http://sources.redhat.com/autobook/autobook/autobook_283.html)を参照のこと。 4) autoreconf コマンドの実行 Makefile.am ファイル、および configure.ac ファイルから必要なファイルを生成する方法の一つは、 「II-17-5. ソフトウェア開発の基本ツール」で解説した aclocal、autoheader、autoconf、automake の 各コマンドを実行することである。より簡便な方法として、autoreconf コマンドを用いることで、必要な コマンドが自動的に実行され、Makefile.in ファイル、config.h.in ファイル、configure スクリプトを一度 に生成することができる。 8-2-応 - 8 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 17 開発ツールに関する知識 レベル 応用 8-2-応-5. ライブラリ化支援や依存情報解決のためのツール 第 4 回 ユーティリティの構築 コースウェア 8-2-応-5. ライブラリ化支援や依存情報解決のためのツール とくに環境依存の強いソフトウェアライブラリ作成を支援するツールである libtool を解説する。またラ イブラリ利用時に使用し依存情報解決を簡単にするツールである pkg-config についてその位置付 けと設定方法を説明する。 【学習の要点】 * Libtool は、ライブラリ作成する際の、環境による手順の違いを吸収するツールである。 * pkg-config は、システムにインストールされているライブラリについての情報を問い合わせるため のツールである。 図 8-2-応- 5 libtool スクリプトの利用 8-2-応 - 9 【解説】 1) Libtool Libtool はライブラリの作成手順や共有ライブラリのロード手順、静的ライブラリのリンク手順につい て、プラットフォーム毎の違いを吸収するツールである。コマンドラインインタフェース、および Autoconf/Automake と連携するためのマクロを提供する。 2) libtool スクリプトの利用 Libtool には、コマンドラインで利用するための libtool スクリプトが含まれている。libtool スクリプトの 利用手順を以下に説明する。 コンパイル libtool スクリプトの「--mode=compile」オプションを利用する。コマンド実行後、コンパイル結果と してオブジェクトファイル、および、「ライブラリオブジェクト」が作成される。ライブラリオブジェクト とは Libtool が独自に利用するファイルであり、オブジェクトファイルの位置が記述されたテキスト ファイルである。 ライブラリの作成 libtool スクリプトの「--mode=link」オプションを利用する。コマンドの実行結果として静的ライブラ リ、共有ライブラリと、「Libtool ライブラリ」が作成される。Libtool ライブラリとは、Libtool が独自に 利用するファイルであり、作成した静的ライブラリ、共有ライブラリに関する情報が記述されたテ キストファイルである。 実行ファイルの作成 Libtool ライブラリを利用する実行ファイルを作成するには、libtool スクリプトの「--mode=link」オ プションを利用し、「-L」オプションで Libtool ライブラリが存在するディレクトリを指定した上で、 「-l」オプションにより、ライブラリ名を指定する。libtool スクリプトにより、Libtool ライブラリを通して 共有ライブラリの位置が特定される。 ライブラリのインストール 作成した Libtool ライブラリをインストールするには libtool スクリプトの「--mode=install」オプショ ンを利用する。 3) Libtool を Autoconf/Automake に組み込む Autoconf で Libtool を利用するには、configure.ac にマクロ AC_PROG_LIBTOOL を追加する。 AC_PROG_LIBTOOL マクロの利用にあたっては、「aclocal」コマンドにより、Libtool から提供される 「libtool.m4」を「aclocal.m4」に追加しておく必要がある。また、AC_PROG_LIBTOOL が必要とする サポートスクリプトをパッケージに含めるためには、「libtoolize -c」コマンドを利用する。 Automake で Libtool を利用するには、Makefile.am 内で、「[実行ファイル名]_LDADD」に、Libtool ライブラリを指定する。 4) pkg-config pkg-config はシステムにインストールされているライブラリに関する情報を取り出すための仕組みで ある。pkg-config のコマンドラインに対象とするライブラリ名やオプションを指定して起動すると、コン パイル時に利用できる適切なコンパイルフラグやリンクフラグを表す文字列が表示される。なお pkg-config の設定は/usr/lib/pkgconfig/以下の*.pc に格納されている。以下に実行例を示す。 $ pkg-config pkg-config openssl --cflags --libs 8-2-応 - 10 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 8-2-応 組み込みシステム開発環境に関する知識 レベル 応用 8-2-応-6. ユーティリティの構築 第 4 回 ユーティリティの構築 コースウェア 8-2-応-6. ユーティリティの構築 BusyBox の構築方法を解説する。クロスコンパイラの利用方法や実際にクロスコンパイルを行う手順 を、実例を交えて説明する。 【学習の要点】 * ターゲット環境に必要なツールを取り込むために BusyBox の構築を行うことが必要である。 * BusyBox には数多くのツールが収録されているため、ビルドの際に必要なツール以外を除くこと でフットプリントを小さくすることができる。 * コンパイルの設定を変更することで、組み込み環境で利用できる実行ファイルを生成することが できる。 図 8-2-応- 6 BusyBox の機能選択 8-2-応 - 11 【解説】 1) BusyBox のビルド BusyBox の特徴は、システムにとって必要な機能のみを選択して構築できることにある。省フットプ リントとはいえ、BusyBox がサポートしているコマンドは多岐にわたるため、すべてのアプレットを導 入することは、リソースの制約がある組み込み環境では厳しい場合が多い。そこで、BusyBox から 必要な機能のみを選択し、ターゲットに合った環境を構築することが必要である。 また、組み込み環境下においては、クロスコンパイルを行う必要もあるため、クロスコンパイルのた めの設定や、必要であればコンパイルオプションの追加などを検討する必要もある。 2) BusyBox の構成 * BusyBox Settings BusyBox のビルド設定として、クロスコンパイラの設定、デバッグ情報の有無、などがある。 * Applets BusyBox がサポートするアプレット。主に利用するアプレットを以下に挙げる。その他のアプレッ トは適宜取捨選択を行う。 - Coreutils ls や cat、echo といった基本的なコマンド - Editors vi などのエディタ - Finding Utilities find や grep といった検索のためのコマンド - Process Utilities ps や top といったプロセスの状態を確認するためのコマンド - System Logging Utilities syslogd などのロギング用のデーモン 3) BusyBox でのクロスコンパイル 「BusyBox Settings|Build Options|Cross Compiler prefix」を選択し、コンパイラの接頭辞を選択 す る こ と で 、 コ ン パ イ ラ を 変 更 す る 。 ま た 、 「 BusyBox Settings | Build Options | Additional CFLAGS」にて、コンパイラオプションを追加することもできる。 8-2-応 - 12 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 8-2-応 組み込みシステム開発環境に関する知識 レベル 応用 8-2-応-7. Linux カーネルの構築 第 3 回 カーネルの構築 コースウェア 8-2-応-7. Linux カーネルの構築 menuconfig を利用した Linux カーネルの構築方法を解説する。CPU の選択や、デバイスドライバ、 ファイルシステムなど、構築に必要な項目を列挙し、実際に構築を行うことで説明する。カーネルハ ッキング(デバッグ出力)やパワーマネジメントも紹介し、必要に応じたカーネル構築方法を理解す る。 【学習の要点】 * 組み込みシステムではターゲットに合わせた環境のカーネルを構築する必要がある。 * ターゲットハードウェアの構成を知ることによって、構築するカーネルを必要な機能に絞ることが できる。 * .config ファイルを利用することで、ターゲットボードの環境に合ったカーネルを構築することがで きる。 図 8-2-応- 7 カーネル構築 8-2-応 - 13 【解説】 1) カーネル構築の概要 組み込み開発では、メモリやストレージ容量などに大きく制約があるため、ターゲットハードウェアの 環境によってカーネルに組み込むドライバやミドルウェアを選択し、カーネルを構築(ビルド)する 必要がある。 また、カーネルソースにはデスクトップ向けや企業向け、サーバ向けの機能も取り込まれているた め、システムとして必要な機能を確認し、不要な機能を削除していくことが大切である。 カーネルに組み込まれるドライバやミドルウェアなどは.config ファイルに記録され、この内容を基に 構築される。 2) 主な設定項目 * Processor type and features CPU アーキテクチャやマルチコア、Hyperthreading など CPU に関する設定 * Bus options (PCI etc.) PCI や PCI Express、 PCCard 、ISA などバスに関する設定 * Device Drivers キャラクタ型デバイスやブロック型デバイスなどすべてのデバイスドライバに関する設定 * File systems ext4 や reiserfs、NFS などすべてのデバイスドライバに関する設定 * Kernel hacking printk などデバッグに関する設定 3) カーネル構築の種類 カーネル構築の方法は.config ファイルを編集することが前提になるが、この編集方法にはいくつか の種類がある。 .config ファイルを編集したのち、カーネルのソースフォルダにて make コマンドを実 行することで新しいカーネルイメージが作成される。 作成されたカーネルはデスクトップ Linux では/boot/の下にイメージが置かれ、組み込み環境で ROM に書き込む場合には、導入したブートローダーがサポートする形式に変換して書き込む。 * .config ファイルを直接編集する vi などのエディタで.config ファイルを直接編集する。 * make config を利用する コンソール にて選択項目を Yes/No で編集する。 * make menuconfig を利用する TUI(TextUserInterface)にて選択項目を編集する。 * make xconfig を利用する GUI にて選択項目を編集する。 8-2-応 - 14 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 8-2-応 組み込みシステム開発環境に関する知識 レベル 応用 8-2-応-8. デバイスドライバの組み込み 第 5 回 デバイスドライバの組み込み コースウェア 8-2-応-8. デバイスドライバの組み込み 標準でサポートしていないハードウェアや、独自のハードウェアを利用するために必要なデバイスド ライバについて解説する。デバイスドライバの概要、デバッグ時とリリース時のドライバインストールに 関連することがらを説明する。 【学習の要点】 * デバイスドライバとは主にハードウェアを制御するソフトウェアを指す。 * Linux が標準でサポートしていない、自作のハードウェアなどを利用する場合はデバイスドライ バを作成する必要がある。 * デバッグ時や配布されたデバイスドライバを利用する場合は insmod などのコマンドを使用する。 * 組み込み環境においてリリースの際には、デバイスドライバを Linux カーネルに組み込んで構 築する。 図 8-2-応- 8 ドライバの組み込み 8-2-応 - 15 【解説】 1) デバイスドライバとは デバイスドライバとはシリアルデバイスや、ハードディスクドライブ、ネットワークカードのようなハード ウェアの制御や、ext3 などのファイルシステムを構築するためのソフトウェアである。 Linux では標準的にサポートされるハードウェアが数多くあり、これらはカーネルソースに含まれて 提供されている。 開発するシステムで、標準的にサポートされていないハードウェアを利用する場合には、そのハー ドウェアのデバイスドライバのソースコードが公開されていればそれを利用する。ソースコードがな い場合や、独自のハードウェアを接続する場合は、そのハードウェアに対するドライバを作成する 必要がある。 デバイスドライバはアプリケーションと違いカーネルと同じレベルで動作するため、専用のコマンド を利用してインストール、実行、アンインストールを行う。 リリースはデバイスドライバを組み込んだ状態で行うことが多いため、カーネルの構築の際に該当ド ライバを組み込むことにより、カーネルに統合される。 2) 手動でのデバイスドライバインストール デバッグ時など頻繁にデバイスドライバを入れ替える必要がある場合には、コンソールからのコマン ドにて行うことで動作を確認できる。 * insmod デバイスドライバ名を指定することで、デバイスドライバのロードと実行を行うことができる。 * lsmod 現在ロードされている、デバイスドライバの一覧を表示することができる。 * rmmod デバイスドライバ名を指定することで、デバイスドライバの停止と削除を行うことができる。 3) 作成したデバイスドライバのリリース 組み込みシステムをリリースする際には、デバイスドライバはカーネルの一部として組み込まれてい なければならない。デバイスドライバのカーネルへの組み込みは、カーネルの構築で行う。 8-2-応 - 16 スキル区分 開発体系分野 習得ポイント 対応する OSS モデルカリキュラムの科目 8-2-応 組み込みシステム開発環境に関する知識 レベル 応用 8-2-応-9. 仮想ファイルシステムを利用したターゲット環境の確認 第 6 回 ターゲット環境の確認 コースウェア 8-2-応-9. 仮想ファイルシステムを利用したターゲット環境の確認 仮想ファイルシステムを利用してターゲット環境の確認を行う方法を解説する。proc ファイルシステ ムや sys ファイルシステムを紹介し、ターゲット環境の情報を確認できることを説明する。 【学習の要点】 * proc ファイルシステムおよび sys ファイルシステムはストレージ上には存在しない仮想的なファイ ルシステムである。 * 仮想ファイルシステムを利用することで、ターゲット環境やハードウェア情報を参照できる。 図 8-2-応- 9 proc ファイルシステムの例 8-2-応 - 17 【解説】 1) 仮想ファイルシステムの概要 実際にストレージ上には無い、メモリ上のファイルシステムで、プロセスに関する情報やハードウェ アに関する情報を確認、変更することができるファイルシステムである。 2) proc ファイルシステム proc ファイルシステムのプロセスファイルシステムのことで、/proc で内容を確認することができる。 ハードウェア情報やプロセス情報が項目ごとにツリー上に並んでいる。 * ハードウェア情報 /proc/ide であれば IDE で接続されるハードディスクドライブや、CD-ROM ドライブなどの情報を 確認することができ、/proc/net では TCP などのネットワーク情報を確認することができる。 * プロセス情報 /proc/プロセス ID にて、マッピングされたメモリ領域や使用しているメモリの量、利用できるファ イルシステムなど、そのプロセスに関する情報を確認することができる。 3) sys ファイルシステム proc ファイルシステムからハードウェア情報を切り出し、proc ファイルシステムを純粋にプロセス情 報のみにするために導入された仮想ファイルシステム。/sys 以下にデバイス種別ごとのサブフォル ダがあり、バスに関する情報が確認できる/bus/ ディレクトリや、ブロックデバイスに関する情報が 確認できる/block/ ディレクトリなどがある。 sys ファイルシステムは proc ファイルシステムの置き換えを目指しているが、proc ファイルシステム でのハードウェア情報の取得も引き続きサポートしているため、現時点では一本化されていない状 況である。 8-2-応 - 18 スキル区分 OSS モデルカリキュラムの科目 開発体系分野 8-2-応 組み込みシステム開発環境に関する知識 習得ポイント 8-2-応-10. ライブラリを使用した組み込みデバッグ 対応する コースウェア レベル 応用 第 11 回 libUSB 利用環境の構築 第 12 回 libUSB を使用した組み込みアプリケーションの作成・1 第 13 回 libUSB を使用した組み込みアプリケーションの作成・2 第 14 回 libUSB を使用した組み込みアプリケーションの作成・3 8-2-応-10. ライブラリを使用した組み込みデバッグ libUSB ライブラリを利用し、実際にハードウェアレベルでどのように動作しているか解説する。アプリ ケーションを作成しながら実例を交えることで、組み込み開発の手順、環境の使い方、ハードウェア レベルでのデバッグ方法を説明する。 【学習の要点】 * 広く公開されているライブラリを利用することで組み込みシステム開発を行うことができる。 * libUSB ライブラリを利用することで、アプリケーションレベルで USB パケットを送受信することがで きる。 * 組み込みシステム開発ではハードウェアレベルの動作を確認することで、不具合の原因を発見 できる場合もある。 図 8-2-応- 10 ライブラリを利用した組み込み開発 8-2-応 - 19 【解説】 1) アプリケーションからハードウェア制御ができるライブラリ 組み込みシステムでもオープンソースのライブラリを利用した開発を行うことができる。 例として libUSB と呼ばれるライブラリがある。このライブラリはアプリケーションレベルから USB デバ イスを制御することができるソフトウェアである。通常、USB デバイスの制御にはデバイスドライバを 作ることになるが、このソフトウェアを利用することにより、デバイスドライバを作成することなく、アプ リケーションから USB デバイスの制御を行うことができる。 2) ハードウェアレベルのデバッグ機器 組み込みシステムではデバッガなどのソフトウェアレベルでは解決できない、ハードウェアに起因 するような問題も発生する。そのような場合にはハードウェアレベルで調査する機器を利用し、原因 の特定を行う。 * オシロスコープ 主にアナログ信号の状態を解析する機材で、ハードウェアに直接接続し、電気信号の状態をモ ニタできる。CPU ポートや割り込みなど入出力信号を確認することで、原因をソフトウェアとハー ドウェアで切り分けることができる。 * ロジックアナライザ 主にデジタル信号の状態を解析する機材で、バスなどに直接接続し、その状態をモニタできる。 CPU からのアドレスバスやデータバスに接続することにより、アクセスアドレスやデータをモニタ することができる。 * 各種モニタ プロトコルアナライザや、スペクトラムアナライザ、LAN アナライザを利用することにより、通信デ ータそのものをモニタすることができる。これらのモニタをケーブルなどに直接接続することで、 実際に出力されているデータを確認することができる。 8-2-応 - 20