SELinuxで組み込み機器のセキュリティを高める(後編) ―― 組み込み機器にSELinuxを適用する

中村雄一

tag: 組み込み

技術解説 2008年9月 8日

 CAT760ボードの場合,zImageファイルの転送方法は次のようになります.zImageファイル(arch/sh/bootディレクトリにある)をvfatファイル・システムでフォーマットされたCompactFlashカードにコピーし,ブートローダから,

  >admin
  <パスワード(初期設定はsilinux)>
  >cp cf:zimage rom:kernel


を実行します.この際,zImageが大きすぎるとコピーに失敗します.そのときは,カーネル組み込みとしてコンパイルされているもの(ext2やext3ファイル・システム,Ethernetドライバなど)をカーネル・モジュールとしてコンパイルするなどして,zImageのサイズを小さくします.

 転送した後,動作確認のために新しいカーネルでブートしてみます.ブート・メッセージに,

  SELinux:  Initializing.


と表示されていれば,うまくいっています.

● libselinuxのクロス・コンパイル

 libselinuxのクロス・コンパイルには,libsepolのヘッダ・ファイルが必要になるので,クロス・コンパイル環境のヘッダ・ファイルが格納されたディレクトリにコピーします.以下は筆者の環境でのコマンド例です.

  # cp libsepol-2.0.11/include/sepol /usr/
  sh4-linux-gnu/include/ -r


 libselinuxのソース・ファイルのディレクトリに移動し,そのままクロス・コンパイルすると,エラーが出ることがあります.組み込み環境のglibcでは,TLS(Thread Local Storage)というスレッド関係の構造体がサポートされていないことがあるためです.このエラーを回避するために,コンパイラに-D__thread=という引き数を渡します.最も手っ取り早いのが,Makefileのall:という行の前に1行追加することで
す.EMFLAGSは,Cコンパイラに渡されるコンパイル・オプションです.

  EMFLAGS+= -D__thread=


 また,libselinuxのバージョンによっては,src/Make
fileのCFLAGSから-Werrorを除去しないとコンパイルが成功しない場合もありました.さらに,makeにARCH引き数もセットします.「i386」以外の適当な値(何でも良い)をセットすればOKです.ARCH変数をセットしないと,コンパイラのオプション・エラーでコンパイルに失敗します.

 ここまでの作業が済んだら,クロス・コンパイルを行います.makeのオプションとして,組み込み用のオプションEMBEDDED=yが用意されています.これをセットすると,libselinuxから組み込みでは使わない機能が取り除かれ,libselinuxのサイズが小さくなります.次のようなコマンドでクロス・コンパイルできます.

  $ make EMBEDDED=y CC=sh4-linux-gnu-gcc	 ARCH=sh4


 生成されたファイルを,開発機のクロス・コンパイル環境にインストールします.なお,環境によってインストール先は異なります.

  # cp include/selinux /usr/sh4-linux-gnu/include/ -r
  # cp libselinux.so /usr/sh4-linux-gnu/lib/
  # ln -s /usr/sh4-linux-gnu/lib/libselinux.so /usr/sh4-linux-gnu/lib/libselinux.so.1


 次に,libselinux.soをターゲット・ボードの/libディレクトリに転送し,/lib/libselinux.so.1というシンボリック・リンクを/lib/libselinux.soに張っておきます.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日