Hatena::ブログ(Diary)

sdkt4aの日記 このページをアンテナに追加 RSSフィード

2008-08-14

OpenWrtのクロスコンパイル環境をDebianに構築してhello,worldするよ!

 前回の「FONにOpenWrtを入れよう!」で、FONをOpwnWrt化しました。

 今回は、FON上で自作のプログラムを動かす為の開発環境を構築したいと思います。

 開発環境を構築といっても、FONのメモリは少ないので、gccとかつかってFON上でコンパイルするのは無謀です。FONのGPIO(汎用I/Oのピン)にSDカードを接続して、SDストレージ作ればセルフコンパイル環境を構築する事はできると思いますが、GPIOは他の事に使いたいので、今回はパスです。

 というわけで、フツーのDebianにクロスコンパイル環境を構築します。

 クロスコンパイル環境の構築には、subversionとかgccとかmakeとかautoconfとかとかいろいろ必要なので、エラーが出たらログを見てその都度、apt-get installなりすることにします(笑

 詳しいやり方は、OpenWrtのサイトにあります。

 

 適当な作業ディレクトリ作ってそこにOpenWrtのソースコードを持ってきます。後々にカーネルモジュールを作る予定なので、カーネルのバージョンとかを気にして、今回はkamikaze7.09を持ってきました。最新版だったら、 https://svn.openwrt.org/openwrt/trunkとかから持ってきます。

sdkt@debian:~$ mkdir openwrt
sdkt@debian:~$ cd openwrt
sdkt@debian:~/openwrt$ svn checkout https://svn.openwrt.org/openwrt/tags/kamikaze_7.09 kamikaze

 落としてきたディレクトリに移動してmake menuconfigです。開発に必要なものがチェックされるので、エラーが出たら入れましょう。

sdkt@debian:~/openwrt$ cd kamikaze
sdkt@debian:~/openwrt/kamikaze$ make menuconfig 
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... ok.
Checking 'zlib'... ok.
Checking 'gawk'... ok.
Checking 'bison'... ok.
Checking 'flex'... ok.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'patch'... ok.
Checking 'perl'... ok.
Checking 'python'... ok.
Checking 'wget'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'autoconf'... ok.
Checking 'gnu-find'... ok.
Checking 'non-root'... ok.

 チェックが完了するとメニュー画面が現れます。Target Systemは、FONなのでAtheros [2.6]を選択します。

f:id:sdkt4a:20080814025426j:image

 次に、OpenWrt Configurationでは、Build the OpenWrt SDKを選択してExitします。

f:id:sdkt4a:20080814025427j:image

 あとは、適当にmakeしたら終わりです。V=99つけておくと、詳しいログが見れるので、どこでエラーなのかわかります。

sdkt@debian:~/openwrt/kamikaze$ make V=99

 ってことで、無事クロスコンパイル環境が出来たことにします。

 開発環境構築記念としてhello,world!いってみよー。

 適当に作業ディレクトリ作って簡単なソースを書きます。

sdkt@debian:~/openwrt/kamikaze$ mkdir test
sdkt@debian:~/openwrt/kamikaze$ cd test/
sdkt@debian:~/openwrt/kamikaze/test$ vi test.c

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     printf("hello,world!");
  6     return 0;
  7 }

 コンパイルします。gccって打っちゃだめです。フツーのgccが起動しちゃいます。

sdkt@debian:~/openwrt/kamikaze/test$ ../staging_dir_mips/bin/mips-linux-gcc -o test.o test.c 
sdkt@debian:~/openwrt/kamikaze/test$ ll
合計 20
drwxr-xr-x  2 sdkt sdkt 4096 2008-08-14 04:08 .
drwxr-xr-x 19 sdkt sdkt 4096 2008-08-14 03:47 ..

			
  • rw-r--r-- 1 sdkt sdkt 73 2008-08-14 03:49 test.c
  • rwxr-xr-x 1 sdkt sdkt 5665 2008-08-14 04:08 test.o

 HTTP経由でFONに送ります。ApacheのDocumentRootにtest.oをコピーしておきます。

sdkt@debian:~/openwrt/kamikaze/test$ cp test.o /var/www/

 FONからwgetでtest.oを持ってきます。

root@OpenWrt:~# wget http://10.10.10.1/test.o
Connecting to 10.10.10.1 [10.10.10.1:80]
test.o               100% |**************************************************************************|  5665    --:--:-- ETA
root@OpenWrt:~# ls -al
drwxrwxrwt    9 root     root          260 Jan  1 00:14 .
drwxr-xr-x    6 root     root            0 Jan  1  1970 ..

			

 実行フラグ立ててから./test.oです。

root@OpenWrt:~# chmod +x test.o 
root@OpenWrt:~# ./test.o 
hello,world!

 こんな感じで、DebianにOpenWrtのクロスコンパイル環境を構築して、それをFONに入れて、コンニチワって事が出来ました。

 やっぱり、makefile書いてmakeしてガガット開発したいので、今度はそれに挑戦ようと思います。

 FONのGPIOガリガリするディバイスドライバ書いてUARTでごにょごにょしたいなぁ。

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道青木 峰郎

ソフトバンククリエイティブ 2005-07-27
売り上げランキング : 26895

おすすめ平均 star
starLinuxを学ぶ為の読本、Cプログラムミングを学ぶなら別の本で
star基礎を学ぶには良い書籍だと思います
star入門書としては良い

Amazonで詳しく見る
by G-Tools

tt 2008/11/11 15:29 $ make kernel_menuconfig
でカーネルの細かいチューニングができます。
tftpでカーネルを読み込んで,nfsrootでrootをマウントすればディスク容量に制限がなくなるので,いろいろ遊べるかもしれません。わざわざSDメモリをハンダ付けする必要がなくなります。
(/etc/preinitと/etc/rc.d/S10bootを少しいじる必要はありましたが。)

sdkt4asdkt4a 2008/11/11 19:12 tさんコメントありがとうございます。
ディスクレスブートの記事はどこかで読んだことがあります。
GPIOにSDカードをつなげてしまうと、外部機器の制御がシリアルポート経由しか出来なくなるので、NFSでマウントするのが必要になってくるかもしれません。

ネットワークに繋がってない小さなLinuxマシンとして使う際はSDカードがないとやっぱり容量が足りません。
車のシガーソケットから電源を取り、GPSを繋いで、GPSローガーをやったり、wi-fiのアクセスポイント収集したりなど・・・。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証


Connection: close