最近有需要在android平台的AML8726-M3芯片的机顶盒上跑oscam。
照着svn下载了oscam源码、ndk工具,照着oscam的官方网站上的教程编译,出现了些问题。
oscam官方上的命令是:
build/tools/make-standalone-toolchain.sh --install-dir=/opt/android
但使用命令:
make LIB_PTHREAD= CROSS=/tmp/android/bin/arm-linux-androideabi-
编译最新的oscam svn版时,会提示未定义的变量。
于是放狗搜索相关资料,最后找到:
http://blog.csdn.net/smfwuxiao/article/details/6587709
http://docs.huihoo.com/android/ndk/r5/STANDALONE-TOOLCHAIN.html
意思是在自己制作工具链时,要指定平台的版本以及硬件类型,由于我是android 4.0,版本号要设置为15,命令为:
build/tools/make-standalone-toolchain.sh --install-dir=/opt/android --platform=android-15
另外可以用下面的参数优化cpu类型
CFLAGS='-march=armv7-a -mfloat-abi=softfp'
如果要使用neon指令,加上
CFLAGS='-march=armv7-a -mfloat-abi=softfp -mfpu=neon'
如果是cortex-a8,加上
LDFLAGS='-Wl,--fix-cortex-a8'
通过上面的命令重新制作编译工具链后,编译oscam通过。
当把oscam放到android机器上运行,添加cccam服务器,始终不能连上服务器,server端的日志是匿名用户或者是用户登录名错误。
在android本机上启用cccam服务,用一台x86下运行的oscam连过来,也提示用户名错误,不能登录。
遇到这个问题,百思不得其解?是大小端的问题?但我在mips下的oscam也正常啊。
是编译器的问题?看了很久的源码,找不到原因所在。一直搞到凌晨方才睡去。
第二天我忽然想到,现在编译的oscam是没有ssl支持的,而cccam登录中是使用了加密的,是不是oscam自己的加密算法有bug,在arm平台下有问题。
于是在android的工具链接中编译添加openssl,命令如下:
cd /tmp
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar -xf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
export TOOLCHAIN=/opt/android
export CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc
export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
export CFLAGS=" -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune=cortex-a8"
./Configure --prefix=$TOOLCHAIN/sysroot/usr/ linux-generic32 shared
make && make install
安装好openssl后,再到oscam目录中,使用config.sh -g添加ssl支持。
再重新编译。oscam在android中终于成功用cccam连上了服务器,一切OK!