ログイン付近でラップされる
Kane BeBe III ARM9/2440 ARM9/2440マニュアル
|
スフリ交換
ARMボードとBフレッツを使い、非固定IPアドレス1個で自宅サーバより発信しています。全てフリーソフトを使用して、無料で作る自宅サーバです。
ローチコイン取引所
- 電力消費が少ない。24時間稼動しでも、電気代が安心です。
- 徹底的にファンレス、超静音。夜に眠れます。
- 起動/再起動は速い。メンテナンスが便利です。
- 万一崩壊したら、システムを簡単的に回復することができる。
- 自宅サーバとして、パフォーマンスが十分です。
そんなARMボードを使って自宅サーバを構築してみませんか。
重力アプリ
必要のソースコードhttp://www.apache.org
php-5.3.5.tar.bz2
http://php.net/
libxml2-sources-2.7.8.tar.gz
http://xmlsoft.org/
※ クロスコンパイル環境はFedora9です。
2GBを超えるファイルに対応すれば、まず、x86版をコンパイルする
Apacheのコンパイル
# cd apache_1.3.42
# ./configure --prefix=/apache --enable-module=so ← 共有モジュールに対応
# make
# make install ← /apacheにインストールする
libxml2のコンパイル
PHP5のコンパイル
# cd php-5.3.5
# ./configure --prefix=/php --with-apxs=/apache/bin/apxs
# make
# make install ← /phpにインストールする
ARM版をコンパイルする
libxml2のコンパイル
# cd libxml2-2.7.8
# CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/arm-rootfs
# make
# make install ← /arm-rootfsにインストールする
PHP5のコンパイル
# cd php-5.3.5
# CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/php --with-libxml-dir=/arm-rootfs --with-apxs=/apache/bin/apxs --enable-mbstring
← apacheはx86版です。
← mbstringは日本語などマルチバイト言語に対応する。
以下のようなコンパイルエラーメッセージ
error: invalid 'asm': invalid operand for code 'w'
を削除するために、Makefileを編集する。
CFLAGS_CLEAN = -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/usr/include -g -O2← 赤い文字は添加されたディレクトリです。/opt/FriendlyARM/toolschain/4.4.3/はARMクロスコンパイルツールのインストール先です。
PHPは共有モジュールに対応するために、以下の改修も必要です。
MakefileにはLDFLAGS += -ldlを追加する。 main/php.hには#define HAVE_LIBDL 1を追加する。 ext/standard/dl.cには#include <dlfcn.h>を追加する。
コンパイル開始する。
php-5.3.5/sapi/cli/php: 1: Syntax error: word unexpected (expecting ")") make: *** [ext/phar/phar.php] Error 2
があります。生成されたARM版phpはホストで実行できませんから。
# cp /php/bin/php sapi/cli/ ← 先に生成されたx86版phpに切り替える。
# make ← コンパイル完成する。
# make install ← /phpに、libphp5.soファイルを/apache/libexecにインストールする。
# cp php-arm /php/bin/php ← ARM版のphpをリストアする。
# cp php.ini-development /php/lib/php.ini ← php.iniファイルをコピーする。
最後、ARM版のApacheをコンパイルする
# cd apache_1.3.42
# CC=arm-linux-gcc ./configure --prefix=/apache --enable-module=so ← 共有モジュールに対応
# make
コンパイルの途中、src/main/gen_test_charにエラーがあります。ARMの実行ファイルが動けないから。X86用のapache_1.3.42-x86/src/main/gen_test_charをsrc/main/gen_test_charにコピーしてください。
同じエラーもsrc/main/gen_uri_delimsにあります。同じ方法で解決します。
httpd.conf を編集し、PHP の共有モジュールをロードするよう設定します。 LoadModule 命令の右側に記述するパスは、システムの PHP 共有モジュールを指している必要があります。
LoadModule php5_module libexec/libphp5.so <IfModule mod_dir.c> DirectoryIndex index.html index.php ← index.phpを添加する。 </IfModule>
Apache が特定の拡張子のファイルを PHP としてパースするよう(httpd.confを編集して)設定します。例えば、Apache が拡張子 .php のファイルを PHPとしてパースするように設定します。複数の拡張子も、空白で区切って記述するだけで PHP としてパースさせることができます。以下の例は .php と .phtmlとを指定した場合です。
AddType application/x-httpd-php .php .phtml
テラー暗号ニュース
生成されたディレクトリ/apacheと/phpをすべてボードのルート/にコピーする。libxml2ライブラリ/arm-rootfs/lib/libxml2.so.2.7.8をボードの/libにコピーする。リンクを作ります。[root@kaneBeBeIII]# ln -s /lib/libxml2.so.2.7.8 /lib/libxml2.so
Apacheのコンフィグファイル/apache/conf/httpd.confを編集して、次のように直します。
Port 80 Group ppp ServerName kanebebe.mydns.jp
LANの設定ファイル/etc/eth0-settingを編集して、次のような直します。
IP=192.168.1.200 Mask=255.255.255.0 Gateway=192.168.1.1 DNS=192.168.1.1 MAC=08:55:55:55:55:55
起動スクリプト/etc/init.d/rcSを編集して、次のような直します。
#/etc/rc.d/init.d/httpd start #echo " " > /dev/tty1 #echo "Starting web server..." > /dev/tty1 #sleep 1 #/etc/rc.d/init.d/leds start #echo " " > /dev/tty1 #echo "Starting leds service..." > /dev/tty1 #echo " " #sleep 1 #/bin/qtopia & #echo " " > /dev/tty1 #echo "Starting Qtopia, please waiting..." > /dev/tty1 /apache/bin/apachectl start
必要ない機能を全部コメントします。Apacheサーバの起動用のコマンド
/apache/bin/apachectl start
を入ります。
ボードを再起動させば、Apacheインストール時のテストページが見えるはずです。
ディレクトリ/apache/htdocsにはPHPのテスト用のファイルを生成する。
<?php phpinfo(); ?>
PHPテストページ
phpinfoしてみると、以下のエラーがでる。
Warning: phpinfo() [function.phpinfo]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST'
phpinfoでエラーが出たことがなかったので戸惑ったが、タイムゾーンの設定をすればいいようだ。php.iniの該当部分を次のように修正する。
[Date] ; ... ; ... date.timezone = Asia/Tokyo
SQLite は軽量のインプロセス・データベースエンジンで、今日の多くの主要なプログラムで広く利用されています。PHP5.3以降、SQLite3はコアに吸収されたので、デフォルトで有効になっています。PHPテストページでSQLiteの部分を確認します。
額面交換
SQLite3 support | enabled |
---|---|
SQLite3 module version | 0.7-dev |
SQLite Library | 3.7.3 |
Directive | Local Value | Master Value |
---|---|---|
sqlite3.extension_dir | no value | no value |
データベースSQLite3テスト用のPHPプログラム
<?php // DBへの接続 try { $db = new SQLite3('/ディレクトリ/mysqlitedb.db'); ← /ディレクトリ/をPHPユーザでアクセスできるように設定する。 } catch (Exception $e) { print 'DBへの接続でエラーが発生しました。<br/>'; print $e->getTraceAsString(); return; } $db->exec('CREATE TABLE foo (bar STRING)'); $db->exec("INSERT INTO foo (bar) VALUES ('This is a test')"); $result = $db->query('SELECT bar FROM foo'); var_dump($result->fetchArray()); ?>
データベースSQLite3コマンドライン
データベースSQLite3を管理するために、SQLite3コマンドラインも必要です。 http://www.sqlite.org/download.htmlから最新版SQLite 3.7.5をダウンロードする。
# cd sqlite-autoconf-3070500
# mkdir build
# cd build
# ../configure CC=arm-linux-gcc --host=arm-linux --prefix=/sqlite3
# make
# make install
生成された実行ファイル/sqlite3/bin/sqlite3をボードの/binにコピーする。
ライブラリ/sqlite3/lib/libsqlite3.so.0.8.6をボードの/libにコピーする。リンクも作ります。
[root@kaneBeBeIII]# ln -s /lib/libsqlite3.so.0.8.6 /lib/libsqlite3.so
sqlite3を実行してみます。
SQLite version 3.7.5 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from foo; This is a test sqlite> .exit [root@kaneBeBeIII]#
マールヴロディサルートヴィソン交換
コンテンツマネジメントシステム(Content Management System,CMS)は、Webコンテンツを構成するテキストや画像などのデジタルコンテンツを統合・体系的に管理し、配信など必要な処理を行うシステムの総称。Apache + PHP + SQLiteに基づいてのコンテンツマネジメントシステムはいくつがあります。このARM自宅サーバには二つのCMSを実装されました。
http://www.soycms.net/
SoyCMS テストページ
http://phpsqlitecms.net/
phpsqlitecms テストページ
日本語関連の「php.ini」の設定:
magic_quotes_gpc = Off default_charset = "utf-8" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.substitute_character = none;
ラップされたビーコン E 交換
プリインストールしたLinuxにはTelnet/FTPサーバをすでにインストールしました。特別の設定が必要ないですが、既存のアカウントはroot パスワードなし
plg パスワードがplg
passwdコマンドでアカウントのパスワードを変更してください
adduserまたはdeluserコマンドでアカウントを添加・削除できます。
[root@kaneBeBeIII]# deluser youraccount
Secure Shell(セキュアシェル、SSH)は、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。パスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。
そもそもはTelnetやrsh、rloginなどといった、リモートホストのシェルを利用するための既存のプロトコルを代用する手段として考えられていた。TelnetやFTPは、ネットワーク上に平文でパスワードを送信してしまうため、パスワードをネットワーク経路上でのぞき見されてしまう(これを盗聴やスニフと呼ぶ)危険性が高く、商業的なインターネット空間では問題が大きかった。Telnet同様に、リモートホスト間でのファイルコピー用のコマンドrcpを代用するscpや、FTPを代用するためのsftpも用意されている。
必要のソースコードgate.io
openssl-0.9.8q.tar.gz
http://www.openssl.org/
openssh-5.6p1.tar.gz
http://www.openssh.org/
zlibをコンパイルする
# cd zlib-1.2.5
# CC=arm-linux-gcc ./configure --prefix=/opt/libs
# make
# make install
opensslをコンパイルする
# cd openssl-0.9.8q
# ./Configure --prefix=/opt/libs os/compiler:arm-linux-gcc
# make
# make install
opensshをコンパイルする
# cd openssh-5.6p1
# ./configure --host=arm-linux --with-libs --with-zlib=/opt/libs --with-ssl-dir=/opt/libs --disable-etc-default-login CC=arm-linux-gcc AR=arm-linux-ar
# make
※ make installをしないでください。ご注意ください。
生成されたファイルをコピーする。
sshdをボードの/usr/sbinにコピーする。
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscanをボードの/usr/local/binにコピーする。
sftp-server ssh-keysignをボードの/usr/libexecにコピーする。
sshd_config ssh_configをボードの/usr/local/etcにコピーする。
ホスト側次のコマンドで
# ssh-keygen -t rsa1 -f ssh_host_key -N ""
# ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
# ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
生成されたssh_host_*ファイルをボードの/usr/local/etcにコピーする。
生成されたzlibのライブラリlibz.so.1.2.5をボードの/libにコピーして、ボードにリンクを作ります。
# ln -s /lib/libz.so.1.2.5 /lib/libz.so
# ln -s /lib/libz.so.1.2.5 /lib/libz.so.1
ボード側に動作用のディレクトリを生成する。
[root@kaneBeBeIII]# mkdir -p /var/empty/sshd
ボードの/etc/passwdファイルを編集して
次の行を添加します。
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ボードでSSHサーバを起動させます。
Windows側puttyとWinSCPなどのツールでSSHサーバをアクセスしてみます。
緑の世界のアプリ
ARM9ボードには1GB NANDしかありません。最大32GBのSDカードまたはUSBメモリ(FAT32)がしか使えません。サーバとして容量が足りません。その上、FAT32も4GBのファイルサイズの制限がありますので、4GBを超えるDVDのisoファイルは使えません。NTFS外付けハードディスクを使えば、大きな容量も使えるし、ファイルサイズの制限もないです。しかし、LinuxはNTFSに対応しますが、読み取り専用です。
次の方法でNTFSに書き込めます。
まず、Linuxカーネルをコンフィグして、


File systemsのFUSE (Filesystem in Userspace) supportを選択して、
http://www.tuxera.com/community/ntfs-3g-download/からntfs-3g-2010.10.2.tgzをダウンロードします。
# cd ntfs-3g-2010.10.2
# ./configure CC=arm-linux-gcc --host=arm-linux
# make
# make install
生成されたファイル
/bin/ntfs-3g
/lib/libntfs-3g.so.80.0.0
をボードの/bin, /libにコピーします。
ボードの/libにあるリンクを生成します
ボードで次のコマンドでNTFS外付けハードディスクをマウントする
[root@kaneBeBeIII]# ntfs-3g /dev/udisk /apache/htdocs/download
現在、/apache/htdocs/downloadはNTFS外付けハードディスクです。アクセスしてみます。
GSTBSC交換
ルータは初期設定のままでは外からのアクセスを受け入れません。だからルータを使うと安全なのです。しかしサーバを立ち上げるとなると、外からのアクセスを受けなければならないので、ルータに設定を行います。自宅の光ファイバのルータのHP(192.168.1.1)を開きます。「静的NAT設定」でLANのWebサーバのIPアドレスを設定します。
仮想通貨取引所とウォレットの比較
以下の要領で無料ダイナミックDNS(DDNS)サービスから無料でドメイン名を取得できます。ユーザー名(サブドメイン名):任意のサブドメイン名を入力※例: kanebebe.mydns.jpのkanebebeにあたる部分
ドメイン名:希望するドメイン名を選択※例: kanebebe.mydns.jpのmydns.jpにあたる部分
電子メールアドレス:自分のメールアドレスを入力
パスワード:任意のパスワードを入力
パスワード(再入力):任意のパスワードを再入力
非固定IPアドレス環境の場合、不定期にIPアドレスが変わってしまうが、IPアドレスが無料・ダイナミックDNS(DDNS)サービス - ieServer.Netに登録したIPアドレスと変わってしまうとkanebebe.mydns.jpでサーバにアクセスできなくなってしまう。
そこで、ieServer用IPアドレス更新スクリプトを利用して定期的にIPアドレスの変更をチェックし、IPアドレスが変更されていた場合は自動で無料・ダイナミックDNS(DDNS)サービス - ieServer.Netへ新しいIPアドレスを登録するようにし、常にkanebebe.mydns.jpでサーバにアクセスできるようにする。
また、固定IPアドレス環境の場合でも、一定期間IPアドレス更新処理が行われないとドメインが削除されてしまうため、ieServer用IPアドレス更新スクリプトを使用して定期的にIPアドレスの更新処理を自動で行なうようにする。
CURRENT_IP="0.0.0.0"
# 回線IP確認ページURL
REMOTE_ADDR_CHK="http://ieserver.net/ipcheck.shtml"
# DDNS更新ページURL
DDNS_UPDATE="http://ieserver.net/cgi-bin/mydns.cgi"
# グローバルIPアドレスを保存するファイル
IP_BACKUPFILE="/tmp/global-ip"
# ieServer.Netにて取得したアカウント(サブドメイン)情報を記入
ACCOUNT="kanebebe"
DOMAIN="mydns.jp"
PASSWORD="xxxxxxxx"
if test -f $IP_BACKUPFILE; then
CURRENT_IP=`cat $IP_BACKUPFILE`
else
CURRENT_IP="0.0.0.0"
fi
NEW_IP=`wget -q -O - $REMOTE_ADDR_CHK`
if [ "$CURRENT_IP" != "$NEW_IP" ];then
STATUS=`wget -q -O - "$DDNS_UPDATE?username=$ACCOUNT&domain=$DOMAIN&password=$PASSWORD&updatehost=1"`
RESULT=`expr index "$STATUS" "$NEW_IP"`
TIME=`date`
if [ $RESULT -ge 1 ];then
echo "$TIME $ACCOUNT.$DOMAIN Updated $CURRENT_IP to $NEW_IP"
echo $NEW_IP > $IP_BACKUPFILE
else
echo "$TIME $ACCOUNT.$DOMAIN Update aborted $CURRENT_IP to $NEW_IP"
fi
fi
上のスクリプトをボードにddns-update.shとして保存して、ボードで次のコマンド:
[root@kaneBeBeIII]# ./ddns-update.sh
次のURLで設定したサーバ名で外部からアクセスできるか確認する。
http://www.websitepulse.com/help/tools.php
定期的に実行する
定期的にコマンドを実行するには、cronを使います。設定はcrontabコマンドを使います。ここでは、以下のファイルをmycrontabとして用意します。
0,10,20,30,40,50 * * * * /bin/ddns-update.sh > /dev/null 2>&1
[root@kaneBeBeIII]# crontab /etc/mycrontab
[root@kaneBeBeIII]# crond
現在の設定を見るには、
0,10,20,30,40,50 * * * * /bin/ddns-update.sh > /dev/null 2>&1 0 12 * * * /bin/ntpdate.sh > /dev/null 2>&1
ハイトークン交換
Network Time Protocol(ネットワーク・タイム・プロトコル、略称NTP(エヌティーピー))は、ネットワークに接続される機器において、機器が持つ時計を正しい時刻へ同期するための通信プロトコルである。http://www.ntp.org/からntp-4.2.6p3.tar.gzをダウンロードします。
# cd ntp-4.2.6p3
# CC=arm-linux-gcc ./configure --prefix=/ntp --exec-prefix=/ntp --host=arm-linux
# make
このようなエラー「error: 'MOD_NANO' undeclared」があるかもしれません。ntpd/ntp_loopfilter.cファイルを編集し、次の行を追加する。
#define MOD_NANO ADJ_NANO ← この行を追加する。
コンパイル完成すると、インストールする。
生成された/ntp/bin/ntpdateファイルをボードの/binにコピーします。
ホストLinuxの/usr/share/zoneinfo/Asia/Tokyoファイルをボードの/etc/localtimeにコピーします。
ボードで次のコマンドで日本標準時に合わせる。
スクリプトで時計を正確に合わせた後、RTCを更新する。
#!/bin/sh ntpdate ntp.nict.jp if [ $? = 0 ];then hwclock -w ← 成功したら、RTCを更新する。 fi
定期的に実行する
mycrontabに/bin/ntpdate.shを添加する
0,10,20,30,40,50 * * * * /bin/ddns-update.sh > /dev/null 2>&1
0 12 * * * /bin/ntpdate.sh > /dev/null 2>&1 ← 毎日12時に実行する。
カラットコインアプリ
「Samba」を使うとWindowsからアクセスできるファイルサーバを構築できる。アクセスするのは簡単で、Windowsの「マイネットワーク」を開くとサーバのアイコンがあらわれ、さらにアイコンをダブルクリックすると共有フォルダの一覧が出てくる。
この共有フォルダは自分のパソコンのハードディスクと同じ感覚で扱うことができ、ファイルのアイコンをドラッグすればコピーできるし、ダブルクリックすればファイルを開くことができる。
gateio loginからsamba-3.5.6.tar.gzをダウンロードします。# cd samba-3.5.6/source3
# ./configure CC=arm-linux-gcc LD=arm-linux-ld ranlid=arm-linux-ranlid AR=arm-linux-ar --target=arm-linux --host=i686 samba_cv_CC_NEGATIVE_ENUM_VALUES=yes
# make
[root@kaneBeBeIII]# mkdir -p /usr/local/samba/bin
[root@kaneBeBeIII]# mkdir -p /usr/local/samba/var
[root@kaneBeBeIII]# mkdir -p /usr/local/samba/private
[root@kaneBeBeIII]# mkdir -p /usr/local/samba/lib
生成されたsambaファイル
samba-3.5.6/source3/bin/smbd
samba-3.5.6/source3/bin/smbpasswd
samba-3.5.6/source3/bin/testparm
ボードの/usr/local/samba/libにはsmb.confファイルを生成編集します
[global] workgroup =WORKGROUP netbios name =KaneBeBe server string =Samba Server guest account=root security =share [share] path =/apache/htdocs read only = No guest ok=yes
ボードでsambaのユーザを添加します。
ボードでsambaサーバを起動させます。
[root@kaneBeBeIII]# /usr/local/samba/bin/smbd -D
WindowsからARM sambaサーバが見える、アクセスできるはずです。
ビルドアップ交換
cups(Common Unix Printing System)とは、IPP(Internet Printing Protocol)に準拠し、IPPはHTTPを使用して印刷可能にしたプロトコルで、印刷の為の標準規定だけでなく、印刷ジョブやプリンタの各オプションなども規定しユーザーはWebブラウザを介してサーバの状態監視やプリンタのジョブ管理も行なえます。
当サイトではプリンタドライバはクライアントに持たせ、サーバは受け取ったデータを加工せずにプリンタに印刷要求を出すようにする設定を紹介します。
まず、Linuxカーネルには「USB Printer support」をチックして、再構築します
プリンタをUSBケーブルでボードと接続して、CUPSがアクセスできるように設定します。
※ 再起動またはUSBプリンタを再接続する時、再設定が必要です。
http://www.cups.org/からcups-1.4.6-source.tar.bz2をダウンロードします。
※ クロスコンパイル環境はFedora9です。
# cd cups-1.4.6
まず、x86用のcupsをコンパイルする。
# ./configure
# make
※ make installをしないでください。ご注意ください。
生成されたx86用の実行ファイルppdc/genstringsをバックアップする。
ARM用のCUPSをコンパイルする前に、Makefileを編集する
"man"というディレクトリを削除する
DIRS = cups filter backend berkeley cgi-bin driver
バックアップされたx86版のgenstringsを使います。
../genstrings >sample.c
ARM用のCUPSをコンパイルする
# ./configure CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld RANLIB=arm-linux-ranlib AR=arm-linux-ar --target=arm-linux --host=arm-linux --build=i686-linux --prefix=/cups
# make
# make install
最後、ディレクトリ/cupsにはARM用のcupsの実行ファイルを生成されました。すべてをボードの/cupsにコピーしてください。
ボード側に設定ファイル/cups/etc/cups/cupsd.confを編集する。
FileDevice Yes # Only listen for connections from the local machine. Listen 631 Listen /cups/var/run/cups/cups.sock # Show shared printers on the local network. Browsing On BrowseOrder allow,deny BrowseAllow all BrowseLocalProtocols CUPS # Default authentication type, when authentication is required... DefaultAuthType Basic # Restrict access to the server... <Location /> Order allow,deny Allow @LOCAL </Location> # Restrict access to the admin pages... <Location /admin> Order allow,deny Allow @LOCAL </Location> # Restrict access to configuration files... <Location /admin/conf> AuthType Default Require user @SYSTEM Order allow,deny Allow @LOCAL </Location>
CUPSの実行はdbusが必要です。関連のソースコード:
http://expat.sourceforge.net/
dbus-1.4.8.tar.gz
http://cgit.freedesktop.org/dbus/dbus/
まずdbus用のxml処理用のパッケージをコンパイルする。
# cd expat-2.0.1
# ./configure --prefix=/opt/libs --host=arm-linux
# make
# make install
dbusのコンパイル
# cd dbus-1.4.8
# ./configure --prefix=/opt/libs --host=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --with-x=no
# make
# make install
生成されたライブラリ/opt/libs/lib/libdbus-1.so.3.5.5をボードの/libにコピーして、ボード側にも関連のリンクを生成します。
CUPSを起動させます。
「プリンターとクラスの追加」に入ります。
「プリンターの追加」ボタンを押します。
Linuxのユーザ名とパスワードを入力します。
接続されているプリンターを自動的に認識するはずです。チェックして、「続ける」ボタンを押します。
必要な情報を入力して、「共有」をチェックして、「続ける」ボタンを押します。
「プリンターの追加」ボタンを押します。
設定して、「デフォルトオプションの設定」ボタンを押します。
CUPSプリンタサーバを設定完了しました。
ハイパーサイン ID トークンのログイン
「スタート」の「プリンタとFAX」を選択し、「プリンタのインストール」を選択し、
プリンタの付属DVDからドライブをインストールする
すべての設定が完了しました。印刷してみます。
フリベロ交換
実は自宅サーバを構築する上で一番の目的はこの「ストリーミングライブカメラ構築」だったりします。いま、レンタルサーバも非常に安い時代に入りましたので、あえて自宅サーバを立てる意味というものが薄れてきているようにも感じます。 ここでは、安価なUSBのCMOSカメラ(UVCクラス)を使って手軽に自宅サーバにストリーミングライブカメラを構築する方法を公開いたします。 |
使用したソフトはmjpg-streamerです。
mjpg-streamerの最新バージョンをダウンロードします。
mjpg-streamerをコンパイルする。
$ make CC=arm-linux-gcc
生成されたファイル(mjpg_streamer、*.so)とmjpg-streamerのwwwディレクトリをARMボードにダウンロードして、特定なディレクトリにをコピーしてください。
[root@kaneBeBeIII]# cp mjpg_streamer /bin/
[root@kaneBeBeIII]# mv www /apache/htdocs/video-www
一通りうまくいったので設定を調整しようと各種プラグインが持つオプションのヘルプを見ようと思ったのであるが、これがいちいち面倒であって、例えば入力プラグイン input_uvc.so のヘルプを見るには
こうであり、出力プラグイン output_http.so のヘルプを見るには
最終的には下記のようなコマンドに落ち着いた。
Webブラウザで、「http://ARMボードのIPアドレス:8080/」にアクセスすると、MJPG-Streamer Demo Pagesが表示されます。静止画、動画、およびPan/Tilt/LEDのOn/Off等の制御をすることができます。
DFISTARTER交換
SIPと呼ばれるプロトコルを利用して、電話番号をIPアドレスと対応付けたり、相手を呼び出してつなぐといった呼制御を行うサーバのこと。partysipは、GPL(コア部分はLGPL)のSIPサーバです。容量が小さいのが利点です。SIP proxy と registrar の役目をします。ユーザディレクトリをローカルで持つため、他のレジストラとの協調動作はできませんが、自宅と社内の応用には十分です。http://www.gnu.org/software/osip/からソースコードをダウンロードします。
partysip-2.2.3.tar.gz
SIPスタックoSIPをコンパイルする。
# cd libosip2-2.2.2
# cd libosip2-2.2.2
# CC=arm-linux-gcc CFLAGS=-O2 ./configure --prefix=/sip --disable-trace --disable-debug --host=arm-linux
# make
# make install
SIPサーバpartySIPをコンパイルする。
# cd partysip-2.2.3
# cd partysip-2.2.3
# CC=arm-linux-gcc CFLAGS=-O2 ./configure --prefix=/sip --disable-trace --disable-debug --host=arm-linux
# make
../ppl/unix/.libs/libppl.so: undefined reference to `__dn_expand'
../ppl/unix/.libs/libppl.so: undefined reference to `__res_query'
src/Makefileとtools/makefileのLIB設定に以下の用に"-lresolv"を追加します。
PARTYSIP_LIB = -lnsl -ldl -lresolv
PPL_LIB = -lnsl -ldl -lresolv
実行時、「Default Gateway Interface detection failed. Please define "serverip" in the config file」というエラーメッセージを削除するために、次の変更のほうがいいです。
#if defined(__linux) || defined (WIN32) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__APPLE_CC__)
psp_core_load_all_ipv4();
// psp_core_load_all_ipv6(); この行をコメントする
#endif
コンパイルした後、インストールします。インストール先は/sipです。
生成されたディレクトリ/sipをすべてボードの/sipにコピーしてください。「/sip/etc/partysip/partysip.conf」を編集して、serverip 、servernameなどを環境に合わせて変更する。
serverrealm = "kanebebe.mydns.jp"
authentication = on
# offなら,認証がありません。
# onなら、ユーザとパスワードを添加することが必要です。
serverip = 192.168.1.200
servername = kanebebe.mydns.jp
serverport_udp = 5060
transport = udp
# ユーザを添加する
user sip:101@kanebebe.mydns.jp 101 101
user sip:102@kanebebe.mydns.jp 102 102
ボードに「-h」オプションでヘルプを表示する。
Server version: Partysip/2.2.3 Server version: Partysip/2.2.3 Server built: Jan 21 2011 19:37:28 usage: partysip [-vV] [-f config] [-d level -l logfile] [-h] print this help [-i] interactive mode [-f config] configuration file for partysip. [-d level] be verbose. 0 -> no output. 6 -> all output . [-l logfile] specify the log file. [-v] print partysip info [-V] print full partysip info with compile flags
ボードに次のコマンドでSIPサーバを起動させます。
Server: WellX Telecom/Partysip/2.2.3 Debug level: 6 Config name: /sip/etc/partysip/partysip.conf ServerIP: (IPv4) 192.168.1.200, 127.0.0.1 ServerName: kanebebe.mydns.jp ServerRealm: '"kanebebe.mydns.jp"' Log name: Standard output (partysip)
SIPサーバ用のSIPクライアントは同じくフリーのX-Liteを使用しました。X-LiteはWindows版だけでなく、MACやLinux用も用意されています。ARMボードに基づくLinphone電話と市販のIP電話機も使えます。
ビットコインキャッシュアプリ
OpenVPNを使用してSSL-VPN方式のインターネットVPNを構築し、外部からOpenVPN経由でLANに安全に接続できるようにする。なお、VPNクライアントはWindowsマシンまたはARMボードとする。
【前提とするネットワークイメージ】
カーネルのコンフィグ:

<*> Universal TUN/TAP device driver support
をチックして、再コンパイルする。
必要のソースコード
http://www.oberhumer.com/opensource/lzo/
openssl-0.9.8r.tar.gz
http://www.openssl.org/
openvpn-2.2.2.tar.gz
http://openvpn.net/index.php/open-source/downloads.html
lzoをコンパイルする
# cd lzo-2.05
# ./configure --host=arm-linux CC=arm-linux-gcc --target=arm-linux --prefix=/opt/libs
# make
# make install
# ln -s /opt/libs/lib/liblzo2.a /opt/libs/lib/liblzo.a
# ln -s /opt/libs/lib/liblzo2.la /opt/libs/lib/liblzo.la
opensslをコンパイルする
# cd openssl-0.9.8r
# ./Configure --prefix=/opt/libs os/compiler:arm-linux-gcc
# make
# make install
openvpnをコンパイルする
# cd openvpn-2.2.2
# ./configure --host=arm-linux --enable-password-save CC=arm-linux-gcc --target=arm-linux --with-ssl-headers=/opt/libs/include/ --with-ssl-lib=/opt/libs/lib --with-lzo-headers=/opt/libs/include/lzo --with-lzo-lib=/opt/libs/lib
# make
ファイルをボードにコピーする:
- ディレクトリopenvpn-2.2.2には実行ファイルopenvpnを生成されます。クライアント側もサーバ側もこの1個のバイナリファイルです。ボードの/binにコピーします。
- ディレクトリopenvpn-2.2.2には証明書・秘密鍵のサンプル(sample-keysフォルダ)とコンフィグのサンプル(sample-config-filesフォルダ)もあります。これらのフォルダをボードの/etc/openvpnにコピーします。
- フォルダeasy-rsa/2.0には証明書・秘密鍵の生成ツールです。ボードの/etc/openvpn/easy-rsaにコピーします。
- opensslの実行ファイル/opt/libs/bin/opensslをボードの/binにコピーします。
サーバ設定ファイルサンプルを編集する。
[root@kaneBeBeIII]# cp /etc/openvpn/sample-config-files/server.conf /etc/openvpn
コンフィグファイルserver.confを編集する。
[root@kaneBeBeIII]# vi /etc/openvpn/server.conf
port 1194 proto udp dev tun ← VPNインタフェースとしてTUNを指定(デフォルト) ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.0 ← VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト) ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "route 192.168.1.0 255.255.255.0" ← 追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバ経由にする) push "dhcp-option DNS 192.168.1.1" ← VPNサーバ経由のDNS追加 keepalive 10 120 tls-auth ta.key 0 # This file is secret ← 行頭の;を削除してコメント解除(TLS認証有効化) comp-lzo user nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる) group ppp ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる) persist-key persist-tun verb 3
VPNサーバの証明書・秘密鍵(サンプル)のコピーと生成
[root@kaneBeBeIII]# cp /etc/openvpn/sample-keys/dh1024.pem /etc/openvpn/
[root@kaneBeBeIII]# cp /etc/openvpn/sample-keys/server.crt /etc/openvpn/
[root@kaneBeBeIII]# cp /etc/openvpn/sample-keys/server.key /etc/openvpn/
[root@kaneBeBeIII]# openvpn --genkey --secret /etc/openvpn/ta.key
VPNサーバの起動
[root@kaneBeBeIII]# /bin/openvpn --config /etc/openvpn/server.conf --cd /etc/openvpn --dev-node /dev/tun &
http://openvpn.net/index.php/open-source/downloads.htmlよりWindows用のファイルをダウンロードして、インストールします。
サーバ側からCA証明書(/etc/openvpn/sample-keys/ca.crt)、クライアント証明書(/etc/openvpn/sample-keys/client.crt)、クライアント秘密鍵(/etc/openvpn/sample-keys/client.key)、TLS認証鍵 (/etc/openvpn/ta.key)をクライアント側へ持ち込み、設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へ格納する。
※CA証明書、クライアント証明書、クライアント秘密鍵、TLS認証鍵をクライアント側へ持ち込む際は、安全な経路で持ち込むこと。
クライアント設定ファイルサンプル(C:\Program Files\OpenVPN\sample-config\client.ovpn)を設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へコピーする。クライアント設定ファイル(C:\Program Files\OpenVPN\config\client.ovpn)編集する。
client dev tun proto udp remote kanebebe.mydns.jp 1194 ← VPNサーバ名を指定 resolv-retry infinite nobind persist-key ←これと次の項目は、VPNが落ちた場合の再接続設定 persist-tun ca ca.crt cert client.crt ← クライアント証明書ファイル名を指定 key client.key ← クライアント秘密鍵ファイル名を指定 ns-cert-type server ← 行頭の;を削除してコメント解除("Man-in-the-Middle"攻撃対策) tls-auth ta.key 1 ← 行頭の;を削除してコメント解除(TLS認証有効化) comp-lzo verb 3 pull ← 追加 サーバの設定をクライアントに反映させる float ← 追加 VPNのIPアドレスはサーバに任せる
ARMクライアント
サーバ側からCA証明書(/etc/openvpn/sample-keys/ca.crt)、クライアント証明書(/etc/openvpn/sample-keys/client.crt)、クライアント秘密鍵(/etc/openvpn/sample-keys/client.key)、TLS認証鍵 (/etc/openvpn/ta.key)をクライアント側へ持ち込み、設定ファイル格納フォルダ(/etc/openvpn/)へ格納する。
サーバ設定ファイルサンプルを編集する。
[root@kaneBeBeIII]# cp /etc/openvpn/sample-config-files/client.conf /etc/openvpn
コンフィグファイルclient.confを編集する。
[root@kaneBeBeIII]# vi /etc/openvpn/client.conf
client dev tun proto udp remote kanebebe.mydns.jp 1194 ← VPNサーバ名を指定 resolv-retry infinite nobind user nobody ← これと次の項目はLinux環境だけ group ppp persist-key ← これと次の項目は、VPNが落ちた場合の再接続設定 persist-tun ca ca.crt cert client.crt ← クライアント証明書ファイル名を指定 key client.key ← クライアント秘密鍵ファイル名を指定 ns-cert-type server ← 行頭の;を削除してコメント解除("Man-in-the-Middle"攻撃対策) tls-auth ta.key 1 ← 行頭の;を削除してコメント解除(TLS認証有効化) comp-lzo verb 3 pull ← 追加 サーバの設定をクライアントに反映させる float ← 追加 VPNのIPアドレスはサーバに任せる
VPNクライアントの起動
静的ルーティング設定:
VPN内(10.8.0.0)のコンピュータはLAN(192.168.1.0)のほかのコンピュータを通信したければ、ルータの設定が必要です。自宅の光ファイバのルータのHP(192.168.1.1)を開きます。「LAN側静的ルーティング設定」で10.8.0.0のゲートウェイを192.168.1.200に設定します。
一部のルータはLAN側静的ルーティング設定ができません。例えばyahoo BB ADSLなど。LAN内のコンピュータは一つずつ静的ルーティングの設定が必要です。
Windowsマシンなら:
「192.168.1.200」はVPNサーバのIPアドレス
オプション「-p」はパソコンが再起動しでも、静的ルーティングの設定も有効です。
Linuxマシンなら:
「192.168.1.200」はVPNサーバのIPアドレス
このコマンドを起動スクリプトに編集すれば、再起動しでも、ルーティングの設定も有効です。 静的ルーティングの設定は面倒または不能なら、ARMサーバにはNAT(ナット、Network Address Translation)を設定します。
モネタス交換
NAT(ナット、Network Address Translation)とは、IPアドレスを別のIPアドレスに変換する技術である。主にプライベートネットワーク環境のホストから、インターネットにアクセスするために利用されるものである。また、IPアドレスに加え、ポート番号の変換を行うものはNAPT(Network Address Port Translation)と呼ぶ。
NATはiptablesというツールを使います。
まず、Linuxカーネルを再コンフィグする。



[*] Network packet filtering framework (Netfilter)を選択する。


Core Netfilter configurationの全てのアイテムを選択する。


IP: Netfilter Configurationの全てのアイテムを選択する。次のコマンドでLinuxカーネルをコンパイルする。
iptablesのURL
http://www.netfilter.org/projects/iptables/
iptablesのソースコードのコンパイル
# cd iptables-1.4.10
# ./configure --prefix=/iptables --host=arm-linux --with-ksource=/Path to/linux-2.6.32.2 --disable-ipv6
# make
# make install
ボードに次のコマンドでNATを立ち上げます。
このコマンドを起動スクリプト/etc/init.d/rcSに編集したほうがいいです。起動のとき、自動的にNATを立ち上げます。
さあ交換しましょう
環境ファイル/etc/openvpn/easy-rsa/varsの編集(適当に)
export KEY_COUNTRY=JP ← 国名 export KEY_PROVINCE=Toky ← 都道府県名 export KEY_CITY=Kodaira ← 市区町村名 export KEY_ORG="nissin-tech" ← 組織名 export KEY_EMAIL="info@nissin-tech.com" ← サーバ管理者メールアドレス
/etc/openvpn/easy-rsa で作業する。
まず、下のすべてのスクリプトの第一行
#!/bin/bash
を
#!/bin/sh
に変更する。
証明書/鍵作成用環境変数設定ファイル内容をシステムに反映
証明書/鍵作成先ディレクトリ初期化
マスタCA証明書と秘密鍵の生成
Organization Unit Name(部署) は空のままでもかまわない。
Common Nameが空なら、手動で my-dom.xxx CA とか適当な名称を付けてやる。
Nameが空なら、手動で nissin-tech とか適当な名称を付けてやる。
サーバ証明書と秘密鍵を生成する
Common Nameを聞かれたら"server"と入力する。
Nameが空なら、手動で nissin-tech とか適当な名称を付けてやる。
A challenge passwordとAn optional company nameはenterキーでよい。
ほかに肯定的な回答yを必要とする質問が二つある。
"Sign the certificate? [y/n]"と"1 out of 1 certificate requests certified, commit? [y/n]"。
[root@kaneBeBeIII]# cp keys/server.crt /etc/openvpn/ ← サーバ証明書を/etc/openvpn/にコピー
DH (Diffie Hellman) パラメータを生成する。OpenVPNサーバにはDiffie Hellmanパラメータを生成しなければならない。
[root@kaneBeBeIII]# cp keys/dh1024.pem /etc/openvpn/
クライアントの証明書と鍵を作る(適当な名称で。ここではclient1等)
[root@kaneBeBeIII]# ./build-key client2 ← ほかのクライアント
Organization Unit Name は空のままでもかまわない。
Common Nameを聞かれたら"client1"等と入力する。
Nameが空なら、手動で nissin-tech とか適当な名称を付けてやる。
A challenge passwordとAn optional company nameはenterキーでよい。
ほかに肯定的な回答yを必要とする質問が二つある。
"Sign the certificate? [y/n]"と"1 out of 1 certificate requests certified, commit? [y/n]"。
………………………………………
パスワード付きにしたい場合は
Verifying - Enter PEM pass phrase: ←もう一度パスフレーズを入力
Common Name (eg, your name or your server's hostname) []:client1 ←ここ入力
Nameが空なら、手動で nissin-tech とか適当な名称を付けてやる。
OpenVPNのセキュリティを強化する(tls-auth)
tls-auth HMAC署名はSSL/TLSによって提供されるセキュリティに加えてさらに高度なセキュリティを提供。
tls-authを使用する場合は、標準のRSA証明書と鍵に加えて、共有静的鍵を生成しておく必要がある。
TLS認証鍵を/etc/openvpn/に作成
将来的にクライアントを添加すれば
[root@kaneBeBeIII]# ./build-key クライアント名
コインベースミームコイン
http://trendy.nikkeibp.co.jp/article/qa/other/20020704/101001/●電源を1カ月間入れ続けたパソコンのおおよその電気代 | |||
製品 | 電気代 | 消費電力 | 1ヵ月当たりの電力量 |
ノート(液晶を除いた本体部分のみ) | 283 円 | 19 W | 14 kWh |
デスクトップ(本体のみ) | 908 円 | 61 W | 44 kWh |
15インチCRTディスプレイ | 1033 円 | 70 W | 50 kWh |
17インチCRTディスプレイ | 1344 円 | 90 W | 65 kWh |
14.1インチ液晶ディスプレイ | 372 円 | 25 W | 18 kWh |
*使用時間は24時間×30日で計算 *電気代は東京電力、従量電灯Bの第二段階料金で計算 |
外出先から自宅に VPN 接続し、パソコンを起動させてリモートデスクトップ接続や VNC が使えたりすると、非常に便利だ。
Wake On LAN(WOL) を利用するには、まずハードウェア的に WOL が有効になっていなければならない。LAN インターフェイスが PCI 等単体の LAN カードの場合は、BIOS 設定に加えてマザーボードと専用のケーブル接続が必要な場合もあるが、オンボードであれば、通常は BIOS 設定だけで有効/無効をコントロールできる(ことが多いはず)。
ハードウェアの準備ができれば、あとはマジックパケットを送出するプログラムを用意するだけだ。いろいろあると思うが、ここは仙石浩明氏作のフリーソフトウェア Wake-On-Lan を利用している。
上記 URL からソースコードを入手後、次の手順でコンパイルする。
使い方はARMサーバで次の通り。
[root@kaneBeBeIII]# wol 192.168.1.255 01:23:45:67:89:AB ← 使う例
仙石浩明氏のWOLよりちょっと複雑なツールはこちらにあります。
http://linux.softpedia.com/get/Utilities/wol-5720.shtml
コンパイル手順:
# cd wol-0.7.1
# echo "jm_cv_func_working_malloc=yes" > arm-linux.cache
# CC=arm-linux-gcc ./configure --build=i686-linux --host=arm-linux --cache-file=arm-linux.cache
# make
使い方はボードのコンソールで次のコマンド:
Usage: wol [OPTION] ... MAC-ADDRESS ... Wake On LAN client - wakes up magic packet compliant machines. --help display this help and exit -V, --version output version information and exit -v, --verbose verbose output -w, --wait=NUM wait NUM millisecs after sending -h, --host=HOST broadcast to this IP address or hostname -i, --ipaddr=HOST same as --host -p, --port=NUM broadcast to this UDP port -f, --file=FILE read addresses from file FILE ("-" reads from stdin) --passwd[=PASS] send SecureON password PASS (if no PASS is given, you will be prompted for the password) Each MAC-ADDRESS is written as x:x:x:x:x:x, where x is a hexadecimal number between 0 and ff which represents one byte of the address, which is in network byte order (big endian). PASS is written as x-x-x-x-x-x, where x is a hexadecimal number between 0 and ff which represents one byte of the password. Report bugs to <krennwallner@aon.at>
ターゲットマシンのコマンドプロンプトを開き、ターゲットの MAC アドレスは次の通りに調べます。
自宅のWindowsパソコンを起動した後、遠隔パソコンはVPNを経由し、リモートデスクトップで接続できます。リモートデスクトップの設定は一般的な設定と同じです。こちらをご参照ください。
http://www.microsoft.com/japan/windowsxp/pro/business/feature/remote/remotedesktop.mspx
自宅のLinuxパソコンなら、puttyとWinSCPもそのまま使えます。
ターゲットマシンのコマンドプロンプトを開き、次のコマンドで自宅のパソコンの電源を切る。
ピカチュウ交換
exim は、複雑に発展しすぎてしまった sendmail の代替品として開発された、軽量でカスタマイズしやすい smtp デーモンです。必要のソースコード:
http://www.pcre.org/
db-5.1.19.tar.gz
http://www.oracle.com/technetwork/database/berkeleydb/downloads/index.html
openssl-0.9.8q.tar.gz
http://www.openssl.org/
exim-4.74.tar.bz2
http://www.exim.org/
まず、x86用のexim4をコンパイルする
pcreをコンパイルする。
Berkeley DBをコンパイルする。
生成したファイルdb.hとlibdb-5.1.aを/x86-rootfsにコピーする。
# cp .libs/libdb-5.1.a /x86-rootfs/usr/local/lib
# ln -s /x86-rootfs/usr/local/lib/libdb-5.1.a /x86-rootfs/usr/local/lib/libdb.a
exim4をコンパイルする。
# cd exim-4.74
# cp src/EDITME Local/Makefile
# touch Local/eximon.conf
次に、Local/Makefile を編集します。最近添付されているこのファイルは、何も編集しなくても一応コンパイルして動作させるだけなら可能なのですが、次の箇所だけは変更しなければなりません。
← 前提として、mail グループに所属する mail ユーザーがいることを想定していますので、適当に変えてください
EXIM_USER=mail
EXIM_GROUP=mail
EXIM_MONITOR= ← X11 Windowsを使わないので、空になる
← SMTP AUTH を使う場合には
# AUTH_CRAM_MD5=yes
# AUTH_PLAINTEXT=yes
← のコメントを外したりします。
← 使用しているツールのディレクトリを/binに変更する。
COMPRESS_COMMAND=/bin/gzip
ZCAT_COMMAND=/bin/zcat
コンパイル開始します。
生成されたx86用の実行ファイルeximをバックアップする
ARM用のexim4をコンパイルする
pcreをコンパイルする。
# make clean
# ./configure --host=arm-linux --enable-utf8 --enable-unicode-properties
# make
# make DESTDIR=/arm-rootfs install
Berkeley DBをコンパイルする。
# mkdir build_arm_linux
# cd build_arm_linux
# ../dist/configure CC=arm-linux-gcc --host=arm
# make
生成したファイルdb.hとlibdb-5.1.aを/arm-rootfsにコピーする。
# cp libdb-5.1.a /arm-rootfs/usr/local/lib
# ln -s /arm-rootfs/usr/local/lib/libdb-5.1.a /arm-rootfs/usr/local/lib/libdb.a
opensslをコンパイルする
# cd openssl-0.9.8q
# ./Configure --prefix=/arm-rootfs os/compiler:arm-linux-gcc
# make
# make install
exim4をコンパイルする。
# make clean
Local/Makefile を再編集して、TLSなどを添加する。
← 受信関連の設定 SUPPORT_MAILDIR=yes SUPPORT_MAILSTORE=yes SUPPORT_MBX=yes ← TLS認証の設定 SUPPORT_TLS=yes TLS_LIBS=-L/arm-rootfs/lib -lssl -lcrypto TLS_INCLUDE=-I/arm-rootfs/include/
再コンパイルする
生成されたARM用の実行ファイルeximをバックアップする
インストールする
# make DESTDIR=/arm-rootfs install
インストール途中、このようなエラー「./exim: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory」があるかもしれません。次のコマンドで直します。
バックアップされたARM用の実行ファイルeximをリストアする
生成されたファイルをARMボードにコピーする。
- eximのディレクトリ/arm-rootfs/usr/eximをARMボードの/usr/eximにコピーする。
- pcreライブラリ/arm-rootfs/usr/local/lib/libpcre.so.0.0.1をARMボードの/libにコピーする。
- 「ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.0」でリンクを作る。
Local/Makefileファイルには次の行がありますので、
aliasesファイルの編集
# Person who should get root's mail. Don't receive mail as root! root: your@mail-address.jp # Basic system aliases -- these MUST be present MAILER-DAEMON: root postmaster: root
eximを実行してみます。
[root@kaneBeBeIII]# /usr/exim/bin/exim
2011-02-01 21:43:02 cannot run initgroups(): no passwd entry for uid=8
mail:x:8:8:root:/home/exim:/bin/sh ← この行を追加する
eximを再実行してみます。
Exim is a Mail Transfer Agent. It is normally called by Mail User Agents, not directly from a shell command line. Options and/or arguments control what it does when called. For a list of options, see the Exim documentation.
exim の動作のほとんどは、実行時(プロセス起動時)に読まれるコンフィギュレーションファイル (以下 confファイル) によって決定されます。confファイルは、デフォルトでは /usr/exim/configure にインストールされます。
exim は強力で、その軽さの割に sendmail でできることの大半を実現しています。そのため、このconfファイルの設定項目は非常に膨大になりえます。ただ、普通のメールサーバーとして動作させるには、以下の項目を変更すればとりあえず動作します。
以下、ドメイン kanebebe.mydns.jp のメールを取り扱い、社内ネットワーク192.168.1.0/24、VPN10.8.0.0/24 になるような環境を前提にします。以下は変更点です。
primary_hostname = kanebebe.mydns.jp hostlist relay_from_hosts = 127.0.0.1 : 192.168.1.0/24 : 10.8.0.0/24 host_lookup = !127.0.0.0/8 : !192.168.1.0/24 : !10.8.0.0/24 : * rfc1413_hosts = !127.0.0.0/8 : * ← 非固定IPアドレスなので、メールを送信できない。スマートホストで送信する。 Gmailをスマートホストに設定する。以下はgmail関連の追加設定です。 begin routers ← ここの最後にgmailルータを追加する。 gmail_route: driver = manualroute transport = gmail_relay route_list = * smtp.gmail.com begin transports ← ここの最後にgmailリレーを追加する。 gmail_relay: driver = smtp port = 587 hosts_require_auth = $host_address hosts_require_tls = $host_address begin authenticators ← ここの最後にgmailの認証を追加する。 gmail_login: driver = plaintext public_name = LOGIN hide client_send = : youraccount@gmail.com : yourpassword
exim をデーモンとして起動します。
次のコマンドで確認する。
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
telnetでメール送信
220 kanebebe.mydns.jp ESMTP Exim 4.74 Fri, 04 Feb 2011 18:39:18 +0900
MAIL FROM: from@yourdomain.com
250 OK
RCPT TO: tomail@example.com
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
From: from@yourdomain.com
To: tomail@example.com
Subjet: test
Hello world.
.
250 OK id=1PlI8h-0000F9-8Z
quit
221 kanebebe.mydns.jp closing connection
Connection closed by foreign host
mailxでメール送信
mailxのソースコード: http://sourceforge.net/projects/heirloom/
mailxのコンパイル: 生成された実行ファイルmailxをボードの/binにコピーする。ボードには次のコマンドであるリンクを作ります。
メール送信例1:
This is test.← 入力したメールの内容。
Ctrl+D ← 入力終了、送信。
[root@kaneBeBeIII]#
メール送信例2:
※ 「example.com」はARMサーバ自身(例はkanebebe.mydns.jp)なら、ローカルのユーザに送信する。受信した内容が/var/mailに見える。
外部のメールサーバもARMサーバに送信できる。受信した内容も/var/mailに見える。やってみます。
アベンタスログイン
POP3サーバはpopa3dを利用する。# cd popa3d-1.0.2
# gedit params.h ← パラメータファイルを下のように変更する。
#define POP_STANDALONE 1 #define AUTH_PASSWD 1 #define AUTH_SHADOW 0# gedit Makefile ← Makefileの変更点。
# LIBS += -lcrypt ← コメントを外したりします。# make CC=arm-linux-gcc ← ARM用の実行ファイルをコンパイルする。
ARMサーバ側の実行:
[root@kaneBeBeIII]# /bin/popa3d -D
次のコマンドで確認する。
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
現在OutlookでARMメールサーバへアクセスできるようになります!
フソタオ交換
Fetchmailは、POSIX互換オペレーティングシステム向けのオープンソースソフトウェアで、メールサーバからPOP3、IMAP、ETRN、OMDRといったプロトコルを使って電子メールをユーザーのローカルシステムに持ってくる。まず、x86版のopensslをコンパイルする。
# cd openssl-0.9.8q
# ./Configure --prefix=/openssl os/compiler:cc
# make
# make install
コンフィグ完了すると、ARM版のopensslをコンパイルする。
# ./Configure --prefix=/openssl os/compiler:arm-linux-gcc
# make clean
# make
# make install
ARM版opensslを生成した後、fetchmailをコンパイルする。
# make CC=arm-linux-gcc
ARMボード側の/etc/servicesファイルを編集する。
pop3s 995/tcp pop-3s ← 行を添加する。
ARMボード側のホーム・ディレクトリに設定ファイル.fetchmailrcを用意します。次は設定例です。
set no bouncemail set postmaster root defaults protocol POP3 no mimedecode poll pop.gmail.com user username pass passwd ssl is kanebebe here
fetchmailを実行してみます。「-v」オプションは接続の詳しい情報を表示する。
set no bouncemail set postmaster root defaults protocol POP3 no mimedecode poll pop.gmail.com user username pass passwd ssl sslfingerprint '6B:C4:63:......' is kanebebe here
もう一度fetchmailを実行してみます。警告がないはずです。fetchmailは外部メールサーバから受信して、ローカルメールサーバEximに渡し、Eximは指定されたユーザ(例はkanebebe)に再送信する。
定期的に実行する
mycrontabに/bin/fetchmailを添加する
0,10,20,30,40,50 * * * * /bin/ddns-update.sh > /dev/null 2>&1
0 12 * * * /bin/ntpdate.sh > /dev/null 2>&1
0,10,20,30,40,50 * * * * /bin/fetchmail > /dev/null 2>&1 ← 毎10分に実行する。
バイナンスはFCAによって規制されています
外付けFAXモデムは、USB シリアル変換器を経由して USB ポートへARMボードへ接続します。外付けFAXモデムは、デバイス・ドライバを必要としません。外付けFAXモデムを使って、FAXサーバーを構築しました。受信FAXはe-mailに添付して送ってきてくれますし、送信はスクリプトで一発です。便利です。
概要 FI 交換
Linux 上で FAX を送受信する場合、 efax を用いるのが簡単なようです。ここでは、 efax 単体で送受信が出来るように設定します。生成された実行ファイルefax, efixとスクリプトfaxをボードの/binにコピーする。
設定はスクリプト /bin/fax を編集することで行います。
DEV=ttyUSB0 ← モデムが接続されているシリアル・ポートを設定します。 FROM="+81 42 343 4536" ← モデムを接続している電話回線の電話番号を指定します。 NAME="Nissin Tech Corp." ← 送信者名を指定します。 PAGE=a4 ← 送信のページサイズ TELCVT='sed -e s/+81 */0/' # Japan ← 電話番号の変換方法を指定します。 FAXDIR=/efax ← 受信したFAXの保存先 LOGDIR=/var/log/fax CONSOLE=$LOGDIR/efax-console.log ← efax のコンソール出力を保存するファイルを指定します。 FAXMGR=your@mailaddress.com ← 受信したFAXを電子メールに転送する。 SENDMAIL=/usr/exim/bin/exim ← 送信ツールを指定する。 ANSRINGS=6 ← FAX の受信を開始するまでのベルの数を指定します。
efax用のディレクトリを作る。
[root@kaneBeBeIII]# mkdir -m 777 -p /var/log/fax
[root@kaneBeBeIII]# mkdir -m 777 -p /efax
テキストファイルのFAX送信テスト
直接tiff(G3)フォーマットのFAXファイルを送信する。
FAX受信テスト
自動的にFAX受信する
一般的なLinuxの/etc/inittabファイルに以下の記述を追加すれば、自動受信が可能になります。
s1:2345:respawn:/bin/sh /bin/fax answer
ARMボードにはこのように設定すると、システムが起動不能になります。その為、以下のスクリプトを作ります。
#! /bin/sh while test -c /dev/ttyUSB0 done /bin/fax answer done
スクリプト/bin/fax.shを実行させます。
[root@kaneBeBeIII]# /bin/fax.sh &
ゴルフ交換
MinicomはLinux環境でよく使われているターミナルソフトウェアです。ソースコードのダウンロードと解凍
ncursesのコンパイル
# ./configure CC=arm-linux-gcc --prefix=/minicom/ncurses-5.7/install --host=arm-linux CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.4.3/include LDFLAGS=-L/opt/FriendlyARM/toolschain/4.4.3/lib
# make
minicomのコンパイル
# ./configure CC=arm-linux-gcc --prefix=/minicom/minicom-2.4/install --host=arm-linux CPPFLAGS=-I/minicom/ncurses-5.7/include LDFLAGS=-L/minicom/ncurses-5.7/lib --enable-cfg-dir=/etc/minicom
minicom-2.4/src/Makefileを編集して、生成したncursesライブラリを静態リンクします。
minicom_LDADD = $/home/ubuntu/minicom/ncurses-5.7/lib/libncurses.a $(MINICOM_LIBPORT)
生成されたminicomをボードの/binにコピーする。
パソコン側のLinuxの/usr/share/terminfoディレクトリにはターミナルの定義ファイルです。念のために全てをボードの/usr/share/にコピーする。
パソコン側のLinuxの/etc/minicom/minirc.dflファイルもボードの/etc/minicomにコピーする。次はのminirc.dfl例です。viコマンドでも編集できます。
# Machine-generated file - use "minicom -s" to change parameters. pu port /dev/ttyUSB0 pu baudrate 115200 pu bits 8 pu parity N pu stopbits 1 pu rtscts No
ボードの環境変数の設定:
この環境変数の設定も/etc/profileに編集すれば。起動の時、環境変数を自動的に設定します。
設定した後、minicomを実行してみます。
tftpdサーバの設定
tftpdは既にボードに実装されました。tftpdサーバを有効になったら、次の設定:
69 dgram udp nowait root /usr/bin/tftpd /usr/bin/tftpd /files/to/serve← この行を追加する
フラクタル交換
Tesseractは画像から文字を読むソフト・ライブラリです。どうやら Google 先生が開発を支援しているらしい OCR。言語(日本語や英語など)ごとに辞書が用意されているため、それを切り替える事でさまざまな言語の文字読み取りに対応できるらしい。tesseractはleptonicaという画像解析ライブラリに依存しております。まず、leptonicaをコンパイルする
# cd leptonica-1.70
# ./configure --build=i686-linux --host=arm-linux --target=arm-linux CFLAGS=-I/opt/FriendlyARM/toolschain/4.4.3/include LDFLAGS=-L/opt/FriendlyARM/toolschain/4.4.3/lib CC=arm-linux-gcc CXX=arm-linux-g++ --prefix=/leptonica
# make
# make install
Tesseract OCRのプロジェクトページからライブラリのソースなどをダウンロードします。Google Project Hostingで管理されており、以下のページからダウンロードできます。
tesseract-ocr - Google Project Hosting
http://code.google.com/p/tesseract-ocr/
ダウンロードリスト
http://code.google.com/p/tesseract-ocr/downloads/list
現時点の最新リリースバージョンはVer.3.02です。
# cd tesseract-ocr
# ./autogen.sh
# ./configure --build=i686-linux --host=arm-linux --target=arm-linux CFLAGS=-I/leptonica/include LDFLAGS=-L/leptonica/lib CC=arm-linux-gcc CXX=arm-linux-g++ LIBLEPT_HEADERSDIR=/leptonica/include --prefix=/tesseract
# make
# make install
生成されたディレクトリ/leptonicaと/tesseractをすべてボードのルート/にコピーする。libディレクトリのファイルをすべて/libにコピーする
Tesseract用の言語データ(英語)tesseract-ocr-3.02.eng.tar.gzを/tesseract/share/tessdataに解凍する。
とりあえずテストしてみましょう。 tesseractはコマンドラインのツールも付属していて、このプログラムに画像を食わせると、解析結果をテキストファイルにして吐き出してくれます。
tesseractのライブラリを使用すると、自作プログラムに画像の文字を読ませる。詳しくのはGoogleでご参照ください。
ゲームNFT交換

このボードのUSB-SPI変換器(PIC18G14K50)はCDCクラスを採用して、Linux環境でも使えます。
まず、Linuxカーネルをコンフィグして、

Device DriversのUSB supportのUSB Modem (CDC ACM) supportを選択して、

KaneBeBe ARM9/2440を接続する様子
ARM9/2440のコンソールで次のコマンドを入力すると、ボードが見えます。
/dev/ttyACM0
minicomを設定して、/dev/ttyACM0をアクセスする。
┌──[configuration]──── │ Filenames and paths │ File transfer protocols │ Serial port setup ← 選択する。 │ Modem and dialing │ Screen and keyboard │ Save setup as dfl ← 設定完了後、保存する。 │ Save setup as.. │ Exit │ Exit from Minicom └───────────── ┌───────────────────── │ A - Serial Device : /dev/ttyACM0 ← CDCシリアルポートを選択する。 │ B - Lockfile Location : /var/lock │ C - Callin Program : │ D - Callout Program : │ E - Bps/Par/Bits : 115200 8N1 │ F - Hardware Flow Control : No │ G - Software Flow Control : No │ │ Change which setting? └─────────────────────
minicomを起動させて、ボードを操作してみよう。
Welcome to minicom 2.4 OPTIONS: I18n Compiled on Dec 26 2010, 01:45:17. Port /dev/ttyACM0 Press CTRL-A Z for help on special keysまずCtrl-A Zを入力して、設定します。
┌───────────────────────────────── │ Minicom Command Summary │ │ Commands can be called by CTRL-AEを入力して「local Echo on」に設定する。ボードのコマンドを入力して体験する。│ │ Main Functions Other Functions │ │ Dialing directory..D run script (Go)....G | Clear Screen.......C │ Send files.........S Receive files......R | cOnfigure Minicom..O │ comm Parameters....P Add linefeed.......A | Suspend minicom....J │ Capture on/off.....L Hangup.............H | eXit and reset.....X │ send break.........F initialize Modem...M | Quit with no reset.Q │ Terminal settings..T run Kermit.........K | Cursor key mode....I │ lineWrap on/off....W local Echo on/off..E | Help screen........Z │ Paste file.........Y | scroll Back........B │ │ Select function or press Enter for none. │ │ Written by Miquel van Smoorenburg 1991-1995 │ Some additions by Jukka Lahtinen 1997-2000 │ i18n by Arnaldo Carvalho de Melo 1998 └─────────────────────────────────
E ← 「E」と打ち込んでリターン・キーを押してみましょう。 A ← 「A」と返ってきたら接続成功です。 C08000A ← 「C08000A」をADCモード・レジスタに書き込む。 A ← 正常なら「A」が返ってきます。 RA ← 連続サンプリングでデータを10個読み出す。10回は16進表示で「A」なので「RA」と入力している。 000000 000000 000000 000000 000011 00002F 000007 000000 000000 000017 C101086 ← 内部温度センサーを選ぶためのレジスタを設定する。 A RA 34F325 34F305 34F301 34F2ED 34F312 34F32F 34F326 34F338 34F332 34F32B 温度の換算: 電圧[V] = 34F325 ÷ 16777216 × 1.17 ÷ 1 = 0.241997057 0.81mV/℃より、 温度 = 0.241997057 ÷ 0.81 × 1000 = 298.76K ここへ、-273.15(0K)を加えると 298.76K - 273.15 = 25.61℃ ということになります。
PRNCアプリ
PC/SC (Personal Computer/Smart Card)は、Windows環境でICカードを利用するための標準アプリケーションインターフェイス仕様である。Microsoftは、ICカードを認識するアプリケーション開発するための、デバイスに依存しないAPIを提供している。CCID規格(Chip Card Interface Device)はリーダライタとコンピュータの標準インターフェイスです、メーカーが異なっても、カードとリーダライタ間の相互運用が可能となる。デバイスに依存しない API があれば、アプリケーション開発者は、現在の実装と将来の実装の相違を気にする必要がなくなる。また、デバイスに依存しない API により、ハードウェアが変更されてもアプリケーションを使用できるため、ソフトウェアの開発費用を削減できる。Microsoft社が無償で提供する標準インターフェース仕様PC/SC APIを利用すれば、サブライセンスフィー等の追加費用も不要。
NFC(Near Field CommunicationはソニーとPhilips社が開発した、短距離無線通信規格。2003年12月にISO/IEC IS 18092として国際標準となった。
13.56MHzの電波を使い、10cm程度のごく近距離で100~400kbpsの双方向通信が可能。もともと、非接触式ICカードとして広く普及しているソニーの「FeliCa」や、Philips社の「Mifare」で使われていた通信方式である。
今回、市販のCCID規格準拠 NFC リーダライタを使って、Linux環境のPC/SC標準のオープンソースpcsc-liteを利用しています。FeliCaまたはMifareカードの番号を読み込んで、市販のUSB WiFi経由でHTTPS通信にて、インターネット上のサーバにデータを送信する。

① KaneBeBe III ARM9/2440 | ② CCID準拠NFCリーダライタ | ③ USB 無線LANアダプタ |
④ USB HUB | ⑤ FeliCaカード | ⑥ Mifareカード |
必要のソース
http://www.libusb.org/
pcsc-lite-1.7.2.tar.bz2
ccid-1.4.3.tar.bz2
http://pcsclite.alioth.debian.org/
libusbをコンパイルする
# cd libusb-1.0.8
# ./configure --host=arm-linux --prefix=/pcsc
# make
# make install
ライブラリの設定:
# export LD_LIBRARY_PATH=/pcsc/lib:$LD_LIBRARY_PATH
pcsc-liteをコンパイルする
# cd pcsc-lite-1.7.2
# ./configure --host=arm-linux --prefix=/pcsc --enable-libusb --disable-libudev --enable-usbdropdir=/pcsc/drivers
# make
# make install
# cp src/.libs/testpcsc /pcsc/sbin ← テスト用のプログラムもコピーする
ccidをコンパイルする
# cd ccid-1.4.3
# ./configure --host=arm-linux --prefix=/pcsc --enable-usbdropdir=/pcsc/drivers
# make
# make install
生成されたディレクトリ/pcscをボードのルートにコピーする。次のコマンドでPCSCデーモンを起動させる。
ICカードをテストする
MUSCLE PC/SC Lite unitary test Program THIS PROGRAM IS NOT DESIGNED AS A TESTING TOOL FOR END USERS! Do NOT use it unless you really know what you do. Testing SCardEstablishContext : Command successful. Testing SCardIsValidContext : Command successful. Testing SCardIsValidContext : Invalid handle. (don't panic) Testing SCardListReaderGroups : Command successful. Group 01: SCard$DefaultReaders Testing SCardFreeMemory : Command successful. Testing SCardListReaders : Command successful. Testing SCardListReaders : Command successful. Reader 01: ACS ACR122U PICC Interface 00 00 Waiting for card insertion :← ICカードをタッチしてください Testing SCardConnect : Command successful. Select file: 00 A4 00 00 02 3F 00 Testing SCardTransmit : Command successful. card response: 63 00 Testing SCardControl : Transaction failed. (don't panic) Testing SCardGetAttrib : Command successful. SCARD_ATTR_DEVICE_FRIENDLY_NAME: ACS ACR122U PICC Interface 00 00 Testing SCardFreeMemory : Command successful. Testing SCardGetAttrib : Command successful. SCARD_ATTR_ATR_STRING length: 20 SCARD_ATTR_ATR_STRING: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 F0 11 00 00 00 00 8A Testing SCardFreeMemory : Command successful. Testing SCardGetAttrib : Command successful. Vendor IFD version : 0x01040003 Testing SCardGetAttrib : Command successful. Max message length : 261 Testing SCardGetAttrib : Command successful. Vendor name : Ludovic Rousseau Testing SCardSetAttrib : Transaction failed. (don't panic) Testing SCardStatus : Command successful. Current Reader Name : ACS ACR122U PICC Interface 00 00 Current Reader State : 0xd0034 Current Reader Protocol : T=1 Current Reader ATR Size : 20 bytes Current Reader ATR Value : 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 F0 11 00 00 00 00 8A Testing SCardFreeMemory : Command successful. Testing SCardFreeMemory : Command successful. Press enter: ← Enterキーを押してください Testing SCardReconnect : Command successful. Testing SCardDisconnect : Command successful. Testing SCardFreeMemory : Command successful. Testing SCardReleaseContext : Command successful. PC/SC Test Completed Successfully !
シンセシス交換
libnfcとはNFC (Near Field Communication : 近距離無線通信) デバイス(NXP社製PN53xシリーズ)を利用するためのライブラリである。Felica はNFCと下位互換性を維持している。
libnfcのソースとドキュメントを以下のサイトからダウンロードする。
http://www.libnfc.org/
# cd libnfc-1.4.2
# ./configure --host=arm-linux --with-drivers=pn532_uart --enable-serial-autoprobe
# make
# make install DESTDIR=/libnfc
※ 使うシリアルポートを自動的に探します。libnfc/buses/uart.hには探すシリアルポートの順番があります。Linux環境の探す順番は"/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3", "/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3"等、ボードの環境によって改修したほうがいいです。
生成されたライブラリ/libnfc/usr/local/lib/libnfc.so.1をボードの/libにコピーする。生成されたサンプルの実行ファイル/libnfc/usr/local/bin/nfc-listをボードの/binにコピーする。
写真はPN532 RFIDカードリーダ開発キット(下)とARM9/2440ボード(上)が一緒に動く様子です。PN532 RFIDカードリーダにはUSBシリアル変換チップがありますので、デバイス名は"/dev/ttyUSB0"です。
ボードでサンプルを実行させる:
nfc-list use libnfc 1.4.2 (r891) Connected to NFC device: PN532 (/dev/ttyUSB0) - PN532 v1.4 (0x07) ← 接続されたPN532を探した。 1 Felica (212 kbps) passive target(s) was found: ← 1枚FeliCaカード(212 kbps)を探した。 ID (NFCID2): 01 1a 00 4b 2c 0f ee 0c Parameter (PAD): 01 10 8b 42 8f be cb ff 1 Felica (424 kbps) passive target(s) was found: ← 1枚FeliCaカード(424 kbps)を探した。 ID (NFCID2): 01 1a 00 4b 2c 0f ee 0c Parameter (PAD): 01 10 8b 42 8f be cb ff[root@kaneBeBeIII]# nfc-list ← サンプルを実行させる。
nfc-list use libnfc 1.4.2 (r891) Connected to NFC device: PN532 (/dev/ttyUSB0) - PN532 v1.4 (0x07) ← 接続されたPN532を探した。 1 ISO14443A passive target(s) was found: ← 1枚ISO14443Aカードを探した。 ATQA (SENS_RES): 00 44 UID (NFCID1): 04 8a 37 71 fc 02 80 SAK (SEL_RES): 00
GMYX交換
USBバーコードリーダはUSB HIDクラスなので、一般的にLinux環境でキーボードとして直接使えます。あるUSBバーコードリーダをボードに挿入すると、次のメッセージ:
usb 1-1.3: new low speed USB device using s3c2410-ohci and address 3 usb 1-1.3: New USB device found, idVendor=1130, idProduct=0001 usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0 usb 1-1.3: Product: USB-TMU-V1 usb 1-1.3: configuration #1 chosen from 1 choice
カーネルソースlinux-2.6.32.2を見ると、HIDドライバはこの製品のidVendor=1130, idProduct=0001を無視しました。
~略~ #define USB_VENDOR_ID_TENX 0x1130 #define USB_DEVICE_ID_TENX_IBUDDY1 0x0001 ~略~
linux-2.6.32.2/drivers/hid/hid-core.cを直して、無視されたデバイスリストからコメントアウトします。
/* a list of devices that shouldn't be handled by HID core at all */ static const struct hid_device_id hid_ignore_list[] = { ~略~ ← 次の行を削除またはコメントアウトする // { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY1) }, ~略~
次のコマンドでLinuxカーネルを再コンパイルする
もう一度USBバーコードリーダを挿入すると、認識されました!
usb 1-1.3: New USB device found, idVendor=1130, idProduct=0001
usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 1-1.3: Product: USB-TMU-V1
usb 1-1.3: configuration #1 chosen from 1 choice
input: USB-TMU-V1 as /devices/platform/s3c2410-ohci/usb1/1-1/1-1.3/1-1.3:1.0/input/input1
generic-usb 0003:1130:0001.0001: input: USB HID v1.10 Keyboard [USB-TMU-V1] on usb-s3c24xx-1.3/input0
LCDがあれば、QT環境のターミナルまたはメモ帳などのアプリケーションを開いて、バーコードをスキャンしてみます。
コンソール環境のテスト用のCプログラムはusbkey.c以下です。
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <fcntl.h> #include <linux/input.h> //Should modify for your system #define KEY_DEV "/dev/input/event1" int main(int arg, char *arv[]) { static int fd = -1; static struct input_event event; char *KEY_DEV_NAME = KEY_DEV; if(arg > 1) KEY_DEV_NAME = arv[1]; if ( (fd = open(KEY_DEV_NAME, O_RDONLY)) < 0) { printf("Error open %s\n\n", KEY_DEV_NAME); exit(1); } while(1) { read(fd, &event, sizeof(event)); if (event.type == EV_KEY) printf(" type: EV_KEY, event = %d, value = %d\n", event.code, event.value); } //value:0——up 1——down 2——continue return 0; }
次のコマンドでコンパイルする
生成された実行ファイルusbkeyをボードの/binにコピーして、次のようなテストします。
type: EV_KEY, event = 4, value = 1 ← USBバーコードリーダがスキャンした結果 type: EV_KEY, event = 4, value = 0 type: EV_KEY, event = 9, value = 1 type: EV_KEY, event = 9, value = 0 type: EV_KEY, event = 9, value = 1 type: EV_KEY, event = 9, value = 0 type: EV_KEY, event = 11, value = 1 type: EV_KEY, event = 11, value = 0 type: EV_KEY, event = 5, value = 1 type: EV_KEY, event = 5, value = 0 type: EV_KEY, event = 7, value = 1 type: EV_KEY, event = 7, value = 0 type: EV_KEY, event = 28, value = 1 type: EV_KEY, event = 28, value = 0
STKFログイン
|
![]() | ||




次のコマンドでLinuxカーネルを再コンパイルする
必要ののソースコード:
http://expat.sourceforge.net/
dbus-1.4.8.tar.gz
gate.io
glib-2.22.5.tar.bz2
http://www.gtk.org/
libusb-0.1.12.tar.gz
http://www.libusb.org/
bluez-4.91.tar.gz
http://www.bluez.org/
expatをコンパイルする。
# cd expat-2.0.1
# ./configure --prefix=/bluez --host=arm-linux
# make
# make install
dbusをコンパイルする。
# cd dbus-1.4.8
# ./configure --prefix=/bluez --host=arm-linux CC="arm-linux-gcc -I/bluez/include -L/bluez/lib" --with-x=no
# make
# make install
glibをコンパイルする。
# cd glib-2.22.5
# echo ac_cv_type_long_long=yes>arm-linux.cache
# echo glib_cv_stack_grows=no>>arm-linux.cache
# echo glib_cv_uscore=no>>arm-linux.cache
# echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
# echo ac_cv_func_posix_getgrgid_r=yes>>arm-linux.cache
# ./configure --prefix=/bluez --host=arm-linux --cache-file=arm-linux.cache
# make
# make install
libusbをコンパイルする。
# cd libusb-0.1.12
# ./configure --prefix=/bluez --host=arm-linux
# make
# make install
ライブラリの設定:
# export LD_LIBRARY_PATH=/bluez/lib:$LD_LIBRARY_PATH
bluezをコンパイルする。
# cd bluez-4.91
# ./configure --prefix=/bluez --host=arm-linux CC="arm-linux-gcc -I/bluez/include -L/bluez/lib"
# make
# make install
生成されたディレクトリ/bluezをボードのルートにコピーする。次のコマンドで動作確認する。
[root@kaneBeBeIII]# /bluez/sbin/hciconfig ← Bluetoothアダプタの状態を確認する
hci0: Type: BR/EDR Bus: USB BD Address: 00:1F:81:00:02:50 ACL MTU: 1021:4 SCO MTU: 180:1 UP RUNNING RX bytes:348 acl:0 sco:0 events:11 errors:0 TX bytes:38 acl:0 sco:0 commands:11 errors:0
Scanning ... 00:1C:88:30:F9:8A 887 GPS 00:12:6F:22:FC:C4 Serial Adapter 00:11:09:22:06:95 IRXON
[root@kaneBeBeIII]# cd /bluez/var/lib/bluetooth
[root@kaneBeBeIII]# mkdir 00:1F:81:00:02:50 ← 00:1F:81:00:02:50はホスト側のBluetoothアダプタのアドレス
[root@kaneBeBeIII]# cd 00:1F:81:00:02:50
[root@kaneBeBeIII]# echo "00:1C:88:30:F9:8A 0000" >> pincodes ← Bluetooth GPSのペアリング
[root@kaneBeBeIII]# echo "00:12:6F:22:FC:C4 1234" >> pincodes ← Bluetooth RS232変換器のペアリング [root@kaneBeBeIII]# echo "00:11:09:22:06:95 0000" >> pincodes ← Bluetoothシリアル変換モジュール
Failed to start message bus: Could not get UID and GID for username "messagebus"← このエラーを解消するために、次のコマンドで"messagebus"というユーザを添加する。
[root@kaneBeBeIII]# useradd messagebus
Ping: 00:1C:EE:2F:CD:D0 from 00:1F:81:00:02:50 (data size 44) ... 44 bytes from 00:1C:88:30:F9:8A id 0 time 37.79ms 44 bytes from 00:1C:88:30:F9:8A id 1 time 20.10ms 44 bytes from 00:1C:88:30:F9:8A id 2 time 23.08ms 44 bytes from 00:1C:88:30:F9:8A id 3 time 20.13ms 4 sent, 4 received, 0% loss
[root@kaneBeBeIII]# /bluez/bin/sdptool browse 00:1C:88:30:F9:8A
Browsing 00:1C:88:30:F9:8A ... Service Name: SPP slave Service RecHandle: 0x10000 Service Class ID List: "Serial Port" (0x1101) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 1 Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100
[root@kaneBeBeIII]# cat /dev/rfcomm0 ← watch the NMEA strings coming from the bluetooth GPS
$GPGGA,013709.000,,,,,0,0,,,M,,M,,*44 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $GPGSV,2,1,08,06,81,269,,03,63,250,31,16,60,333,22,31,38,143,*7E $GPGSV,2,2,08,21,32,069,,19,32,227,,23,31,269,,13,26,299,*78 $GPRMC,013709.000,V,,,,,0.00,160.49,190911,,,N*4A $GPGGA,013710.000,,,,,0,0,,,M,,M,,*4C
[root@kaneBeBeIII]# cat /dev/rfcomm1 ← watch the character coming from the bluetooth RS232
1234567890abcdefg ← Coming from the bluetooth RS232
パラレル暗号ゲーム
RTSP はオーディオ、ビデオなどのマルチメディア・データをふくむサーバを遠隔操作するためのプロトコルであり、テープレコーダのように再生、停止、記録 (録音) などの操作ができる。
LIVE555 is an open source (LGPL) C++ library for multimedia streaming.[1] It supports open standards such as RTP/RTCP, RTSP, SIP for streaming, and can also manage video and audio formats such as MPEG, H.263+ JPEG video. It is designed in such a way that it can be easily extended to support more formats.
必要のソースコード
live555をコンパイルする# cd live
# chmod +w config.armlinux
# gedit config.armlinux
CROSS_COMPILE?= arm-linux- ← コンパイルツールをarm-linuxに変更する。
......
# ./genMakefiles armlinux
# make
生成された実行ファイルmediaServer/live555MediaServerをボードの/binにコピーします。ボードのコンソールで次のコマンドでMedia Serverを起動させます。
← 起動のディレクトリでサンプル用のメディアファイルを保存する。
[root@kaneBeBeIII]# wget http://kanebebe.mydns.jp/download/ARM9-2440-DVD/Linux/apache/panda.mpg
[root@kaneBeBeIII]# /bin/live555MediaServer ← Media Serverを起動させます。
LIVE555 Media Server version 0.74 (LIVE555 Streaming Media library version 2012.01.25). Play streams from this server using the URL rtsp://192.168.1.200/<filename> whereis a file present in the current directory. Each file's type is inferred from its name suffix: ".264" => a H.264 Video Elementary Stream file ".aac" => an AAC Audio (ADTS format) file ".ac3" => an AC-3 Audio file ".amr" => an AMR Audio file ".dv" => a DV Video file ".m4e" => a MPEG-4 Video Elementary Stream file ".mkv" => a Matroska audio+video+(optional)subtitles file ".mp3" => a MPEG-1 or 2 Audio file ".mpg" => a MPEG-1 or 2 Program Stream (audio+video) file ".ts" => a MPEG Transport Stream file (a ".tsx" index file - if present - provides server 'trick play' support) ".wav" => a WAV Audio file ".webm" => a WebM audio(Vorbis)+video(VP8) file See http://www.live555.com/mediaServer/ for additional documentation. (We use port 8000 for optional RTSP-over-HTTP tunneling, or for HTTP live streaming (for indexed Transport Stream files only).)
windows側はVLCを利用します。VLCで「rtsp://MediaServer IP address/panda.mpg」を入力すると、メディアが見えます。
ルートプロトコルアプリ
MPlayer(エムプレーヤー)は、オープンソースのメディアプレーヤーである。GNU General Public License下で配布されるフリーソフトウェアであり、Linux・UNIXライクなOS・Mac OS X・Windowsなど多くのOSに対応している。LIVE555のメディアストリーム・ライブラリを利用すれば、インターネットラジオ・テレビとして使えます。
MPlayer内部のMP3デコーダは浮動小数点演算を使っているので、FPUがないARMプロセッサーで動けば遅いです。libmadはデコードが早くて精度も高く、かつ移植性が良いのでかなり優秀です。利用します。
必要のソースコード
http://www.archlinux.org/packages/extra/i686/libmad/
live555-latest.tar.gz
http://www.live555.com/
MPlayer-1.0rc4.tar.gz
http://www.mplayerhq.hu/design7/news.html
# cd libmad-0.15.1b
← This removes an obsolete compilation option that causes compilation to fail under GCC 4.4.x
# sed -i '/-fforce-mem/d' configure
# CC=arm-linux-gcc ./configure --prefix=$PWD/../libmad --enable-fpm=arm --host=arm-linux --disable-debugging --enable-shared --enable-static
# make
# make install
live555をコンパイルする
# cd live
# chmod +w config.armlinux
# gedit config.armlinux
CROSS_COMPILE?= arm-linux- ← コンパイルツールをarm-linuxに変更する。
......
# ./genMakefiles armlinux
# make
# cd ..
# cp -r live /usr/local/lib ← MPlayer用のためにライブラリをコピーする。
MPlayerをコンパイルする
# cd MPlayer-1.0rc4
# ./configure --prefix=$PWD/../mplayer --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux --disable-gui --enable-fbdev --disable-dvdread --disable-mp3lib --disable-win32dll --disable-mencoder --disable-ivtv --disable-dvdnav --disable-dvdread-internal --disable-libdvdcss-internal --enable-libavcodec_a 2>&1 | tee logfile
# make
libmepg2/motion_comp_s.S: Error: selected processor does not support `pld [r1]''
ARM9には「PLD」命令がありません、ibmepg2/motion_comp_s.Sを編集する。
← ファイルの先頭に次のマクロを添加する。 #ifndef HAVE_PLD .macro pld reg .endm #endif
無事コンパイル完了すると、インストールします。
install -m 755 -s mplayer /home/hxy/MPlayer/ MPlayer-1.0rc4/../mplayer/bin strip: Unable to recognise the format of the input file `/user/local/Mplayer/MPlayer-1.0rc4/../mplayer/bin/mplayer'ARM用の実行ファイルが生成されたので、X86用のstripが使えません。Makefileを編集する。
......
$(INSTALL) -m 755
......
生成された実行ファイルmplayer/mplayerをボードの/binにコピーします。
生成されたlibmadライブラリlibmad/lib/libmad.so.0.2.1をボードの/libにコピーします。関連のリンクを作ります。実はボードにはlibmadライブラリが既にあります。このステップを省略しでも大丈夫です。
[root@kaneBeBeIII]# ln -s /lib/libmad.so.0.2.1 /lib/libmad.so
mplayerのテスト:
[root@kaneBeBeIII]# mplayer panda.mpg -vo fbdev2 -fs
← オーディオファイルの再生
[root@kaneBeBeIII]# mplayer NewSoul.mp3 -vo null
← インターネット放送局を作ったら
[root@kaneBeBeIII]# mplayer rtsp://192.168.1.200/panda.mpg -vo fbdev2
← インターネット上のラジオ放送局
[root@kaneBeBeIII]# mplayer -quiet -vo null http://wms.shibapon.net/FmKushiro ← FMくしろ
[root@kaneBeBeIII]# mplayer -quiet -vo null mms://wm2.hvc.co.jp/sankakuyama ← 三角山放送局
← インターネットのビデオ放送
[root@kaneBeBeIII]# mplayer mms://media.chinabroadcast.cn/japanese/111128cinema.wmv -vo fbdev2 -vf scale=320:180
ARM9の性能不足なので、インターネットビデオの再生の実用性がありません。
大混乱のログイン
ボード(V5.0以降)にはSPIポートがあります。SPIポートでほかのMCUまたはFPGAと通信できます。
まず、次の画面を通りに、カーネルををコンフィグする。


ソースコードarch/arm/mach-s3c2440/mach-mini2440.cに下の内容を添加する。
~略~ #include <sound/s3c24xx_uda134x.h> //spi add by nissin-tech #include <linux/spi/spi.h> #include <mach/spi.h> static struct spi_board_info s3c2410_spi0_board[] = { [0] = { .modalias = "spidev", .bus_num = 0, .chip_select = 0, .irq = IRQ_EINT9, //IRQ_TIMER0 .max_speed_hz = 2500*1000, }, }; static struct s3c2410_spi_info s3c2410_spi0_platdata = { .pin_cs = S3C2410_GPG(2), .num_cs = 1, .bus_num = 0, }; //end add spi ~略~
関数__init mini2440_machine_initに下の内容を添加する。
~略~ static void __init mini2440_machine_init(void) { //spi add by nissin-tech s3c_device_spi0.dev.platform_data=&s3c2410_spi0_platdata; spi_register_board_info(s3c2410_spi0_board,ARRAY_SIZE(s3c2410_spi0_board)); //end add spi ~略~
配列mini2440_devicesに「&s3c_device_spi0」を添加する。
~略~ static struct platform_device *mini2440_devices[] __initdata = { &s3c_device_usb, &s3c_device_rtc, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &mini2440_device_eth, &s3c24xx_uda134x, &s3c_device_nand, &s3c_device_sdi, &s3c_device_usbgadget, &s3c_device_spi0,// add by nissin-tech };
ソースコードdrivers/spi/spi_s3c24xx.cに下の内容を添加する。
~略~ #include <mach/spi.h> #include <mach/regs-gpio.h> //add by nissin-Tech
関数s3c24xx_spi_initialsetupの最後、次の内容を添加する。
~略~ // add by nissin-Tech s3c2410_gpio_cfgpin(hw->pdata->pin_cs,S3C2410_GPIO_OUTPUT); s3c2410_gpio_cfgpin(0x8B, S3C2410_GPIO_SFN2); s3c2410_gpio_cfgpin(0x8C, S3C2410_GPIO_SFN2); s3c2410_gpio_cfgpin(0x8D, S3C2410_GPIO_SFN2); // end add
カーネルを再コンパイルして、ボードに書き込む。ボードを起動させると、次のコマンドでSPIデバイスが見えます。
crw-rw---- 1 root root 153, 0 Jan 1 08:00 /dev/spidev0.0
ソースDocumentation/spi/spidev_test.cはSPIデバイスを使うサンプルです。spidev_test.cをコンパイルして、実行してみよう!
アートアプリ
Linuxには沢山のUSBシリアル変換チップのドライバがあります。USB CDCにも対応しています。ほとんどの市販のUSBシリアル変換ケーブルとUSBシリアル変換チップ内蔵のデバイスを直接使えます。LPC11C14はCAN機能付けLPC1114のアップデート版です。CANとCANopenプロトコル・ファームウェア内蔵しますので、簡単的にCAN通信プログラムを開発できます。LPC11C14開発キットにはUSBシリアル変換チップCP2102内蔵、簡単的にUSB-CAN変換器として使えます。
CAN通信実験の様子
二つのLPC11C14開発キットを使っている。リモートのLPC11C14はAD値をCANで発送する。ARM9/2440に接続しているLPC11C14開発キットはCANでこのAD値を受信して、そのままシリアルポートへ転送する。
LPC11C14開発キットにはサンプルCode\MCB11C14\CAN_Demoを書き込みます。二つのLPC11C14ボードを使えば、ソースコードCanDemo.cを下のように直します。
~略~ /* COMMENT THE LINE BELOW TO ENABLE DEVICE TO PARTICIPATE IN CAN NETWORK */ // CAN_testmode(); /* Loopback mode */← この行をコメントアウトする ~略~
ARM9/2440環境で次のコマンドでCAN通信の状態を監視する
Welcome to minicom 2.4 OPTIONS: I18n Compiled on Dec 26 2010, 01:45:17. Port /dev/ttyUSB0 ← LPC11C14を接続するUSBシリアルポート Press CTRL-A Z for help on special keys Tx:0x75, Rx:0xB2 ← リモートLPC11C14からのAD値
JPモルガン・クリプト・インベストメンツ
これまでコンパイルして作成した,自分ARM Linux用のコマンドやライブラリの多くには,デバッグなどに利用するシンボルの情報が含まれる。そのシンボル情報を取り除くだけで,ファイル・サイズを大幅に小さくできる。
シンボル情報の確認
シンボル情報を取り除くには,stripコマンドを用いる。使い方は次の通り。
なお,ライブラリ・ファイルのシュリンクを実施する際には,
数多くのコマンドやライブラリを一つずつ調べながら,stripコマンドを実行するのはかなり大変である。そこで自動スクリプト(arm-strip.sh)を利用しよう。
使い方は次の通りだ。まず,「arm-strip.sh」というファイル名で保存する。続いて,実行権限を与えてから実行する。
#!/bin/bash for i in `find . -type f` do A=`file $i | grep archive` if [[ ! -z $A ]];then echo "$i grep archive" arm-linux-strip -S $i fi B=`file $i | grep "not stripped"` if [[ ! -z $B ]];then echo "$i not stripped" C=`echo $i | grep so` if [[ ! -z $C ]];then echo "$i lib" arm-linux-strip -S $i else echo "$i exe" arm-linux-strip $i fi fi done
# cd arm-linux-roots
# ../arm-strip.sh
プロンプトが表示されたら,自分Linuxの容量を確認してみよう。
ETGM 順序交換
cURL はあるプロジェクトの名前です.この名前は "Client for URLs" にかけてあり,元は "URL" を大文字で書いて, URL を扱うものだというのをはっきり示すようにしていました.これは "see URL" (URL を見よ,参照せよ) とも発音できます.
curl は、サーバから、あるいはサーバへデータ伝送を行うツールです。対応するプロトコルは: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET, TFTP です。コマンドはユーザとの対話的操作を経なくとも動作するように設計されています。
curl には、プロクシのサポート, ユーザ 認証, FTP アップロード, HTTP POST, SSL 接続, クッキー, ファイル転送の再開などなど、便利な機能が満載されています。
curlもMac OS Xに標準で装備されている。
使い方はこちらをご参照ください。
http://www.zlib.net/
openssl-0.9.8q.tar.gz
http://www.openssl.org/
curl-7.21.4.tar.bz2
http://curl.haxx.se/
zlibをコンパイルする
# cd zlib-1.2.5
# CC=arm-linux-gcc ./configure --prefix=/opt/libs
# make
# make install
opensslをコンパイルする
# cd openssl-0.9.8q
# ./Configure --prefix=/opt/libs os/compiler:arm-linux-gcc
# make
# make install
curlをコンパイルする
# cd curl-7.21.4
# CC=arm-linux-gcc CXX=arm-linux-g++ ./configure --prefix=/curl --host=arm-linux --with-ssl=/opt/libs --with-zlib=/opt/libs --with-random=/dev/urandom
# make
# make install
ボードでHTTPS通信してみると、以下のエラーがでる。
curl: (77) error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none
アーク交換
回線がブロードバンド等でも、大容量ファイル等はダウンロードするのにけっこう時間がかかります。ARM自宅サーバは電力消費が少ない、超静音なので、徹夜にダウンロードすることができます。
ダウンロードツールはwgetまたはcURLを利用できますが、aria2というツールをお勧めします。aria2 は複数のサーバー / プロトコルからファイルをダウンロードできます。回線速度を有効に使った高速ダウンロードを実現。しかも、メモリや CPU 資源を大きく要求しません。HTTP/FTP ダウンロードでのメモリ使用は通常 4MiB, BitTorrent ダウンロードで 9MiB。 CPU 使用率は, BitTorrent ダウンロードで 2.8MiB/sec で 6% 前後。
必要のソースコードhttp://c-ares.haxx.se/
openssl-0.9.8q.tar.gz
http://www.openssl.org/
zlib-1.2.5.tar.gz
http://www.zlib.net/
sqlite-autoconf-3070500.tar.gz
http://www.sqlite.org/download.html
libxml2-sources-2.7.8.tar.gz
http://xmlsoft.org/
aria2-1.11.1.tar.bz2
http://aria2.sourceforge.net/index_ja.html
c-aresをコンパイルする
# ./configure --prefix=/arm-rootfs --host=arm-linux
# make
# make install
zlibをコンパイルする
# cd zlib-1.2.5
# CC=arm-linux-gcc ./configure --prefix=/arm-rootfs
# make
# make install
opensslをコンパイルする
# cd openssl-0.9.8q
# ./Configure --prefix=/arm-rootfs os/compiler:arm-linux-gcc
# make
# make install
libxml2のコンパイル
# cd libxml2-2.7.8
# CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/arm-rootfs
# make
# make install
# cd sqlite-autoconf-3070500
# mkdir build
# cd build
# ../configure CC=arm-linux-gcc --host=arm-linux --prefix=/arm-rootfs
# make
# make install
aria2をコンパイルする前に、ライブラリを設定する。
# export LD_LIBRARY_PATH=/arm-rootfs/lib:$LD_LIBRARY_PATH
aria2をコンパイルする。
# cd aria2-1.11.1
# ./configure --host=arm-linux --without-gnutls
# make DESTDIR=/aria2 install
最後、/aria2/usr/local/binにはaria2cという実行ファイルを生成します。aria2cをボードの/binにコピーします。関連のライブラリ/arm-rootfs/libもボードの/libにコピーします。
コマンドラインだからといって物怖じすることはありません。aria2 を使うのはかなり簡単です。 WEB からダウンロード
詳しいことはこちらをご参照ください。
nohupでコマンドを実行した場合は,ログアウトしてもプログラムを実行し続ける。長い処理を行っており,席を外したいときなどに使用すると便利である。ログアウトした後は,ジョブではなくプロセスとして管理することになる。また,処理中に出力されたメッセージは"nohup.out"に保存される。
例えば、大きいなファイルをダウンロードしたい場合
大きいなファイルで途中でダウンロードが止まった場合は -c でレジューム
暗号化ツイッター
Linphoneは、オープンソースのインターネット電話やボイスオーバーIP電話(VoIP)です。
Linphoneを使用すると、自由な声で、インターネット上で人とコミュニケーションすることができます。
Linphoneは、SIPプロトコルは、インターネット電話のためのオープン標準に準拠していますであるLinphoneはほとんどのSIP対応携帯電話やプロキシとの相互運用できるようになります。
LinphoneはALSAライブラリを必要です。ALSAとはAdvanced Linux Sound Architectureのことで、LinuxシステムにオーディオやMIDI(Musical Instrument Digital Interface)機能を提供します。 ALSAは2.6カーネルのデフォルトサウンドシステムであり、2.4カーネルで使用されていたOSS(Open Sound System)と置き換わっています。
まず、alsaライブラリを移植する。必要のソースhttp://www.gnu.org/software/ncurses/
alsa-lib-1.0.24.1.tar.bz2
alsa-utils-1.0.24.2.tar.bz2
http://www.alsa-project.org/main/index.php/Main_Page
ncursesをコンパイルする
# cd ncurses-5.7
# ./configure --prefix=/alsa-linphone --host=arm-linux --with-gnu-ld --with-shared
# make
# make install
alsa-libをコンパイルする
# cd alsa-lib-1.0.24.1
# ./configure --prefix=/alsa-linphone --host=arm-linux --disable-python --with-alsa-devdir=/dev
# make
# make install
alsa-utilsをコンパイルする前に、次の設定:
# cd /alsa-linphone/lib
# ln -s libform.so.5.7 libformw.so.5
# ln -s libmenu.so.5.7 libmenuw.so.5
# ln -s libncurses.so.5.7 libncursesw.so.5
# ln -s libpanel.so.5.7 libpanelw.so.5
# ln -s libform.so.5.7 libformw.so
# ln -s libmenu.so.5.7 libmenuw.so
# ln -s libpanel.so.5.7 libpanelw.so
# ln -s libncurses.so.5.7 libncursesw.so
alsa-utilsをコンパイルする
# cd alsa-utils-1.0.24.2
# CFLAGS="-I/alsa-linphone/include/ncurses" ./configure --prefix=/alsa-linphone --host=arm-linux --with-alsa-inc-prefix=/alsa-linphone/include --with-alsa-prefix=/alsa-linphone/lib
# make
# make install
生成されたディレクトリ/alsa-linphoneをボードのルートにコピーする。ボードには次のコマンドでリンクを作ります。
次のコマンドでalsaをテストする
[root@kaneBeBeIII]# ./aplay ../share/sounds/alsa/Front_Center.wav ← 再生、音声が聞こえるはず
[root@kaneBeBeIII]# ./amixer sset Mic 50% ← マイクの感度を設定する。
[root@kaneBeBeIII]# ./arecord -t wav -f dat myrecord.wav ← 録音する。Ctrl+Cで停止
[root@kaneBeBeIII]# ./aplay myrecord.wav ← 録音を再生する。
Linphone関連のソース
http://www.xiph.org/ogg/
speex-1.2rc1.tar.gz
http://www.speex.org/
libosip2-3.5.0.tar.gz
libeXosip2-3.5.0.tar.gz
http://www.gnu.org/software/osip/
readline-6.2.tar.gz
http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
linphone-3.4.3.tar.gz
http://www.linphone.org/
liboggをコンパイルする
# cd libogg-1.2.2
# ./configure --prefix=/alsa-linphone --host=arm-linux --disable-static
# make
# make install
speexをコンパイルする
# cd speex-1.2rc1
# ./configure --prefix=/alsa-linphone --host=arm-linux --with-gnu-ld --disable-static --enable-fixed-point --enable-arm-asm --with-ogg=/alsa-linphone
# make
# make install
readlineをコンパイルする
# cd readline-6.2
# ./configure --prefix=/alsa-linphone --host=arm-linux --disable-static
# make
# make install
libosipをコンパイルする
# cd libosip2-3.5.0
# ./configure --prefix=/alsa-linphone --host=arm-linux --with-gnu-ld --disable-static
# make
# make install
libeXosipをコンパイルする
# cd libeXosip2-3.5.0
# ./configure OSIP_CFLAGS=-I/alsa-linphone/include/ OSIP_LIBS="-L/alsa-linphone/lib -losip2 -losipparser2" --prefix=/alsa-linphone --host=arm-linux
# make
# make install
linphoneをコンパイルする前に、次のツールをインストールする
linphoneをコンパイルする
# cd linphone-3.4.3
# ./configure --host=arm-linux --prefix=/alsa-linphone --with-gnu-ld --disable-static --disable-glib --enable-alsa --with-osip=/home/cjx/source/linphone-arm/build/install/ --with-readline=/alsa-linphone SPEEX_CFLAGS="-I/alsa-linphone/include" SPEEX_LIBS="-L/alsa-linphone/lib -lspeex -lspeexdsp" OSIP_CFLAGS="-I/alsa-linphone/include" OSIP_LIBS="-L/alsa-linphone/lib -losip2 -leXosip2 -losipparser2" --disable-video --disable-gtk_ui
# make
# make install
生成されたディレクトリ/alsa-linphoneをボードのルートにコピーする。ボードには次のコマンドでlinphoneをテストする。
Ready Warning: video is disabled in linphonec, use -V or -C or -D to enable. linphonec> help ← ヘルプを入力すると Commands are: --------------------------- help Print commands help. call Call a SIP uri or number calls Show all the current calls with their id and status. chat Chat with a SIP uri terminate Terminate a call answer Answer a call pause pause a call resume resume a call transfer Transfer a call to a specified destination. mute Mute microphone and suspend voice transmission. unmute Unmute microphone and resume voice transmission. duration Print duration in seconds of the last call. autoanswer Show/set auto-answer mode proxy Manage proxies soundcard Manage soundcards webcam Manage webcams ipv6 Use IPV6 nat Set nat address stun Set stun server address firewall Set firewall policy call-logs Calls history friend Manage friends play play a wav file record record to a wav file quit Exit linphonec --------------------------- Type 'help' for more details or 'help advanced' to list additional commands. linphonec>
DAEMON(デーモン)として実行させる。
[root@kaneBeBeIII]# ./linphonecsh init ← デーモンとして起動させる。
← ある環境でデーモンが起動できないと、次のコマンドでデーモンを起動させる。
[root@kaneBeBeIII]# /alsa-linphone/bin/linphonec < /dev/null --pipe -c /dev/null > /dev/null 2>&1 &
← SIPサーバを接続する
[root@kaneBeBeIII]# ./linphonecsh register --host SIPサーバ --username account --password pwd
[root@kaneBeBeIII]# ./linphonecsh status register ← 接続する状態を調べる
[root@kaneBeBeIII]# ./linphonecsh status hook ← ほかのIP電話の呼びがあるかどうか、チェックする
[root@kaneBeBeIII]# ./linphonecsh generic "answer" ← 通話開始
[root@kaneBeBeIII]# ./linphonecsh generic "terminate" ← 通話停止
[root@kaneBeBeIII]# ./linphonecsh dial 101 ← ほかのIP電話へ呼びだす
[root@kaneBeBeIII]# ./linphonecsh generic "help" ← linphoneのヘルプ
ランドオブコンクエストエクスチェンジ
※ 特別説明がなければ、ホストLinux環境はubuntuです。※ 一部のソースのコンパイルはFedora環境でします。
環境変数.bashrcファイルを編集する。
# gedit /root/.bashrc ← スーパーユーザ用の環境
次の行を添加します。
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
Terminalを再起動させます。次のコマンドで確認します。
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1)
SEGWIT2X交換
ARMボードのモードをNor Flashに設定して、電源を入れて、ARM9ボードはNor Flashから起動します。USB-シリアル変換IC CP2102ドライバ・インストール方法解説
イメージファイルをダウンロードする用のドライバ
パソコン側のハイパーターミナルの設定:ボーレット115200, フロー制御なし。ボードに電源を投入した後、ハイパーターミナルの情報:
##### FriendlyARM BIOS 2.0 for 2440 ##### [x] format NAND FLASH for Linux [v] Download vivi [k] Download linux kernel [y] Download root_yaffs image [a] Absolute User Application [n] Download Nboot for WinCE [l] Download WinCE boot-logo [w] Download WinCE NK.bin [d] Download & Run [z] Download zImage into RAM [g] Boot linux from RAM [f] Format the nand flash [b] Boot the system [s] Set the boot parameters [u] Backup NAND Flash to HOST through USB(upload) [r] Restore NAND Flash from HOST through USB [q] Goto shell of vivi [i] Version: 0945-2K Enter your selection:
まず、「x」を入力して、NAND FLASHをフォーマットする。
[q] Goto shell of vivi [i] Version: 0945-2K Enter your selection: x Found block size = 0x00020000 Erasing... ... done Writing... ... done Written 49152 bytes Saved vivi private data
イメージファイルをダウンロードする用のツールDNWを実行させます。
「v」を入力して、ブートロードvboot.binを書き込む。
[q] Goto shell of vivi [i] Version: 0945-2K Enter your selection: v USB host is connected. Waiting a download.
vboot.binを開き、ダウンロードする
「k」を入力して、LinuxカーネルzImage_N35_serverを書き込む。
[q] Goto shell of vivi [i] Version: 0945-2K Enter your selection: k USB host is connected. Waiting a download.
「y」を入力して、ファイルシステムrootfs_qtopia_qt4-server.imgを書き込む。
[q] Goto shell of vivi [i] Version: 0945-2K Enter your selection: y USB host is connected. Waiting a download.
※ 真っ白のNAND FLASHなら、コマンドx, v, k, yで順番にイメージファイルをNAND FLASHに書き込みます。その後、一部のイメージファイルだけを更新したければ、対応のコマンドv, k, y一つだけでNAND FLASHに書き込みます。
VTDファイナンスログイン
以上のイメージファイルを書き込む手順は複雑し、パソコンも必要です。次の方法はパソコンがないでも、1枚SDカードだけでジファイルを更新することができます。とても便利です。まず、マニュアルのP174をご参照して、ボードのNor Flashのブートロードを更新する。
SDカードでイメージファイルを書き込めるブートロードはSuperSDboot2440.binです。
1枚SDカードを用意する。SDカードで「images」というフォルダを作る。「images」フォルダで「FriendlyARM.ini」というファイルを作る。FriendlyARM.iniファイルの中身は
#This line cannot be removed. by FriendlyARM(www.arm9.net) USBMode = No Action = Install OS = Linux VerifyNandWrite = Yes LowFormat = No Status Type = Beeper| LED # Linux part Linux-BootLoader = Superboot2440.bin Linux-Kernel = zImage_N35_server Linux-CommandLine = noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 Linux-RootFs-InstallImage = rootfs_qtopia_qt4-server.img # Windows CE 6 part WindowsCE6-Bootloader = wince6/nboot_W35.bin WindowsCE6-BootLogo = wince6/bootlogo.bmp WindowsCE6-InstallImage = wince6/NK_W35.bin #User Bin part UserBin-Bootloader = Superboot2440.bin UserBin-Image = 2440test/2440test_W35.bin userBinStartAddress=30000000
ARMボードのモードをNor Flashに設定して、SDカードを挿入して、電源を入れると、自動的にイメージファイルをNANDに書き込む開始するはずです。書き込む順調すれば、ボードのLEDが点滅して、LEDの点灯数が段々増えています。4個LED全て点灯すると、LEDは左右流れて点滅する。それは書き込む完了です。
コイン在庫予測
書き込み完了すると、電源を切ります。ダウンロード用のUSBケーブルを抜く。ARMボードのモード設定用のジャンパーをOpenして、Linuxモードになる。再び電源を投入する。ハイパーターミナルが次の情報なら、ARMサーバは起動成功しました。
S3C24XX_UDA134X SoC Audio driver
UDA134X SoC Audio Codec
asoc: UDA134X <-> s3c24xx-i2s mapping ok
ALSA device list:
#0: S3C24XX_UDA134X (UDA134X)
TCP cubic registered
NET: Registered protocol family 17
s3c2410-rtc s3c2410-rtc: hctosys: invalid date/time
yaffs: dev is 32505859 name is "mtdblock3"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
yaffs: auto selecting yaffs2
block 546 is bad
block 4371 is bad
yaffs_read_super: isCheckpointed 0
VFS: Mounted root (yaffs filesystem) on device 31:3.
Freeing init memory: 156K
hwclock: settimeofday() failed: Invalid argument
Try to bring eth0 interface up......eth0: link down
Done
Please press Enter to activate this console. ← 空ENTERを押していく
[root@kaneBeBeIII]#
自分のネットワーク環境によってIPアドレスなどを設定する。
IP=192.168.1.200 Mask=255.255.255.0 Gateway=192.168.1.1 DNS=192.168.1.1 MAC=08:aa:aa:aa:aa:aa
ネットワークのパラメータを設定完了すると、電源を切ります。USBシリアル用のUSBケーブルも抜く。LANケーブルをARMサーバのRJ45ポートに挿入する。
再び電源を投入する。今からパソコンはtelnetでARMサーバを遠隔操作できます。
telnetで必要なサーバを設定する。初の設定はすべてのサーバをコメントアウトされます。
# /bin/ntpdate.sh ← 起動の時、時計を正確に合わせる。 ← 定期的にコマンドを実行する。非固定IPアドレスの更新、時計を正確に合わせるなど。 #mkdir -p /var/spool/cron/crontabs #crontab /etc/mycrontab #crond #/apache/bin/apachectl start ← ウェブサーバ ← プリンタサーバ #if test -c "/dev/lp0";then # /bin/chmod 666 /dev/lp0 # /cups/sbin/cupsd #fi ← ファイル共有Sambaサーバ #/usr/local/samba/bin/nmbd -D #/usr/local/samba/bin/smbd -D #/usr/sbin/sshd ← Secure Shell(セキュアシェル、SSH)サーバ ← Webカメラストリーミング配信 #/bin/mjpg_streamer -i "input_uvc.so -d /dev/video0 -f 5 -r QVGA -y" -o "output_http.so -p 8080 \ -w /apache/htdocs/video-www -c username:password" & #/sip/bin/partysip & ← IP電話のSIPサーバ ← VPNサーバ #echo 1 > /proc/sys/net/ipv4/ip_forward #/bin/openvpn --config /etc/openvpn/server.conf --cd /etc/openvpn --dev-node /dev/tun & #/iptables/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE #/usr/exim/bin/exim -bd ← Eメールサーバ #/bin/popa3d -D ← POP3サーバ #/bin/fax.sh & ← 自動FAX受信
次のコマンドでARMサーバを再起動させて、サーバを立ち上げる。
MPTBITCOIN ログイン
Linuxカーネルのタイマ割込み頻度はHZというマクロで設定されている。通常、100~1000ぐらいの値を設定する。一般的に、この数値を上げると反応が早くなるが、CPU負荷が定常的に高くなると言われている。ARMボードのデフォルト値は200Hzです。ある応用には1000Hzに設定することが必要です。
カーネルの設定ファイル.configをCONFIG_HZ=1000に書き換えてもmake時に強制的にCONFIG_HZ=200に戻されてしまうので、arch/arm/Kconfigを書き直した。
~略~ config HZ int default 128 if ARCH_L7200 default 1000 if ARCH_EBSA110 || ARCH_S3C2410 default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER default AT91_TIMER_HZ if ARCH_AT91 default 100 ~略~