2014年11月15日土曜日

Buffalo WZR-600DHP2のdd-wrt化 その2

WZR-600DHP2を触る機会があったので、dd-wrtを導入してみた(のつづき)

前回はdd-wrtのインストールまでを行った。
今回は、簡単なプログラムを実行させてみた。

クロスコンパイルをやってみる。

1.準備

ツールチェーンを入手
http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

ツールチェーンはいろいろ種類があるみたいだけど、
 有名どころを使った。まずは動くことが大事。

2.スタティックリンクで生成してみる

いきなり難しいことはできないので、
スタティックリンクでやってみる
hello.c

#include <stdio.h>
int main(void)
{
 printf("Hello Wold\n");
 return 0;
}

いざコンパイル!!
arm-none-linux-gnueabi-gcc hello.c -static -o hello.exe

出来上がったhello.exeを600DHP2に転送して試してみる。

できた!

3.ダイナミックリンクで生成してみる

スタティックだけではつまらないので、ダイナミックリンクでもやってみる。
 
そのためには、ライブラリを保存できる環境が欲しい。
前回、SDカードが/jffsに自動マウントされるようにしたので、その領域を使う。

共有ライブラリの 保存先libを自由に変更できるようにするために、
SDカードに一式を保存して、それをメイン(/lib)として利用するようにする。

まずは、
/jffs内にclone/libを作成して、現在のlibの中身を全部コピー!!
ついでにclone/bin も作成して、全部コピー!!

そして、ツールチェーンの共有ライブラリもコピーする
CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/arm-none-linux-gnueabi/libc/armv4t/lib
これで、下ごしらえはできた。

dd-wrtの「管理」から 「コマンド実行」を選択し、
起動スクリプトを作成する。
内容としては、
#!/bin/sh
sleep 20
if [ -f /jffs/optware.enable ]; then
mount -o bind /jffs/clone/lib /lib
mount -o bind /jffs/clone/bin /bin
else
exit
fi

があれば大丈夫。
20秒待つのはおまじない。。
 マウントしたSDカードが意図しているものかの簡易的なチェックのために、
/jffs/にoptware.enableをという空のファイルを作っておく。
このファイルがある場合にSDカードのlibとbinを使用するしくみ。

 一度再起動して、下準備完了。

 早速、ダイナミックリンクで生成してみる。

arm-none-linux-gnueabi-gcc hello.c -o hello_d.exe

どや!

次は定番プログラムの実行に挑戦

0 件のコメント:

コメントを投稿