spksrc + Synology NAS 212j 88f281 编译 tvheandend +libdvbcsa + oscam centos 7.1 32bit i686
1. centos insatll
debian-7.0.0-i386-CD-1 install
sangood@debian:~$ uname -a
Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.46-1+deb7u1 i686 GNU/Linux
2.
https://github.com/SynoCommunity/spksrc
spksrc
spksrc is a cross compilation framework intended to compile and package softwares for Synology NAS
Requirements
To use spksrc, it is recommended to use a virtual machine with an x86 version of Debian stable OS installed. You'll also need some stuff:
sudo aptitude install build-essential debootstrap python-pip automake libgmp3-dev libltdl-dev libunistring-dev libffi-dev ncurses-dev imagemagick libssl-dev pkg-config zlib1g-dev gettext git curl subversion check bjam intltool gperf flex bison xmlto php5 expect libgc-dev mercurial cython
sudo pip install -U pip
You may need to install some packages from testing like autoconf. Read about Apt-Pinning to know how to do that.
You are now ready to use spksrc and make almost all SPKs. If you have any problem, try installing the missing packages on your virtual machine.
Usage
Lets start with an example:
git clone https://github.com/SynoCommunity/spksrc.git
cd spksrc/
make setup
cd spk/transmission
make arch-88f6281
What have I done?
You cloned the repository
Went into the directory of the SPK for transmission
Started building the SPK for the architecture 88f6281
To list all available architectures use ls toolchains from within the spkrc directory. Remove the prefix syno- to have the actual architecture.
An overview of which architecture is used per Synology model can be found on the wiki pageArchitecture per Synology model
At the end of the process, the SPK will be available in spksrc/packages/
What is spksrc doing?
First spksrc will read spksrc/spk/transmission/Makefile
Download the adequate toolchain for the chosen architecture
Recursively:
Process dependencies if any
Download the source in spksrc/distrib/
Extract the source
configure
make
make install
Package all the requirements into a SPK under spksrc/packages/:
Binaries
Installer script
Start/Stop/Status script
Package icon
Wizards (optional)
Help files (optional)
Contribute
The only thing you should be editing in spksrc is Makefiles. To make a SPK, start by cross-compiling the underlying package. To do so:
Copy a standard cross package like spksrc/cross/transmission/Makefile in your new package directory spksrc/cross/newpackage/
Edit the Makefile variables so it fits your new package
Empty variables DEPENDS and CONFIGURE_ARGS in the Makefile
Try to cross-compile and fix issues as they come (missing dependencies, configure arguments, patches)
cd spksrc/cross/newpackage/
make arch-88f6281
Use make clean to clean up the whole working directory after a failed attempt
On a successful cross-compilation create a PLIST file with the same syntax asspksrc/cross/transmission/PLIST but based on the auto-generated PLIST for your new package atspksrc/cross/newpackage/work-88f6281/newpackage.plist
Once you have successfully cross compiled the new package, to create the SPK:
Copy a standard SPK directory like spksrc/spk/transmission in your new SPK directoryspksrc/spk/newspk
Edit the stuff to fit your needs
After all that hard work, submit a pull request to have your work merged with the main repository on GitHub and published in SynoCommunity's repository.
If you are not familiar with git or GitHub, please refer to the excellent GitHub help pages.
3。
cd /home/sangood/nas/spksrc/cross/libdvbcsa
vi Makefile
PKG_NAME = libdvbcsa
PKG_VERS = 1.1.0
PKG_EXT = tar.gz
PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT)
PKG_DIST_SITE = http://download.videolan.org/pub/videolan/libdvbcsa/1.1.0
PKG_DIR = $(PKG_NAME)-$(PKG_VERS)
DEPENDS =
HOMEPAGE = http://download.videolan.org/pub/videolan/libdvbcsa/1.1.0/
COMMENT = libdvbcsa 1.1.0
LICENSE =
CONFIGURE_ARGS = cross_compiling=yes --prefix=$(INSTALL_PREFIX)
include ../../mk/spksrc.cross-cc.mk
make arch-88f6281
如果成功将得到如下包
lnk:lib/libdvbcsa.so
lnk:lib/libdvbcsa.so.1
lib:lib/libdvbcsa.a
lib:lib/libdvbcsa.la
lib:lib/libdvbcsa.so.1.0.1
dvbcsa/dvbcsa.h
这些包安装后需要拷贝到NAS的 /volume1/@appstore/tvheadend/ 目录执行--(已经打包进spk文件,不需要这步)。
4.tvheadend
sangood@debian:~/nas/spksrc/cross/tvheadend/$ vi Makefile
修改:CONFIGURE_ARGS = --enable-dvbconv --enable-dvbcsa --disable-avahi libdvbcsa --release
--enable-dvbconv 增加中文支持https://github.com/tvheadend/tvheadend/pull/90
修改为github源:
sangood@debian:~/nas/spksrc/cross/tvheadend$ cat Makefile
PKG_NAME = tvheadend
PKG_VERS = 3.5.2
PKG_EXT = tar.gz
PKG_DOWNLOAD_METHOD = git
PKG_GIT_HASH = f5c5ffd
PKG_DIST_NAME = tvheadend.git
PKG_DIST_SITE = git://github.com/tvheadend
PKG_DIST_FILE = $(PKG_NAME)-git$(PKG_GIT_HASH).$(PKG_EXT)
PKG_DIR = $(PKG_NAME)-git*
DEPENDS = cross/openssl cross/libdvbcsa
HOMEPAGE = https://www.lonelycoder.com/tvheadend/
COMMENT = Tvheadend is a TV streaming server for Linux supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video (V4L) as input sources
LICENSE =
GNU_CONFIGURE = 1
CONFIGURE_ARGS = --enable-dvbcsa --disable-avahi --release
INSTALL_TARGET = myInstall
include ../../mk/spksrc.cross-cc.mk
.PHONY: myInstall
myInstall:
$(RUN) make install DESTDIR=$(INSTALL_DIR)
sangood@debian:~/nas/spksrc/cross/tvheadend/patches$ ls
atomic32.patch capmt.c-svn.patch iov-max.patch psi.c-svn.patch Werror.patch dvb_support.c-svn.patch main.c-svn.patch dvr_rec.c-svn.patch
tvheadend的补丁包,其中psi.c-svn.path capmt.c-svn.patch 见sangood github https://github.com/sangood/tvheadend
编译过程输入补丁路径 :src/capmt.c 和 src/psi.c
CONFIGURE_ARGS = --enable-dvbcsa --disable-avahi --release
make arch-88f6821
在目录得到sangood@debian:~/nas/spksrc/packages$ ls
tvheadend_88f6281_3.4.27-6.spk 在nas源里面手动安装,安装之后默认是tvheadend用户启动的。
/usr/local/tvheadend/bin/tvheadend -f -u tvheadend -c /usr/local/tvheadend/var -p /usr/local/tvheadend/var/tvheadend.pid
plus:在NAS上面`/volume1/soft/nas/synosource/libiconv-1.11/ ,编译 libiconv 解决中文乱码问题:dvb_support.c-svn.patch main.c-svn.patch
https://www.gnu.org/software/libiconv/
$ ./configure --prefix=/usr/local
$ make
$ make install
5.oscam :
改成最新的源码 8968
~/nas/spksrc/cross/oscam$ vi Makefile
PKG_SVN_REV = 8968
.PHONY: myConfigure
myConfigure:
$(RUN) ./config.sh --enable WITH_SSL --enable HAVE_DVBAPI
sangood@debian:~/nas/spksrc/spk/oscam$ vi Makefile
SPK_VERS = 1.20~r8968
如果编译nx111版本(8175--版本 hash=4183129,支持数码视讯5.2.3):
~/nas/spksrc/cross/oscam$ vi Makefile
PKG_NAME = oscam-nx111
PKG_VERS = 1.20
PKG_EXT = tar.gz
PKG_DOWNLOAD_METHOD = git
PKG_GIT_HASH = 4183129
PKG_DIST_NAME = oscam-nx111.git
PKG_DIST_SITE = git://github.com/nx111
PKG_DIST_FILE = $(PKG_NAME)-git$(PKG_GIT_HASH).$(PKG_EXT)
PKG_DIR = $(PKG_NAME)-git*
sangood@debian:~/nas/spksrc/spk/oscam$ vi Makefile
SPK_VERS = 1.20~r8175
运行脚本
/bin/sh /var/packages/oscam/scripts/start-stop-status status
6.tvheandend 错误
/var/log/syslog:16255:Jan 30 19:28:44 tvheadend[2275]: TS: TurboSight TBS 6921 DVBS/S2 frontend/Channel: 11,393,000 kHz Vertical (Default (Port 0, Universal LNB))/Channel Style: CA @ #1617: Continuity counter error, 1213 duplicate log lines suppressed
Solution for that is:
go to tvheadend->Configuration->TV Adapter-> and disable “Idle scanning” in tvheadend. The problems will go away.
Did you try it with the "Full mux reception" option set to "off" at your adapter settings? Had the same issue before, until I found this tip. From then on it worked all just fine.
7。dvb3221 驱动加载,加载顺序 i2c dvb-core usb pll tda 3221
dvb-core.ko dvb-pll.ko dvb-usb.ko dvb3221.ko i2c-core.ko include tda10023.ko
insmod /lib/modules/2.6.32.12/dvb3221/i2c-core.ko
insmod /lib/modules/2.6.32.12/dvb3221/dvb-core.ko
insmod /lib/modules/2.6.32.12/dvb3221/dvb-usb.ko
insmod /lib/modules/2.6.32.12/dvb3221/dvb-pll.ko
insmod /lib/modules/2.6.32.12/dvb3221/tda10023.ko
insmod /lib/modules/2.6.32.12/dvb3221/dvb3221.ko
8.解决gb2312乱码问题:
dvb_support.c
13.0 KB
补丁生成:
macmini:tvheadend sangood$ diff -uN ./src/dvb/dvb_support.c.orig ./src/dvb/dvb_support.c > ./patches/dvb_support.c-svn.patch
9.解决libiconv 加载问题,处理gb2312转换.
参考:http://www.linuxidc.com/Linux/2012-01/51165.htm
libc的插入/重载模式(libc plug/override mode)。仅工作在GNU/Linux、Solaris和OSF/1系统上。是一种在没有glibc时来获取较好的iconv支持的途径。
这种模式安装库文件preloadable_libiconv.so,通过选项LD_PRELOAD,来重载所有C语言库中的iconv*函数。
GNU/Linux和Solaris系统:
$ export LD_PRELOAD=/usr/local/lib/preloadable_libiconv.so
程序的代码不需要修改,甚至不需要重新编译,仅仅设置环境变量LD_PRELOAD即可。
具体方法:
http://www.linuxidc.com/Linux/2012-01/51165.htm
https://www.gnu.org/software/libiconv/
sangood@debian:~/nas/spksrc/cross/libiconv$ vi Makefile
PKG_NAME = libiconv
PKG_VERS = 1.11
PKG_EXT = tar.gz
PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT)
PKG_DIST_SITE = http://ftp.gnu.org/pub/gnu/libiconv
PKG_DIR = $(PKG_NAME)-$(PKG_VERS)
HOMEPAGE = https://www.gnu.org/savannah-checkouts/gnu/libiconv/
COMMENT = libiconv 1.14
LICENSE =
CONFIGURE_ARGS = cross_compiling=yes --prefix=$(INSTALL_PREFIX)
include ../../mk/spksrc.cross-cc.mk
sangood@debian:~/nas/spksrc/cross/libiconv/work-88f6281/install/usr/local/lib$ ls
libcharset.a libcharset.la libcharset.so libcharset.so.1 libcharset.so.1.0.0 libiconv.la libiconv.so libiconv.so.2 libiconv.so.2.4.0 preloadable_libiconv.so
拷贝preloadable_libiconv.so到NAS /lib/preloadable_libiconv.so,启动脚本增加export LD_PRELOAD=/lib/preloadable_libiconv.so
SangoodNAS> vi startvh.sh
insmod /root/dvb3221-modules-2.6/i2c-core.ko
insmod /root/dvb3221-modules-2.6/dvb-core.ko
insmod /root/dvb3221-modules-2.6/dvb-usb.ko
insmod /root/dvb3221-modules-2.6/dvb-pll.ko
insmod /root/dvb3221-modules-2.6/tda10023.ko
insmod /root/dvb3221-modules-2.6/dvb3221.ko
export LD_PRELOAD=/lib/preloadable_libiconv.so
/usr/local/tvheadend/bin/tvheadend -f -u root -c /root/.hts/tvheadend -p /usr/local/tvheadend/var/tvheadend.pid
首次启动tvh:
Code:
tvheadend -C -u root -g root -f
And add the following line to /etc/rc.local (using nano for example):
Code:
/usr/local/tvheadend/bin/tvheadend -f -u root -g root
# comment below when your happy its working
$TVHBIN start -C -u hts -g video -c /opt/tvh_dvrconfig_xbmc
# use this to fork it into the background
#$TVHBIN start -C -f -u hts -g video -c /opt/tvh_dvrconfig_xbmc
总之:
将以下代码加入/etc/rc.local,将控制套件中心的tvheadend启动改为停止:
insmod /root/dvb3221-modules-2.6/i2c-core.ko
insmod /root/dvb3221-modules-2.6/dvb-core.ko
insmod /root/dvb3221-modules-2.6/dvb-usb.ko
insmod /root/dvb3221-modules-2.6/dvb-pll.ko
insmod /root/dvb3221-modules-2.6/tda10023.ko
insmod /root/dvb3221-modules-2.6/dvb3221.ko
export LD_PRELOAD=/lib/preloadable_libiconv.so
/usr/local/tvheadend/bin/tvheadend -f -u root -c /root/.hts/tvheadend -p /usr/local/tvheadend/var/tvheadend.pid
更新:
以上手动拷贝方法已经不需要了,我已经编译进tvheandend spk包里面直接加载了dvb3221 驱动和preloadable_libiconv.so.以及修改了启动脚本,改为root用户启动,自动加载dvb3221驱动,自动加载preloadable_libiconv.so。
代码见 sangood github
安装好spk之后,/bin/sh /usr/local/tvheadend/dvb3221.sh 。控制台重启tvheadend。
将驱动自动加载:
SangoodNAS> vi /etc/rc.local
/bin/sh /usr/local/tvheadend/dvb3221.sh
如果无法登陆,需要修改启动代码
cd /root/.hts/tvheadend/var/accesscontrol/
修改用户名密码
vi 1
{
"enabled": 1,
"username": "tvh",
"password": "tvh",
"comment": "Administrator",
"prefix": "0.0.0.0/0",
"streaming": 1,
"dvr": 1,
"dvrallcfg": 1,
"webui": 1,
"admin": 1,
"id": "1"
}
|