LoginSignup
4
3

More than 5 years have passed since last update.

OpenWRT環境で動くC言語プログラムのコンパイル方法

Last updated at Posted at 2018-05-21

きっかけ

ここ一年くらい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
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などで置いてやって動作確認。

Ubuntu
scp helloworld.o root@192.168.xx.xx:
OpenWRT
# ./helloworld.o
Hello World
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3