ラベル dd-wrt の投稿を表示しています。 すべての投稿を表示
ラベル dd-wrt の投稿を表示しています。 すべての投稿を表示

2016年6月10日金曜日

やっと動くものになった(Amis)

今年に入ってから少しずつやっているAmis(http://continue-to-challenge.blogspot.jp/2016/02/amis.html)がようやく動くものになった。
いろいろ初めて/久しぶりのこともあり、随分と時間がかかってしまった。
でも
・基板切削 これ とか これ
・ARM向けのプログラム これ これ
・Linuxでのシリアル通信
・DD-wrtでphpを使う
・node.jsでGmailの送受信 これ
・LinuxでFIFO これ
・CSSフレームワークを使う
といろいろなことをやったものだ。

その他にもgitを使うようになったり、そのためにgogsインストールしたりと
随分開発環境も変化した。

 構成図

画面


しばらくエージングしてみよう。
センサーの変化でメールが来たり、WEBからハードが制御できるのは面白いね。

つづく

2016年4月3日日曜日

AmisとCGIとの接続(名前付きパイプFIFO)

概要
webからの操作で、AmisボードのLEDを操作する準備として
Amisボードと通信するプログラムと、webでユーザー操作を受け持つcgiとの接続を検討した。

構成
dd-Wrt上のLighttpd(Port81)を使ってwebサーバーを立ち上げる
仮にAmiscommServer.cgi とする
Amisボードとの通信プログラムをAmis-Commとする

考え方は以下とか本を参考にした。
http://www.ncad.co.jp/~komata/c-kouza12.htm
C言語による実践Linuxシステムプログラミング

web側はまだ作成中

CSSフレームワークを使うとなんとなくそれっぽくできるから良いね。
foundation.js を使った。



2016年3月21日月曜日

AmisをARMボード(dd-wrtルーター)に移植できた

ようやく思い通りの動作になった。

原因は、気づけば大したことがないのだが、シリアル通信設定が間違っていた。

 stty -F /dev/ttyACM0 -a
speed 9600 baud;stty: /dev/ttyACM0
 line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -tostop -echoprt echoctl
echoke

これを修正して
 stty -F /dev/ttyACM0 -echo
実行してみると、問題なく動作した。
なので、プログラムを修正Orz.
newtio.c_lflag = ~ECHO;
これで目的の動作になった。

 その他
ドライバのクロスコンパイルのやり方らしきものを見つけた。
気になる。
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=70462

2016年3月20日日曜日

AmisをARMボード(dd-wrtルーター)に移植中

連休だけど、なかなか時間がとれない…。

ついにAmisをクロスコンパイルしてARMボードに移植しようと思う。

準備
以前にできたと思っていたOpenWrtのツールチェインではうまく行かなかった。
原因究明する気力もなくなったので、debianのEmdebian-toolを使うことにした。

http://continue-to-challenge.blogspot.jp/2016/01/arm.html

動的リンクができない。なんでかなー。LD_LIBRARY_PATHにLIBを指定してもだめ。
仕方がないので、とりあえずは静的リンクでやってみることにした。

debianにeclipseを入れて開発環境ごと移動した。不本意だが仕方ない。

eclipseでクロスコンパイルかつ静的リンク で生成する方法
忘れそうなので、メモ
(1)プロジェクトの設定で、CrossGCCを選択する
(2)CrossSettingのPrefixに「arm-linux-gnueabi-」を入力する
(3)Cross G++ LinkerのAll optionsに「static」を入力する



いざコンパイル
びっくりするくらいに何も問題なく成功したが、
実行してみると問題発生Orz
 シリアル通信がおかしい。PICマイコン側からErr応答しかされない。

なんでかなー。もう少しだと思ったのに。

その他
 なぜか、水曜日のカンパネラが頭から離れない。洗脳ソングですな。



2016年2月28日日曜日

見通しが立った(Amis)

今年に入ってから少しずつ試作進めてきたものが見通しが立ってきた。
他の人が手垢がつくほどやり尽くされているけど、
自分でやってみたかった。

概要
扉センサーや人感センサー、明るさ、温度・湿度センサーを監視して、
異常な場合にはメールで通知するというもの。それだけ。
汎用出力があるので、光や音で知らることもできる。
赤外線出力もつけるので、家に帰る前にエアコンつけたり、
長期不在時に在宅を装うこともできるはず。
一体に何に怯えているんだろうか・・・。
名付けてAmis(エイミス)フランス語で「ともだち」 。ぜんぜん関係ないね。

構成
ArduinoとかRaspberryPiとか使えば簡単なのはわかっている。
だがしかし、あえて、この構成にしたかったのだ。なんとなく。

[センサー類]-I2cなど-[PICマイコン]  -USB(CDC)-[linux(1)]-[linux(2)]

・センサー類
  ディジタル入力×5
  ディジタル出力×3
  明るさセンサー これはCdsの値をPICのADで読む
  温度・湿度センサー(HDC1000というやつ)秋月電子で売っていた I2C接続
http://www.tij.co.jp/product/jp/HDC1000
  赤外線出力

・PICマイコン
  PIC18F2455 余っていたので
  microchipのcdcサンプルを参考にした

・Linux(1)
  最寄りのルーター dd-wrtが入っている。リビングにある。
  これにUSB経由でPICマイコンを接続するもの。
  
・Linux(2)
  メール通知用 mageiaが入っている。
  ONUの近くにある。

進捗
 ・センサー類
   赤外線出力がまだ
   その他は、だいたいOK

 ・PICマイコン 
   ファームはだいたいOK
   基板起こす? 悩み中。

 ・Linux(1)
   PICとの通信プログラムは、開発環境ではOK
   あとはARMに移植できるか・・・!?

 ・Linux(2)
   メール通知するだけなので、ほぼOK
   ssmtpを使用

その他
  花粉がすごい。体がだるい。でも頑張るぞ!

2016年1月24日日曜日

なんとも・・・

数週間悩んでいたことが、ふとした瞬間に解決することがあるもんだ。

その1
PICマイコンのUSB(CDCサンプル)をdd-wrtで使いたいと思っていた
ddwrtの再ビルドも覚悟して、開発環境を構築するべく挑戦したが、なかなか思うようにならなかった。
でも、今日、何の気なしにPICマイコンのベンダーIDを試しにFTDIに変えてみたら
案の定動かなかったが、ようやく気付いた。PICマイコンのUSB(CDC)はftdi_sioじゃなくて、
cdc-acmだった。Orz
insmod cdc-acm
で一撃でした。 この2~3週間はなんだったんだ。。。
よく考えてから行動しようね。

その2
久しぶり同郷の親友にあった。現状や悩み事やなど話していたらあっという間に時間が過ぎていく。なんか解放されたような気分になった。良い刺激を受けた。まずは孫子を読んでみよう。

その3
ここ数年間ずっと悩んでいたこと。希望の光が見えてきた。
頑張ってくれ!!

おしまい。

2016年1月16日土曜日

ARMクロスコンパイル開発環境2

迷走の記録2

先週に引き続き開発環境の構築ためにあくせく、、、

この手順通りに、やってみたところ、それらしいことができた!
https://wiki.openwrt.org/jp/doc/howto/buildroot.exigence#downloading_sources

例えば、コンパイルは
./staging_dir/toolchain-arm_cortex-a9_gcc-5.2.0_musl-1.1.11_eabi/bin/arm-openwrt-linux-gcc test1.c -static -o test1_arm_static.exe
のような感じで。

メモし忘れていたけど、
仮想環境だと、失敗してもやり直せるので気楽でいいね
やりたい事はdd-wrtを導入したルーターでUSB-シリアル変換を使いたいのだけど、
それがPICだったりするので、ベンダーIDが登録されていなく、そのままでは使えない。
modprobeがあれば何とかなるのだろうけど、あいにくそれは無かった。
最悪は、PICに書き込むベンダーIDを登録されいるものに書き換えてしまう手段もあるけど、
なんかちょっと反則感があるので、ドライバを修正したい というもの。。

明日やってみようかな

2016年1月12日火曜日

ARMクロスコンパイル開発環境

以下、迷走の記録。

以前、ARMのクロスコンパイル環境を導入したのだけど、
PCの再インストールを行って、一切の環境が消えてしまった。
http://continue-to-challenge.blogspot.jp/2014/11/buffalo-wzr-600dhp2dd-wrt_15.html

もう一度、ツールチェーンを入手しようと思ったら、
30日限定の評価版しかなかった。
・Sourcery CodeBench Lite Edition
https://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

コンパイルとか面倒なので、ビルド済みのやつは無いかと思い探してみると

・Linaro
http://www.linaro.org/downloads/
https://wiki.linaro.org/WorkingGroups/ToolChain

これをまず、試してみた。
Linuxの32ビット版が見当たらない。取り急ぎ動作確認したいので、
64ビット版で試してみたところ、
Illegal Instruction
となってしまったOrz

並行してコンパイルが必要なもの
(1)dd-wrt
(2)OpenWrt
(3)熱血!アセンブラ入門(http://kozos.jp/books/asm/)
(4)Emdebian-tool

やりたいことは、dd-wrtにてプログラムを実行したく、それ用にコンパイルしたい。
(1)と(2)は↓を参考に構築してみたが、
http://www.plustar.jp/lab/blog/?p=2443
http://miettal.hatenablog.com/entry/20110804/1312406923
まだまだ、実現に至らない。。。

(3)はVM版も公開されており、便利そうだが、未確認

(4)は結構情報が多いので、こちらをやってみた。
Debian8(Jessie)
http://blog.usoinfo.info/article/418379646.html
ほぼ上記リンクの通り。
わざわざVMにDebianをインストールした。。。
とりあえずは、対象となるdd-wrtにて動作可能なバイナリが作成できたので、
これを足掛かりに作業していきたい。

別件だけど、windows10でリモートデスクトップの備忘録
%windir%\system32\mstsc.exe
http://answers.microsoft.com/ja-jp/windows/forum/windows_10-networking/windows-10/46d71756-99a5-4221-b2d8-9c2af624b781?auth=1

忘れがちなので注意、
3連休だったのに、あまり収穫がないね。。。

2015年1月18日日曜日

FON2405E カスタムファーム導入に挑戦!

年明けはいろいろと忙しく、なかなか更新ができなかった。
   
入手したFON2405Eにカスタムファームを導入するべく、いろいろ調査した。

FON2405E
OS  OpenWRT(Linux2.6)
CPU  RT3050 320MHz
Memory  32MB
Flash  2MB

まず、有名な「Hot Tuna Labs 」さんが公開しているカスタムファームを導入してみた。

これは手順どおりでいけた。ただし、bootメニューに入るのが苦労した。
10回挑戦して2回程度の成功率・・・。

このカスタムファームでGPIOを操作してみたかったのだが、
/dev/class/gpioがなくよくわからなかった。
/dev/gpioはあったのだが、
mkmodでなにかやるんか???

仕方がないので、カスタムファームを作成する方法を調査した。
(結果今のところ成功はしていない。。。Orz

 
1.Ralink SDK

Ralin SDK
Ralink_ApSoC_SDK_3600_20110715.tar.bz2
Ralink_ApSoC_SDK_3301.tar.bz2
の2つで試してみる

1-1.Ralink_ApSoC_SDK_3600_20110715.tar.bz2
tar xvjf Ralink_ApSoC_SDK_3600.tar.bz2
cd RT288x_SDK/toolchain/
tar xvjf buildroot-gcc342.tar.bz2
mv buildroot-gcc342 /opt/.
cd mksquash_lzma-3.2/
make

ここまでは、うまく行ったが、
/usr/bin/ld: mksquashfs.o: シンボル 'log10@@GLIBC_2.0' への未定義参照です
/lib/libm.so.6: error adding symbols: DSO missing from command line
collect2: エラー: ld はステータス 1 で終了しました

Makefile-lmが無いことが原因らしい
squashfs3.2-r2/squashfs-tools/Makefile
10行目
LDLIBS += -lz -L${LzmaAlone} -L${LzmaC}
LDLIBS += -lz -lm -L${LzmaAlone} -L${LzmaC}

mkdir /opt/buildroot-gdb
mkdir /opt/buildroot-gdb/bin
make install

つぎに目的のsourceをと思ったが、
source内にMakefileがない。。。困った。

1-2.Ralink_ApSoC_SDK_3301.tar.bz2
3600と同じように
tar xvjf Ralink_ApSoC_SDK_3301.tar.bz2
cd RT288x_SDK/toolchain/
tar xvjf buildroot-gcc342.tar.bz2
mv buildroot-gcc342 /opt/.
cd mksquash_lzma-3.2/
make

そして同じように
/usr/bin/ld: mksquashfs.o: シンボル 'log10@@GLIBC_2.0' への未定義参照です
/lib/libm.so.6: error adding symbols: DSO missing from command line
collect2: エラー: ld はステータス 1 で終了しました
<builtin>: recipe for target 'mksquashfs' failed
make[1]: *** [mksquashfs] Error 1

squashfs3.2-r2/squashfs-tools/Makefile
10行目
LDLIBS += -lz -L${LzmaAlone} -L${LzmaC}
LDLIBS += -lz -lm -L${LzmaAlone} -L${LzmaC}

mkdir /opt/buildroot-gdb
mkdir /opt/buildroot-gdb/bin
make install
これで、buildツールの準備ができたかな。
そして本体。
make V=99
Makefile:319: *** 暗黙ルールと通常ルールが混ざりました. 中止.

Makefile319を書き換え
linux linux%_only:
linux:

リトライ!!
make[3]: Entering directory '/home/adeno/fon/sdk3301/RT288x_SDK/source/user/busybox'
Makefile:1262: *** 暗黙ルールと通常ルールが混ざりました. 中止.

中止!!
再度書き換え
vi user/busybox/Makefile
/ %/: prepare scripts FORCE
/: prepare scripts FORCE

リトライ!!!
make[1]: Entering directory '/home/adeno/fon/sdk3301/RT288x_SDK/source/vendors'
Makefile:28: *** 暗黙ルールと通常ルールが混ざりました. 中止.
vi vendors/Makefile
all image clean romfs romfs.post vendor_%:
all image clean romfs romfs.post:

まだぁ?
make[1]: Entering directory '/home/adeno/fon/sdk3301/RT288x_SDK/source/linux-2.6.21.x'
Makefile:1443: *** 暗黙ルールと通常ルールが混ざりました. 中止.
vi linux-2.6.21.x/Makefile
/ %/: prepare scripts FORCE
/: prepare scripts FORCE

リトライしていくと…。
---
/Ralink/3301/sdk3301/RT288x_SDK/source/vendors/Ralink/RT3052/mkimage: invalid entry point -n
/Ralink/3301/sdk3301/RT288x_SDK/source/vendors/Ralink/RT3052/./Makefile:80: recipe for target 'image' failed
make[2]: *** [image] Error 1
make[2]: Leaving directory
'/Ralink/3301/sdk3301/RT288x_SDK/source/vendors/Ralink/RT3052'
Makefile:29: recipe for target 'image' failed
make[1]: *** [image] Error 2
make[1]: Leaving directory '/Ralink/3301/sdk3301/RT288x_SDK/source/vendors'
Makefile:297: recipe for target 'image' failed
make: *** [image] Error 2
---
がぼー なんでかなぁ・・・・。

2.Openwrt(Image Builder)

make image PROFILE=Default

しばし待つと…
makeが終了したのだが、

2490372 118 12:45 bin/ramips/openwrt-ramips-rt305x-rt-g32-b1-squashfs-sysupgrade.bin*
2.5MB 2MBにおさまってないやんOrz

3.Openwrt(Buildroot)

git clone git://git.openwrt.org/openwrt.git
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make prereq
make menuconfig


Target System Ralink RT288x/RT3xxx
Subtarget RT3x5x/RT5350 based boards
を選択してmakeした
3~4時間待つと
2883588 118 14:21 bin/ramips/openwrt-ramips-rt305x-esr-9753-squashfs-sysupgrade.bin
2.9MB 2MBにおさまってないやんOrz
--

うーん。 なかなか難しいね。
この1週間での進捗はこんな感じ。

2014年11月15日土曜日

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

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

定番プログラムを実行させてみた。

1.準備

ncursesの入手
生成
CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/home/[自分の作業場所]/usr --host=arm-none-linux-gnueabi --with-shared

そしてmake, make install
usr内のbinと libをコピー

そして、定番プログラム・・・slの入手!
http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/
https://github.com/mtoyoda/sl
すごいよねこれ。

CC=arm-none-linux-gnueabi-gcc
CFLAGS=-O -I/home/[自分の作業場所]/usr/include/ncurses -I/home/[自分の作業場所]/usr/include -L/home/[自分の作業場所]/usr/lib

これでmakeするとslが生成される。
slもbinにコピー

2.いざ実行!


sshからログインすると、環境変数が読み込まれない?ようなので、
手動で・・・(なんか良い方法ないかな)
export TERMINFO=/lib/terminfo

するとこんな感じに実行できる!




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

どや!

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

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

WZR-600DHP2を触る機会があったので、dd-wrtを導入してみた。


どうやらdd-wrt化は実績があるみたいだ。 
USBポートにext3フォーマットのSDをつなげて、そこに各種アプリをインストールしてみる。

※以下自己責任+無線出力はOFFにすること。

1.dd-wrtの入手



動作確認したのは以下のバージョン
Path: Downloads › betas › 2014 › 11-11-2014-r25309 › buffalo_wzr-600dhp2 
公式版ではなくbetaなのか。。

2.インストール


<デバッグ画面からファームアップを行う>
詳細は以下のリンク先が詳しい

インストール後、192.168.1.1にアクセス
ここまではとても簡単にできる!



3.SDを外部ストレージ化


SDカードはext3にてフォーマットした。
600dhp2に刺してみると、自動でマウントされる。
されない場合は「ネットワーク」→「USB」にある
「自動ドライブマウント」を確認する。
表示を「日本語」にしていると、レイアウトが崩れるみたいたので、
「英語」と切り替えながら確認すると良さそう。
自動マウントされたSDカードが/dev/sda1として認識された。
このUUIDを「自動ドライブマウント」の下にある
Mount this Partition to /jffsにコピペする。
これでこのSDカードが常に/jffsにマウントされるようになる。


まずはここまで