语境
我有一个机顶盒八角SF4008,其设计目的是运行开放嵌入式基于 Linux 的发行版。我目前有开放式全地形车安装在其上。
通常,用户希望将此类机顶盒的视频输出连接到显示器,然后他们希望通过前端 GUI 观看频道,例如谜2。
我的用例有所不同。我想通过计算机网络传输频道。我可以使用 Enigma2,但我认为电视前端更加用户友好且功能更加丰富。
问题
我想直接在机顶盒上运行 Tvheadend,并且我正在寻找简单的在那里安装它的方法。
选项
openATV 使用的包管理器是奥普克。预配置的存储库包含许多特定于 Enigma2 的软件包,但只有很少的通用软件包,如perl
、python
和vim
类似的。据我所知,其中没有 Tvheadend 包,也没有任何其他与 opkg 兼容的兼容架构(armv7l/armhf)的存储库。
预配置的存储库不包含诸如 之类的构建工具make
,不包含编译器,也不包含基本库的开发版本。因此,直接在机顶盒上编译 Tvheadend 需要相当复杂的设置。在其他地方交叉编译它绝对是可能的,而且可能更容易。但是,我更喜欢使用预编译的二进制文件。
我知道 Tvheadend 提供APT 存储库具有兼容armhf
架构的 Debian 软件包。我还发现opkg 可以处理安装 .deb 文件。但是,由于运行时依赖项,外部包只有在安装了所有本机依赖项后才能正常工作。
也许我可以直接在机顶盒上安装 Debian。有一个刷新过程,其中包括重写内核映像,然后提取根文件系统的存档。我对引导加载程序不熟悉,并且不知道是否需要或如何修改它才能正确引导标准 Linux 内核。此外,定制硬件驱动程序可能首先需要从当前运行的Linux内核中提取。
问题
上述选项可能都有效,但我认为它们不必要地复杂。我相信应该有一个更简单的方法。也许已经提到的选项可以简化。或者也许有一种我不知道的更简单的方法。
答案1
有一个更简单的方法。
不要尝试引导到不同的 Linux 发行版,而是使用现有的 Linux 内核和 chroot 环境。无需修改引导加载程序或将自定义硬件驱动程序移植到新内核。
创建合适的 chroot 环境的简单方法之一是引导一个干净的系统。 Debian 社区专门为此目的提供了一个工具。它被称为反引导程序。
答案2
如果可以接受交叉编译,方法之一是使用 oe-alliance 的构建环境:
- 用于
git
克隆构建环境存储库并切换到某个最近的分支,例如4.3
. - 检查是否有 Bitbake 配方
tvheadend
。它应该位于meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend_git.bb
.如果不存在,请将meta-openembedded
子模块更新到 的最新master
分支origin
,该分支应该包含它。 - 安装构建依赖项,例如使用这来自 openembedded 的指南。
- 为 Octagon SF4008 构建您的首选映像,例如如下所示:
MACHINE=sf4008 DISTRO=openatv DISTRO_TYPE=release make image
。这需要几个小时才能完成,但完成后,应该会生成一个适合 USB 闪存的 zip 文件,路径类似于builds/openatv/release/sf4008/tmp/deploy/images/sf4008/openatv-6.3-sf4008-20181219_usb.zip
. 使用类似于以下的命令激活 bitbake 构建环境:
$ cd builds/openatv/release/sf4008/ $ . env.source
- 通过运行 来构建
tvheadend
无依赖项bitbake -b tvheadend
。它应该在类似于以下位置的位置创建 ipk 包:tmp/deploy/ipk/cortexa15hf-neon-vfpv4/tvheadend_4.3+git10608+dd37467-r0_cortexa15hf-neon-vfpv4.ipk
然后应该可以将创建的包直接安装在您的接收器上。上游存储库中可能缺少其某些依赖项。在这种情况下,请使用 bitbake(即bitbake -b package_name
)编译它们,然后手动安装它们。
使用自定义图像可确保满足 tvheadend 的运行时依赖性。然而,也可以使用预先构建的图像。