今日は、ARM用Linuxカーネルのクロスコンパイル環境をGentoo Linux上に構築してみようと思います。
以前ARM用アプリケーションバイナリを作成しQEMUでエミュレーション実行する手順を書きましたが、このときは日本語で見つかった情報でちゃちゃっとすませちゃった感があるので、今回は本家のドキュメントを参照しながらちゃんと進めていこうと思います。。
1. crossdevのインストール
Gentoo Linux上にクロスコンパイル環境を構築するのを支援してくれるツール、crossdevをインストールします。
# emerge crossdev
2. ARMクロスコンパイラのインストール
crossdevを使用して、ARMクロスコンパイラをインストールします。
まず/usr/local/portageというディレクトリを作り、/etc/make.confに以下の行を追記します。
PORTDIR_OVERLAY="/usr/local/portage"
そしてcrossdevを次のように実行します。
# crossdev --ex-gdb --stable --target arm-unknown-linux-gnu
これでクロスコンパイラのインストールは完了です。
3. Linuxカーネルのクロスコンパイル
今回はカーネルモジュールのインストールについては考慮しません。また、カーネルソースは一般ユーザのホームディレクトリ下に展開するものとします。
まず、展開したソースの直下にクロスコンパイル用の以下のような内容のシェルスクリプトを作り、xkmakeという名前で保存します。
#!/bin/sh
exec make ARCH="arm" CROSS_COMPILE="arm-unknown-linux-gnu-" "$@"
xkmakeに実行権限を与えます。
% chmod u+x xkmake
あとはxkmakeを使って、x86と同じように下記のようにカーネルをコンパイルすることができます。
% ./xkmake menuconfig
% ./xkmake
---
ARMターゲットのコンフィギュレーションはさっぱり分からないので、この環境を利用してぼちぼち調べてみようかと思います。。
2010/04/20
2010/04/15
CGDB
以前GDBを使うときはEmacsと組み合わせて使っていたのですが、最近はVimを常用していることもあってviっぽい操作でソースも見ながらデバッグしたいなと思っていたところ、「実践 デバッギング技法」(オライリー刊)にCGDBというのがちょろっと紹介されていたのを思い出して調べてみました。
日本語の資料はほとんどないっぽいようなので、頑張って本家ページの英語ドキュメントを見ながら使い方を調べていこうと思います。。
まず、~/.cgdb/cgdbrcが設定ファイルなので、「4 CGDB configuration commands」を見て必要そうなのを記入しました。
ざっとこんな感じです。
set cgdbmodekey=<C-K>
map r :run
map c :continue
map f :finish
map n :next
map s :step
map q :quit
CGDBを起動すると上にソースコード、下にGDBインターフェイスが表示され、ソースコード枠にフォーカスしているときを "CGDBモード"、GDBインターフェイスにフォーカスしているときを "GDBモード" というようです。
で、CGDBモードに移るときのキーをcgdbmodekeyの値を変えることで設定できるようになっているので、1行目記述でCtrl-Kを割り当てています。(デフォルトはEscなんですが、ちょっと押すのがだるいので。。)
また、mapコマンドでCGDBモードのキー、imapコマンドでGDBモードのキーをコマンドに割り付けられるようになっているので、残りの記述でCGDBモードのときデバッグで多用するコマンドをキーに割り付けています。
とまあ、こんな風に.vimrcと似たような感じで設定をいじれるようになっており、準備はこれで完了です。w
あとはGDBを使うときと同じように、シェルから
cgdb <実行ファイル>
と打てばデバッグが開始できます。
開始直後はGDBモードなので、Ctrl-K (設定を変えてない場合はEsc) を押すとソースコード枠にフォーカスが移りCGDBモードになります。基本的にViっぽい操作で表示場所を移動することができ(kで上に移動とか)、スペースキーでブレークポイントをはることができます。
CGDBモードでできないことをやりたくなったら、iを押してGDBモードに戻ります。
このようにエディタにVimとか使ってて、かつGDBに慣れてる人にとってはなかなか快適なデバッガだと思いました。w
日本語の資料はほとんどないっぽいようなので、頑張って本家ページの英語ドキュメントを見ながら使い方を調べていこうと思います。。
まず、~/.cgdb/cgdbrcが設定ファイルなので、「4 CGDB configuration commands」を見て必要そうなのを記入しました。
ざっとこんな感じです。
set cgdbmodekey=<C-K>
map r :run
map c :continue
map f :finish
map n :next
map s :step
map q :quit
CGDBを起動すると上にソースコード、下にGDBインターフェイスが表示され、ソースコード枠にフォーカスしているときを "CGDBモード"、GDBインターフェイスにフォーカスしているときを "GDBモード" というようです。
で、CGDBモードに移るときのキーをcgdbmodekeyの値を変えることで設定できるようになっているので、1行目記述でCtrl-Kを割り当てています。(デフォルトはEscなんですが、ちょっと押すのがだるいので。。)
また、mapコマンドでCGDBモードのキー、imapコマンドでGDBモードのキーをコマンドに割り付けられるようになっているので、残りの記述でCGDBモードのときデバッグで多用するコマンドをキーに割り付けています。
とまあ、こんな風に.vimrcと似たような感じで設定をいじれるようになっており、準備はこれで完了です。w
あとはGDBを使うときと同じように、シェルから
cgdb <実行ファイル>
と打てばデバッグが開始できます。
開始直後はGDBモードなので、Ctrl-K (設定を変えてない場合はEsc) を押すとソースコード枠にフォーカスが移りCGDBモードになります。基本的にViっぽい操作で表示場所を移動することができ(kで上に移動とか)、スペースキーでブレークポイントをはることができます。
CGDBモードでできないことをやりたくなったら、iを押してGDBモードに戻ります。
このようにエディタにVimとか使ってて、かつGDBに慣れてる人にとってはなかなか快適なデバッガだと思いました。w
2010/04/09
Linuxカーネルの開発を追おうとしてみる
おもむろにLinuxカーネルの開発を追いかけてみようと思い立ちました。。w
以下は、2.6系ツリーをローカルにクローンする手順の覚書です。
以下は、2.6系ツリーをローカルにクローンする手順の覚書です。
- 現在Linuxはgitという分散型バージョン管理システムでバージョン管理されているので、まずgitをインストール。自分はGentooを使っているので、 emerge git 。
- クローンを作るディレクトリに移動し、次のコマンドを打つ。git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
これでカレントディレクトリの下にlinux-2.6ができます。
自宅で作ったものの管理は最近Mercurialを使っているのですが、Linuxカーネル開発を追っかけながらgitの使い方もちょこちょこ調べていこうと思います。。
2010/03/22
マイレージ、マイライフ
昨日、久しぶりに洋画を映画館で見ました。(ロード・オブ・ザ・リング以来かな。。)
テレビ番組での紹介を見ただけで特によく調べずに見に行くという、かなり思いつきな行動でしたがかなり楽しめました。w
不況、ネット社会、家族に縛られない人生といった現代社会の有様がとてもうまく描かれており、自分の生き方についていろいろと考えさせられましたね。。
テレビ番組での紹介を見ただけで特によく調べずに見に行くという、かなり思いつきな行動でしたがかなり楽しめました。w
不況、ネット社会、家族に縛られない人生といった現代社会の有様がとてもうまく描かれており、自分の生き方についていろいろと考えさせられましたね。。
2010/03/03
coltrane's sound
大学時代、友達に貸すためにサークル部屋の連絡箱に入れた後で行方不明になってしまったという、やや苦い記憶のあるJohn Coltraneの「coltrane's sound」のことを横浜に用事で出たときにふと思い出し、そのままHMVで再度購入しましたw
「The Night Has a Thousand Eyes」、「Body and Soul」など名曲が収録されたこの作品ですが、数年ぶりに聞いて改めてその素晴らしさに感動しました。。
「The Night Has a Thousand Eyes」、「Body and Soul」など名曲が収録されたこの作品ですが、数年ぶりに聞いて改めてその素晴らしさに感動しました。。
2010/02/26
ARMソフトのエミュレーション環境構築
最近は組込みの仕事をしているとARMをターゲットとした開発をする機会が多いと
思いますが、家で勉強したくてもボード等を用意して環境が整えるのはなかなか
難しいですね。。
と言うわけで、私はこの前VirtualBoxにインストールしたGentoo Linux上にクロス
コンパイル & エミュレーション環境を作って勉強することにしましたw
以下、構築手順の覚書です。
1 CPUエミュレータ QEMUのインストール
シェルからemerge qemu、と打ってQEMUをインストールします。
安定版の0.9.1はgcc version 4ではコンパイルできず面倒なのでマスクをはずして
0.11.1をインストールしてしまいました。
2 クロスコンパイル環境の構築
まず、crossdevをインストールします。
emerge crossdev
次に/opt/crossdevというディレクトリを作成し、/etc/make.confに下記の行を
追記します。
PORTDIR_OVERLAY="/opt/crossdev"
最後に下記のコマンドを叩いてしばし待ちます・・・。
crossdev --ex-gdb -t arm-gentoo-linux-gnueabi
思いますが、家で勉強したくてもボード等を用意して環境が整えるのはなかなか
難しいですね。。
と言うわけで、私はこの前VirtualBoxにインストールしたGentoo Linux上にクロス
コンパイル & エミュレーション環境を作って勉強することにしましたw
以下、構築手順の覚書です。
1 CPUエミュレータ QEMUのインストール
シェルからemerge qemu、と打ってQEMUをインストールします。
安定版の0.9.1はgcc version 4ではコンパイルできず面倒なのでマスクをはずして
0.11.1をインストールしてしまいました。
2 クロスコンパイル環境の構築
まず、crossdevをインストールします。
emerge crossdev
次に/opt/crossdevというディレクトリを作成し、/etc/make.confに下記の行を
追記します。
PORTDIR_OVERLAY="/opt/crossdev"
最後に下記のコマンドを叩いてしばし待ちます・・・。
crossdev --ex-gdb -t arm-gentoo-linux-gnueabi
3 ARM用バイナリの作成
定番のHello, worldプログラムを用意し、下記のコマンドでコンパイルします。
arm-gentoo-linux-gnueabi-gcc -Wall -g test.c
4 デバッグしてみる
QEMUのユーザーモードエミュレーション機能を使って、プログラムを実行します。
qemu-arm -g 1234 -L /usr/arm-gentoo-linux-gnueabi a.out
このように-gオプションをつけるとGDBの接続を待つことができます。
次にGDBを起動します。
arm-gentoo-linux-gnueabi-gdb a.out
そしてGDB上から以下のように打ちます。
(gdb) target remote localhost:1234
これで無事接続できれば、GDBによるデバッグが可能になります。
2010/02/20
Gentoo Linux on VirtualBox作成日記 その3
前回から非常に期間があいてしまいましたが・・・。
今日はX Serverのインストールです。
基本的には本家のドキュメントに沿っていけばいけましたが、現在はHALの使用が推奨されているのでUSEフラグにhalとpolicykitを追加するのを忘れないようにしないといけませんね。
またこちらのWikiに従い、/etc/make.confに下記の記述をしました。
INPUT_DEVICES="evdev virtualbox"
VIDEO_CARDS="virtualbox"
これでvirtualbox用のドライバが入ります。
emerge xorg-server
と打ち込んで数時間待てばインストール完了です。
設定等もドキュメントに従って進めれば特に詰まるところはなかったと思います。
twmとxtermを別途インストールして動作確認がすんだら、あとは好みのWindow Managerをインストールしてひとまず完了です。
私は現在awesomeを使用しています。
やや癖がありますが、慣れてしまえばluaでいろいろカスタマイズできるのでなかなか面白いです。w
気が向けば、、その辺の設定とかも書いてみようかと思います。
今日はX Serverのインストールです。
基本的には本家のドキュメントに沿っていけばいけましたが、現在はHALの使用が推奨されているのでUSEフラグにhalとpolicykitを追加するのを忘れないようにしないといけませんね。
またこちらのWikiに従い、/etc/make.confに下記の記述をしました。
INPUT_DEVICES="evdev virtualbox"
VIDEO_CARDS="virtualbox"
これでvirtualbox用のドライバが入ります。
emerge xorg-server
と打ち込んで数時間待てばインストール完了です。
設定等もドキュメントに従って進めれば特に詰まるところはなかったと思います。
twmとxtermを別途インストールして動作確認がすんだら、あとは好みのWindow Managerをインストールしてひとまず完了です。
私は現在awesomeを使用しています。
やや癖がありますが、慣れてしまえばluaでいろいろカスタマイズできるのでなかなか面白いです。w
気が向けば、、その辺の設定とかも書いてみようかと思います。
登録:
投稿 (Atom)