找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 35014|回复: 71

折腾OSCAM之一---OSCAM交叉编译详细步骤

  [复制链接]
本帖最后由 兔巴哥 于 2017-12-26 10:36 编辑

有关生成ipk包的方法,请移步这里搞定oscam的ipk打包

声明:本文绝对原创,首发恩山论坛,转帖请注明出处!!!

OSCAM交叉编译流程
写在前面:

有感于网上的高手都不愿意授人以渔,本人经过不懈的努力,参考oscam官网的例子和网上的一些零碎经验,终于成功地交叉编译出oscam,并且在我的联想Y1S路由器上测试通过。

今天我就来授人以渔,希望大神些多加原谅哈!

以下就是我的详细编译步骤和出现错误时的解决办法。这是我初学交叉编译时的一点心得体会,肯定还有更加简洁的方法,分享出来,望大家共同完善。

一、搭建编译环境

1、 安装Ubuntu系统(物理机或者虚拟机)并安装相关软件包,我是安装的ubuntu-14.04.1-desktop-amd64(最好是64位的)。
建议初学者最好是使用虚拟机的方法,操作过程中的复制和粘贴的方便性是不言而喻的。

2、 下载编译oscam需的软件包openssl-1.0.0.tar.gz、libusb-1.0.9.tar.bz2、pcsc-lite-1.8.8.tar.bz2。


3、 在用户主目录下运行svn checkout http://www.streamboard.tv/svn/oscam/trunk oscam,以下载oscam源码。

4、 下载路由器SDK包。之所以要用SDK包而不是只用其中的Toolchain包,是因为后续操作要用到SDK包中的staging_dir目录;并将SDK包解压或者拷贝(或者移动)到/opt/cross目录下(或者/opt/cross/mipsel。当然,你也可以把这个SDK包解压或者拷贝(或者移动)到用户的主目录下。
为简化后续操作的复杂性,还可以将SDK包改名。比如我的路由器的SDK包是OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2,其目录结构如下:


改名后如下:
一、 交叉编译OSCAM之前
先介绍几个编译过程可能需要用到的命令和概念

echo $PATH  在linux下查看PATH环境变量

export (***linux下设置环境变量(个人理解),这种设置只对当前登陆的用户(在内存中)立即生效,退出当前用户或者退出终端就失效。如果想一直有效,则需要编辑/etc/profile,或者编辑用户目录下的.bashrc(即:~/.bashrc),然后运行:#source /etc/profile生效,或者重启系统生效。个人认为对于我等小白还是export好点,因为编辑文件涉及到root权限以及编辑命令的使用,一旦编辑错误麻烦不小,不如重新进入终端方便。

make 2>&1 | tee mak.log,产生的编译信息既在屏幕显示,又存一份到文件。比如:
./configure 2>&1 | tee configure.log  
make 2>&1 | tee make.log
make install 2>&1 | tee make-install.log
生成的log文件就在当前目录下,便于查看出错信息。

echo $?  编译完成后,输入echo $? 如果返回结果为0,则表示正常结束,否则就出错了:
编译时(make),往往不知道是否成功编译通过。如果编译没有通过就去make install必然会出错,增加了解决问题的复杂性,通过这种方法检查是否编译成功,然后再考虑下一步的make install。
当然,你也可以不做这一步。

二、 编译特定功能OSCAM的支持组件
        因为默认交叉编译的oscam不支持openssl协议和pcsc以及Smargo读卡器的,所以我们加入支持库。
        为简化屏幕显示的繁杂,我将OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2目录重命名为7620

1、 编译openssl/libcrypto
  1. /tmp$ tar -xf openssl-1.0.2.tar.gz
  2. /tmp$ cd openssl-1.0.2
  3. /tmp/openssl-1.0.2$ export TOOLCHAIN=/home/wf/OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
  4. /tmp/openssl-1.0.2$ export PATH="$TOOLCHAIN/bin:$PATH"
  5. /tmp/openssl-1.0.2$ export STAGING_DIR=/home/wf/OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir
  6. /tmp/openssl-1.0.2$ export CC=$TOOLCHAIN/bin/mipsel-openwrt-linux-uclibc-gcc
  7. /tmp/openssl-1.0.2$ export RANLIB=$TOOLCHAIN/bin/mipsel-openwrt-linux-uclibc-ranlib
  8. /tmp/openssl-1.0.2$ ./Configure --prefix=$TOOLCHAIN/usr linux-generic32 shared
  9. /tmp/openssl-1.0.2$ make
  10. echo $?
  11. /tmp/openssl-1.0.2$ make install
复制代码

    如果在linux下安装openssl,执行configmake之后,在执行make install时出现类似下面的错误:
cms.pod around line 457: Expected text after =item, not a number
cms.pod around line 461: Expected text after =item, not a number
cms.pod around line 465: Expected text after =item, not a number
cms.pod around line 470: Expected text after =item, not a number
cms.pod around line 474: Expected text after =item, not a number
“POD document had syntax errors at /usr/bin/pod2man line 71.
make: *** [install_docs] 错误 255”

解决方法是:编辑/usr/bin/pod2man文件,注释掉第71行。
千万注意,不要像网上有些说的rm /usr/bin/pod2man,即删除pod2man这个文件,否则安装pcsc组件会出错。

2、 编译libusbpcsc
2-1、libusb
  1. tar -xf libusb-1.0.9.tar.bz2
  2. cd libusb-1.0.9
  3. export TOOLCHAIN=/opt/cross/mipsel/7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
  4. export PATH="$TOOLCHAIN/bin:$PATH"
  5. export STAGING_DIR=/opt/cross/mipsel/7620/staging_dir
  6. ./configure --prefix=$TOOLCHAIN/usr --host=mipsel-openwrt-linux-uclibc (如果显示./config显示未安装libudev-dev,可暂时加--disable-udev通过)。
  7. make
  8. echo $?
  9. /tmp/libusb-1.0.9$ make install
复制代码
如果./config显示未安装libudev-dev,可暂时加上--disable-udev通过,因为在随后编译pcsc时会增加--disable-libudev这一参数,但是我没有这样试过。
而当你去安装sudo apt-get install libusb-dev,可是又报错不能安装,比较完美的解决办法是,更新系统的源为阿里的源。如下操作:
打开源的文件sudo gedit /etc/apt/sources.list
然后替换成下面的内容(如果可以,先备份之前的源sudo cp /etc/apt/source.list /etc/apt/source.list.backup
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

然后sudo apt-get update升级一下再sudo apt-get install libusb-dev即可解决安装的问题。

2-2、pcsc
  1. cd pcsc-lite-1.8.8
  2. export TOOLCHAIN=/opt/cross/mipsel/7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
  3. export PATH="$TOOLCHAIN/bin:$PATH"
  4. export STAGING_DIR=/opt/cross/mipsel/7620/staging_dir
  5. ./configure CC=$TOOLCHAIN/bin/mipsel-openwrt-linux-uclibc-gcc-4.8.3 --disable-libudev --host=mipsel-openwrt-linux-uclibc --prefix=$TOOLCHAIN/usr --exec-prefix=$TOOLCHAIN/usr --disable-shared LIBUSB_LIBS="-L$TOOLCHAIN/usr/lib -lusb-1.0" LIBUSB_CFLAGS="-I$TOOLCHAIN/usr/include/libusb-1.0"
  6. make
  7. echo $?
  8. make install
复制代码
以上过程都顺利的话,在usr目录下会生成如下文件:

四、交叉编译OSCAM
这里只贴出最后一个交叉编译全功能的oscam步骤,其他的可以参考www.streamboard.tv/oscam/wiki/crosscompiling
  1. export TOOLCHAIN=/opt/cross/mipsel/7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
  2. export PATH="$TOOLCHAIN/bin:$PATH"
  3. export STAGING_DIR=/opt/cross/mipsel/7620/staging_dir
复制代码
# Cross compile with static libusb, pcsc, SSL support——交叉编译使用外部usb读卡器、pcsc读卡器、SSL加密支持
  1. make CROSS=$TOOLCHAIN/bin/mipsel-openwrt-linux-uclibc- CONF_DIR=/usr/local/etc/config/ USE_LIBUSB=1 LIBUSB_LIB="$TOOLCHAIN/usr/lib/libusb-1.0.a -lrt" USE_PCSC=1 USE_SSL=1 EXTRA_FLAGS="-I$TOOLCHAIN/usr/include/PCSC"
复制代码
其中CONF_DIR=/usr/local/etc/config/ 是配置文件存放位置,不指定则默认CONF_DIR=/usr/local/etc/

如果这一步出现如下错误:
  1. CC        cscrypt/des.c
  2. In file included from cscrypt/../globals.h:108:0,
  3.                  from cscrypt/des.c:1:
  4. cscrypt/../cscrypt/aes.h:2:27: fatal error: openssl/aes.h: No such file or directory
  5. #  include <openssl/aes.h>
  6.                            ^
  7. compilation terminated.
  8. Makefile:396: recipe for target 'build/mipsel-openwrt-linux-uclibc-ssl/cscrypt/des.o' failed
  9. make[1]: *** [build/mipsel-openwrt-linux-uclibc-ssl/cscrypt/des.o] Error 1
  10. Makefile:348: recipe for target 'all' failed
  11. make: *** [all] Error 2
复制代码
意思是没有找到aes.h这个头文件。但是在/usr/include/ openssl目录中是有这个文件的。
这时可使用命令sudo find / -name aes.h在系统中查找aes.h文件的位置,比如我的查找情况如下:
  1. /media/sf_gx/DSL-2760U_RU_1.04/userspace/public/libs/openssl/crypto/aes/aes.h
  2. /media/sf_gx/DSL-2760U_RU_1.04/userspace/public/libs/openssl/include/openssl/aes.h
  3. /usr/include/openssl/aes.h
  4. /usr/src/linux-headers-3.13.0-46-generic/include/config/crypto/aes.h
  5. ……….
  6. /usr/src/linux-headers-3.13.0-46/include/crypto/aes.h
  7. /home/wf/oscam/cscrypt/aes.h
  8. /opt/cross/mipsel/7620/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620a/linux-3.10………
复制代码
比照官网的例子可以发现,我们是把组件编译安装在了“usr”目录下,如下:
官网的
  1. make CROSS=$TOOLCHAIN/bin/mipsel-unknown-linux-gnu- CONF_DIR=/etc/tuxbox/config/ USE_LIBUSB=1 LIBUSB_LIB="$TOOLCHAIN/mipsel-unknown-linux-gnu/sys-root/usr/lib/libusb-1.0.a -lrt" USE_PCSC=1 USE_SSL=1 EXTRA_FLAGS="-I$TOOLCHAIN/mipsel-unknown-linux-gnu/sys-root/usr/include/PCSC"
复制代码
我们的
  1. make CROSS=$TOOLCHAIN/bin/mipsel-openwrt-linux-uclibc- CONF_DIR=/usr/local/etc/config/ USE_LIBUSB=1 LIBUSB_LIB="$TOOLCHAIN/usr/lib/libusb-1.0.a -lrt" USE_PCSC=1 USE_SSL=1 EXTRA_FLAGS="-I$TOOLCHAIN/usr/include/PCSC"
复制代码
注意其中的/sys-root/usr/(官网)和/usr/(我们)的区别。

我们使用如下的参数把安装目录(/opt/cross/mipsel/7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include/)的搜索路径指给make
  1. export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/cross/mipsel/7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include/
复制代码
或者
  1. export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$TOOLCHAIN/usr/include/
复制代码
因为 TOOLCHAIN=/opt/cross/mipsel/7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2,下同
  1. export C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/cross/mipsel/7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include
复制代码
或者
  1. export C_INCLUDE_PATH=$C_INCLUDE_PATH:$TOOLCHAIN/usr/include/
复制代码
至此,就可以顺利的交叉编译出OSCAM。以后如果要编译新的oscam,只做这一步就可以了。如下:
  1. export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$TOOLCHAIN/usr/include/
  2. export C_INCLUDE_PATH=$C_INCLUDE_PATH:$TOOLCHAIN/usr/include/
  3. make CROSS=$TOOLCHAIN/bin/mipsel-openwrt-linux-uclibc- CONF_DIR=/usr/local/etc/config/ USE_LIBUSB=1 LIBUSB_LIB="$TOOLCHAIN/usr/lib/libusb-1.0.a -lrt" USE_PCSC=1 USE_SSL=1 EXTRA_FLAGS="-I$TOOLCHAIN/usr/include/PCSC"
复制代码
另外,编译时出现的set but not used [-Werror=unused-but-set-variable] 问题的解决办法是:
找到对应目录中的Makefile文件,搜索 -Werror 字段,去掉-Werror,重新编译,则问题解决!
不过这只是一个警告,可以不管。

希望大家都可以用上针对自己路由器的oscam插件......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 6恩山币 +21 收起 理由
pr*** + 1 写Makefile,放到openwrt的feeds编译,是不是更简单呢?
唯美*** + 10 强大的恩山!(以下重复1万次)
WeD*** + 3 强大的恩山!(以下重复1万次)
laom*** + 5 白富美露出了诧异的眼神:屌丝,你真是太厉害了!
song6*** + 1 怀揽白富美的屌丝露出了惊讶的眼神:哥,你太帅了!
fg*** + 1 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
 楼主| | 显示全部楼层
问题求助,这种方法编译出来的oscam插件是类似“oscam-1.20-unstable_svn10628-mipsel-openwrt-linux-uclibc-ssl-libusb-pcsc”这样的文件,你需要把它改名为oscam,并使用WinSCP上传到路由器的/usr/bin/目录下,改权限为755;并在/usr/local/etc/目录下新建config目录,权限默认(或者755、777);把3个配置文件放在config目录下,权限644。在终端上输入oscam即可启动。
如果要开机启动,最简便的方法就是在openwrt的本地启动脚本中增加oscam即可。

希望,不知道如何将编译出来的oscam打包成ipk文件,这样安装就方便了。望有知道的指点一下。谢谢!

点评

就是啊,支持啊!以前有个老版本的1.0的ipk包,在openwrt AA版上安装可以用,现在BB上不能用了,目录结构变了!只有使用楼主说的方法手动COPY、然后再手动建目录、配置文件,最后是手动写自启动命令!如果系统升级了  详情 回复 发表于 2015-3-23 11:31
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

高手啊!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

高手,感谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

把ipk文件用rar解包看一下,再反着来。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

支持兔兄    学习了    要能搞定DVN就牛叉了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

楼主很屌哇
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

不错的教程
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

兔巴哥 发表于 2015-3-21 01:12
问题求助,这种方法编译出来的oscam插件是类似“oscam-1.20-unstable_svn10628-mipsel-openwrt-linux-uclib ...

就是啊,支持啊!以前有个老版本的1.0的ipk包,在openwrt AA版上安装可以用,现在BB上不能用了,目录结构变了!只有使用楼主说的方法手动COPY、然后再手动建目录、配置文件,最后是手动写自启动命令!如果系统升级了,又要重复操作一次,很繁琐!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

点评

这个支持哪些芯片的路由器?  详情 回复 发表于 2015-3-25 02:00
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
楼上的同学能否简单指点一下怎么生成ipk包吗?

点评

http://wiki.openwrt.org/doc/devel/packages  详情 回复 发表于 2015-3-24 18:33
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

兔巴哥 发表于 2015-3-24 04:02
楼上的同学能否简单指点一下怎么生成ipk包吗?

http://wiki.openwrt.org/doc/devel/packages

点评

同求oscam makefile ,这个问题困扰很久了,还没搞定。谢谢了。  详情 回复 发表于 2015-3-28 01:17
能否分享一下这个Makefile文件,目前还有点看不懂这个文件。 谢谢!  详情 回复 发表于 2015-3-26 21:06
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

LazyZhu 发表于 2015-3-24 01:59
http://dl.lazyzhu.com/file/openwrt-antigfw/packages/ramips/oscam_1.20-svn-r10641-20150324_ramips_24k ...

这个支持哪些芯片的路由器?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
LazyZhu 发表于 2015-3-24 18:33
http://wiki.openwrt.org/doc/devel/packages

能否分享一下这个Makefile文件,目前还有点看不懂这个文件。
谢谢!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

LazyZhu 发表于 2015-3-24 18:33
http://wiki.openwrt.org/doc/devel/packages

同求oscam makefile ,这个问题困扰很久了,还没搞定。谢谢了。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 02:27

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表