クロスコンパイル環境 Scratchbox2 体験記 京都マイクロコンピュータ 小林 哲之 1. はじめに 2007 年 4 月のジャンボリー #14 の「 Emdebian 体 験記」で Scratchbox が紹介されました。 それで興味を持って Scratchbox を試してみまし た。 

Slides:



Advertisements
Similar presentations
1 ログイン ユーザ名: root パスワード: hosei (初期設定). 2 はじめに 対象 学部 1 年生 日時 毎週木曜 6 限 18 : 30 ~ 19:30 ( 初回のみ ~ 20 : 00) 開催場所 W211 各自持参するもの ノート PC LAN ケーブル.
Advertisements

だい六か – クリスマスとお正月 ぶんぽう. て form review ► Group 1 Verbs ► Have two or more ひらがな in the verb stem AND ► The final sound of the verb stem is from the い row.
Windows Azure ハンズオン トレーニング Windows Azure Web サイト入門.
BBT 大学 Ruby on Rails 開発環境セットアップマニュアル Mac 版 1.1 最終更新日: 2013/1/5.
BBT大学 Ruby on Rails開発環境セットアップマニュアル
CODE::BLOCKSで 無料で簡単 Windowsアプリ開発
OpenOffice.org の独自コンパイル
JXTA Shell (3) P2P特論 (ソフトウェア特論) 第6回 /
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
Fortran と有限差分法の 入門の入門の…
CCP Express 3.1 リカバリ&初期化ガイド
静岡大学大学院理工学研究科 阿部 秀尚 Weka入門(セットアップ編) 静岡大学大学院理工学研究科 阿部 秀尚
Samba日本語版の設定と運用のノウハウトラブルシューティング編
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
高エネルギー加速器研究機構 素粒子原子核研究所 千代浩司
高エネルギー加速器研究機構 素粒子原子核研究所 千代浩司
高エネルギー加速器研究機構 素粒子原子核研究所 千代浩司
オレポータビリティ 日本Rubyの会 青木 峰郎.
実習用サーバの利用開始手順 (Windowsの場合) TeraTerm Proをインストール 公開鍵をメールで送付
UNIX Life KMSF M2 saburo.
システムプログラミング実験 (OS演習) 第9回
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
英語勉強会.
FORTRAN 科学技術計算用 数値演算精度を重視したシステム K=0 DO 10 I=0,N,1 K=K+I 10 CONTINUE
COPPER/FINESSE System構築
Mavenによる プロジェクト管理 近畿大学理工学部 情報学科3年  小野実.
オープンソースのDarwin は Mac OS Xに何をもたらすのか
WSDL と JAX-RPC 年10月13日 Webサービス II (第3回) WSDL と JAX-RPC 年10月13日.
2010年7月9日 統計数理研究所 オープンハウス 確率モデル推定パラメータ値を用いた市場木材価格の期間構造変化の探求 Searching for Structural Change in Market-Based Log Price with Regard to the Estimated Parameters.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
シミュレーション物理5 運動方程式の方法: サブルーチンの使い方.
OSS-EAI ドキュメント生成ツール 利用マニュアル
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
TA 高田正法 B10 CPUを作る 2日目 SPIMのコンパイル TA 高田正法
Provisioning on Multiple Network(NIC) env
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
Integration between GitLab and Fuego
九州大学キャンパスクラウド 利用法 情報ネットワーク特論 講義資料.
高エネルギー加速器研究機構 素粒子原子核研究所 千代浩司
ツールの紹介と新規起動 プロジェクト演習 CS28  川口 博.
Oracle XEを使ってみよう 初音玲.
情報の科学的 な理解(2) 情報科教育法 8回目 2005/6/4 太田 剛.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
PCPU物理設計 ~マクロレベルの配置配線~
Gmsh, Elmer, Garfield++のInstall
Windows PowerShell Cmdlet
-Get test signed and make corrections
CCP Express 3.3 アップグレード ガイド
実行時情報に基づく OSカーネルのコンフィグ最小化
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
はじめてのNCL NCLの実例 NCLのインストール NCLのチュートリアル プログラムソースの解説 いざ実践 計算機セミナー
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
JXTA Shell (1) P2P特論 (ソフトウェア特論) 第4回 /
TA 高田正法 B10 CPUを作る   実験の前に TA 高田正法
Oracle XEを使ってみよう 初音玲.
UNIX演習 情報ネットワーク特論.
JXTA Shell (2) P2P特論 (ソフトウェア特論) 第5回 /
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
B演習(言語処理系演習)第2回 田浦.
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
Created by L. Whittingham
Global standard programming with GNU Autotools
卒業論文に向けて(3) 学部4年生 島本 大輔 2004年11月11日.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
1.2 言語処理の諸観点 (1)言語処理の利用分野
ポートスキャン実習 2002年9月19日 修士1年 兼子 譲 牧之内研究室「インターネット実習」Webページ
Presentation transcript:

クロスコンパイル環境 Scratchbox2 体験記 京都マイクロコンピュータ 小林 哲之 1

はじめに 2007 年 4 月のジャンボリー #14 の「 Emdebian 体 験記」で Scratchbox が紹介されました。 それで興味を持って Scratchbox を試してみまし た。  これはすごい!便利! でも・・・ そんな体験記です。 2

目次 Scratchbox とは Scratchbox1 のしくみ Scratchbox1 の問題点 Scratchbox2 Scratchbox2 のしくみ Scratchbox2 の利点 Scratchbox2 の欠点 Scratchbox2 を実際に使ってみる 3

Scratchbox とは 最近の多くのオープンソースプロジェクトは $./configure $ make でターゲット環境を自動認識してビルドできる ようになっているが、これはビルドのホストと ターゲットが同一であることが前提になってい るので、クロスコンパイルではうまくいかない 。 Scratchbox はクロスコンパイルでこれを実現す るもの。 4

Scratchbox1 のしくみ chroot を利用してホストとは独立した仮想のル ートファイルシステムを作り出す。 ( サンドボ ックス )‏ Linux カーネルの binfmt_misc の仕組みを利用し て ARM のバイナリを qemu または sbrsh 上で動作 させる。 コンパイラ、アセンブラ、リンカなどはクロス ツールが動作するようにラッパーを設定する。 5

Scratchbox1 の問題点 準備されたものをそのまま使うなら問題ないが 、自分のプロジェクトの環境と整合させるのは 苦労を要する。  NOKIA の maemo プロジェクト用につくられたもの なので暗黙の前提がいろいろある。  ビルドに必要なツールは全てサンドボックス内に持 ち込む必要がある。 6

Scratchbox2 Scratchbox と同等の環境を全く別のシンプルな しくみで実現している。 scratchbox.org でなく freedesktop.org でホステ ィングされている。汎用性が高まった。 7

Scratchbox2 のしくみ ダイナミックリンクの LD_PRELOAD, dlsym(RTLD_NEXT,...) のしくみを使って、フ ァイル関連のシステムコールをフックしてファ イルのパス名のマッピングを行う。 マッピングのルールは lua というスクリプト言 語で記述できる。 exec のシステムコールもフックしてターゲット のバイナリは qemu または sbrsh 上で実行させる 。 8

Scratchbox2 の利点 現在使用しているクロスコンパイラを変更なし で利用できる。 どのディレクトリをどうマッピングさせるかを 柔軟に記述することができる。 コンパクト。シンプル。 コマンドもほとんどがシェルスクリプトなので カスタマイズが容易。 9

Scratchbox2 の欠点 まだ完成していない。  バージョン番号が 2.00 でなく 1.99 ドキュメントが不十分。 まだ枯れていないというだけ。 10

Scratchbox2 を実際に使ってみる 11

インストール からソースアーカイブをダウンロードして展開 する。 (sbox tar.bz2)‏ $ cd sbox2 $./configure --prefix=$HOME/scratchbox $ sudo make install 12

QEMU のインストール QEMU は -drop-ld-preload のオプションを受け 付ける新しいバージョンのものが必要。 からソースアーカイブをダウンロード。 (qemu tar.gz)‏ QEMU のコンパイルには gcc-4.x ではだめで gcc- 3.x が必要。 scratchbox2 で必要なのはユーザーモードのエ ミュレータだけなので、不必要なものは disable にして config する。 13

QEMU のインストール ( 続 )‏ $./configure --disable-system --disable- sdl --target-list=arm-linux-user -- disable-kqemu $ sudo make install 14

$ /usr/local/bin/qemu-arm -h qemu-arm version 0.9.1, Copyright (c) Fabrice Bellard usage: qemu-arm [options] program [arguments...] Linux CPU emulator (compiled for arm emulation)‏ Standard options: -h print this help -g port wait gdb connection to port -L path set the elf interpreter prefix (default=/usr/gnemul/qemu-arm)‏ -s size set the stack size in bytes (default=524288)‏ -cpu model select CPU (-cpu ? for list)‏ -drop-ld-preload drop LD_PRELOAD for target process Debug options: -d options activate log (logfile=/tmp/qemu.log)‏ -p pagesize set the host page size to 'pagesize' -strace log system calls Environment variables: QEMU_STRACE Print system calls and arguments similar to the 'strace' program. Enable by setting to any value. $ オプション -drop-ld-preload がサポートされていることを確認。 15

ターゲットのセットアップ PATH に追加。 ターゲットのルートファイルシステムを展開して、そこに cd してから sb2-init コマンドを使用する。 $ export PATH=$PATH:$HOME/scratchbox/bin $ sb2-init -h sb2-init - initialize a target root for scratchbox2 Usage: sb2-init [OPTION]... [TARGETNAME] [COMPILER] sb2-init is expected to be run in the directory you want to use as scratchbox 2 target root. TARGETNAME is what you want to call this target COMPILER is of the form /home/koba/arm-2006q3/bin/arm-linux-gcc Options: -c "command" specify cpu transparency command, for example: "qemu-arm", "sbrsh" or "qemu-arm -m 512" -r [hostname] generate sbrsh config using remote device address -l [hostname] NFS server/localhost address seen by remote device -d set target as default scratchbox2 target -m [mapping_mode] use mapping_mode as default -h print this help -n don't build libtool for the target -s skip checks for target root's /usr/include etc. -t [tools_dir] set directory containing the build tools distribution -C "options" add extra options for the compiler, for example: "-fgnu89-inline" -v display version Examples: sb2-init ARM arm-linux-gcc sb2-init -m maemo ARM arm-linux-gcc sb2-init -sn -c sbrsh armel-debian /path/to/arm-linux-gcc 16

ターゲットのセットアップ(続) sb2-init コマンドでの重要ポイントは -c を省略せず、必ずフルパスで指定すること。 例 $ cd ~/kzm/root $ sb2-init -c "/usr/local/bin/qemu-arm -cpu arm1136" my_target /opt/kmc/.../bin/arm-linux-gcc ターゲットのルートファイルシステム 17

クロスコンパイルの実行 Ruby をビルドしてみる。 作業ディレクトリは /home/user の下がよい。 ここはデフォルトのマッピングの設定でターゲットにマッピングさ れるようになっている。もし他のディレクトリを使う場合には $HOME/scratchbox/share/scratchbox2/lua_scripts/pathmaps/simple の 00_deault.lua にそのディレクトリのマッピング設定を追加する。 18

sb2 -t my_target [SB2 my_target] ~/kzm/root $ cd /home/user [SB2 my_target] /home/user $ mkdir ruby [SB2 my_target] /home/user $ cd ruby [SB2 my_target] /home/user/ruby $ tar xf ~/archives/ruby p114.tar.bz2 [SB2 my_target] /home/user/ruby $ mkdir obj [SB2 my_target] /home/user/ruby $ cd obj [SB2 my_target] /home/user/ruby/obj $../ruby p114/configure checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-linux-gnu checking target system type... arm-unknown-linux-gnu checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no... checking whether ELF binaries are produced... yes checking whether OS depend dynamic link works... yes checking for nroff... /usr/bin/nroff creating config.h configure: creating./config.status config.status: creating Makefile [SB2 my_target] /home/user/ruby/obj $ ls Makefile config.h config.log config.status configure は成功し、 Makefile と config.h が生成された。 今回使用している環境は uClibc なので makefile を一箇所手で修正する必要があった。 (CFLAGS に -D__dietlibc__=1 を追加。 )‏ 19

[SB2 my_target] /home/user/ruby/obj $ time make >& errlog real 0m53.452s user 0m38.490s sys 0m14.110s [SB2 my_target3] /home/user/ruby/obj $ file./ruby./ruby: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped [SB2 my_target3] /home/user/ruby/obj $ make test test succeeded -cpuarm1136[SB2 my_target3] /home/user/ruby/obj $ make は成功し、 ruby の実行ファイルができた。これは ARM のバイナリ。 make test も成功。 参考までに同じマシンでネイティブ向けに ruby を make した時の所要時間 real 0m34.264s user 0m25.870s sys 0m6.600s 20

まとめと感想 Scratchbox2 はまだ荒削りな部分が見られるも のの、なんとか動かしてみることはできた。 自分のプロジェクトに利用するならば Scratchbox1 よりも Scratchbox2 の方が融通が利 く。 Scratchbox2 ではクロスコンパイラと QEMU さ え対応できたら ARM 以外の他のアーキテクチャ でも使えるだろう。 クロスコンパイルをする開発者にとってぜひと も会得しておきたいツール。 21