keropoの備忘録

しらべたことをメモるブログ

qemuでjpegを表示

LinuxカーネルをARMでクロスコンパイルしてqemu上で動くまでいったが、とりあえずグラフィック表示してみないと面白くないということで、jpegエンコード・デコードライブラリであるlibjpegをクロスコンパイルして、これまで構築した組込みLinuxカーネル上で動かしてみた。

libjepgのダウンロード

以下のコマンドでlibjpegのソースをダウンロード

  http://www.ijg.org/files/jpegsrc.v9.tar.gz

libjpegのクロスコンパイル

ロスコンパイラの環境変数設定

 export TARGET=arm-unknown-linux-gnueabi
 export CROSS=%{クロスコンパイラフォルダ}
 export SYSROOT=$CROSS/$TARGET/sysroot

 export PATH=$PATH:$CROSS/bin

コンフィグレーションの実行

ダウンロードしてきたlibjpegソース圧縮ファイルを解凍して、コンフィグレーションを実行する。

  $CC=$TARGET-gcc ./configure --host=$TARGET --prefix=$SYSROOT

コンパイル実行

  $make
  $make install

make installが正常に終了すると、$SYSROOT/libフォルダ配下に以下のファイルが出来ているはず。

  libjpeg.a
  libjpeg.so
  libjpeg.so.9
  libjpeg.so.9.0.0

サンプルプログラムのクロスコンパイル

FrameBufferを利用してjpegを画面に表示するサンプルプログラム(下記URLからダウンロード)をクロスコンパイルする。
http://ux.getuploader.com/kero_bimouroku/download/1/libjpegex.zip

 $ $TARGET-gcc -c image.c -I$SYSROOT/include
 $ $TARGET-gcc -c main.c -I$SYSROOT/include
 $ $TARGET-gcc -o sjpg *.o -ljpeg

組込みLinux用ルートファイルシステムイメージにライブラリとサンプルプログラムを配置

libjpegコンパイルで作成された.soファイルを組込みLinux用のルートファイルシステムイメージのlibフォルダにコピーする。
また、サンプルプログラムは表示するjpegファイルと共にルートファイルシステムイメージ内の適当なフォルダにコピーする。

qemuで実行確認

実際にqemuを起動して、作成したサンプルプログラムを実行し、jpegが表示されることを確認する。
以下が実際に実行した例
f:id:keropo:20130503230828p:plain

ちょっとカーソル部分が欠けてしまっているけど、とりあえずFrameBufferを利用してjpegが表示できた。