きっかけ
ここ一年くらいArduino環境で色々作っている。
今取り扱っている製品は、ArduinoYunをベースに作られたものだと思われる。
(ここら辺の理解度がいまいち。。。ArduinoYunはハードの構成で、ArduinoパートとLinuxパートに分かれていて、Linuxパート上にOpenWrtを乗せていると思っている。)
Arduinoに加えてpythonなんかも動かせたりするのは非常に便利なのだけれども、pythonは起動が遅い。
ネットにRESTを投げるプログラムなんぞは、ライブラリの読み込みで20秒くらいかかった。
なので、Cで作る方法を模索。
↓やっと見つけた素晴らしいサイト。
大きな問題でもないが、自分で操作した時と多少ずれがあったので以下に手順を記載。
コンパイル方法
環境はUbuntuを使ったが、CentOSでもほぼ変わらないと思われる。
(SDKを落として来たら、そのSDK内のコンパイラでコンパイルするだけだから)
SDKのダウンロード
https://downloads.openwrt.org/
上記のURL直下に、OpenWrtのバージョンのコードネーム(カオス カルマとか中二っぽい)のディレクトリがあり、その下をたどっていくとSDKのファイルがある。
wget https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
SDK展開
SDKを展開した後、長いディレクトリ名を修正している。(また、この時点で好きなディレクトリに配置しておくと良い)
tar -xvf OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
mv tar -xvf OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64 openwrt
適当にC言語のファイルを作成
確認用にHello Worldを出力するC言語のファイルを作成。
ディレクトリは適当に作成。
mkdir openwrt/helloworld
cd openwrt/helloworld
vi helloworld.c
# include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
コンパイルする
ここで参考のサイトとずれ発生。
予め、次のパスを通しておく。
export OPENWRT_HOME=/{SDKのパス}/openwrt
export CC=$OPENWRT_HOME/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc
export STAGING_DIR=$OPENWRT_HOME/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
次のコマンドでコンパイル実行。
カレントディレクトリはopenwrt/helloworldのまま。
$CC -o helloworld.o helloworld.c
これで生成されるhelloworld.oがとりあえずの実行ファイル。
動作確認
もちろんUbuntuやCentOSでは実行できないので、OpenWrtにscpなどで置いてやって動作確認。
scp helloworld.o root@192.168.xx.xx:
# ./helloworld.o
Hello World