FON2100E openwrt backfire 10.03.1用クロスコンパイル環境の構築
昨日やったのでかなりうろ覚え。ホストはarch linux x86_64
参考:http://wiki.openwrt.org/doc/howto/buildroot.exigence
svn co --revision=29596 svn://svn.openwrt.org/openwrt/branches/backfire cd backfire ./scripts/feeds update -a make menuconfig # targetとか設定 m -j 8 export PATH=$PATH:`pwd`/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin export CC=mips-openwrt-linux-uclibc-gcc export LD=mips-openwrt-linux-uclibc-ld
あとは適当にクロスコンパイル。configure引数:
CFLAGS=-Os ./configure --build=x86_64-pc-linux-gnu --host=mips-openwrt-linux-uclibc --target=mips-openwrt-linux-uclibc
C++プログラムはこのままだとstdc++にリンクする(でかい!)ので、uclibcxxを使いたい。
uclibcxxのビルド:
./scripts/feed install -p uclibcxx make menuconfig # libs/uclibcxxをYに指定 m package/uclibc++/compile V=99 m package/uclibc++/install V=99
configure指定してクロスコンパイル対象のビルド。適宜変更すること:
CFLAGS=-Os CXXFLAGS="-fno-builtin -nostdinc++" LDFLAGS="-L/home/kouhei/openwrt/backfire/staging_dir/target-mips_uClibc-0.9.30.1/usr/lib" CPPFLAGS="-I/home/kouhei/openwrt/backfire/staging_dir/target-mips_uClibc-0.9.30.1/usr/include/uClibc++" LIBS="-nodefaultlibs -luClibc++ -lm -lgcc" ./configure --build=x86_64-pc-linux-gnu --host=mips-openwrt-linux-uclibc --target=mips-openwrt-linux-uclibc
stripしとくといいかも:
mips-openwrt-linux-uclibc-strip hogehoge
openwrt上で:
opkg update opkg install uclibcxx
これで動くバイナリができるはず。
XPathをクエリするだけのコンソールアプリ
組み込み環境上でXMLをクエリしたいんだけど、そのためだけにrubyとかいれてもでかい。
小さいXML処理系としてはTinyXML+TinyXPathがよさげだったんだけど、フロントエンドがないので、簡単なフロントエンドを作った。
TinyXPath: http://tinyxpath.sourceforge.net/
tinyxpath_1_3_1.zipを解凍して、main.cppをこれといれかえ。
tinyxpath付属test.xmlに対して:
./tinyxpath "//x/text()" test.xml # => sub text cat test.xml | ./tinyxpath "//x/text()"
wget -O -に対してそのままパイプで処理できるので便利。
uclibcとuclibcxx環境下でもうごいた。