olsrd是ad hoc网络中的一种路由协议,本文针对android1.5的SDK来实现的,其它版本的未试过。
准备工作:
从olsr.org上get olsrd-0.5.6-r7代码
安装好android1.5 NDK
开始:
1:在make/Makefile.android中设置NDK、NDK_ARCH路径:
如:
NDK = /home/zhongping/work/tools/android-ndk-1.6_r1
NDK_ARCH = $(NDK)/build/platforms/android-4/arch-arm
2) 在make/Makefile.android中设置 CROSS_COMPILE and CC:
因为我之前已经设置过了NDK NDK_ARCH,且我用的是android1.5的NDK,所以此步不用操作,其它版本的NDK中,路径
不一样,需要更改。
3)在make/Makefile.android的第48行左右,添加如下行<重要>:
CFLAGS += -D'setbuf(a,b)='
如:
CFLAGS += -D'setbuf(a,b)='
CFLAGS += -I$(NDK_ARCH)/usr/include
这样做的目的是由于android中setbuf()这条命令执行会导致olsrd目标文件运行时中断,这里将使olsrd中与setbuf相关的地方
屏蔽掉,更深层的原因我也不了解。应该也可以直接在olsrd的代码中屏蔽掉setbuf,调用的地方不多,有时间可试一试
4) 在 Makefile.inc中设置DESTDIR ?= ./data //欲将生成的有效文件存放的路径
5) make OS=android DEBUG=1 build_all
6) make install_all //将目标文件拷贝至./data
可以看到如下文件:
./data/usr/sbin
./data/usr/lib
./data/usr/share
./data/etc/olsrd.conf
7) 修改olsrd.conf <重要:这个地方的设置很重要,需要设置的地方挺多的,什么时候有时间我再把我的设置贴上来>:
8) Push all the files in ./data after compiled to G1:
./adb push ./data /data/local/olsr_test
9)开启ad hoc网络
10) 运行 olsrd:
./adb shell
cd /data/local/olsr_test
export OLSRD_ROOT=/data/local/olsr_test
export LD_LIBRARY_PATH=$OLSRD_ROOT/usr/lib:$LD_LIBRARY_PATH
./usr/sbin/olsrd -f ./etc/olsrd.conf
完成。