如何在运行基于 OpenEmbedded 的 Linux 的机顶盒上安装 Tvheadend

如何在运行基于 OpenEmbedded 的 Linux 的机顶盒上安装 Tvheadend

语境

我有一个机顶盒八角SF4008,其设计目的是运行开放嵌入式基于 Linux 的发行版。我目前有开放式全地形车安装在其上。

通常,用户希望将此类机顶盒的视频输出连接到显示器,然后他们希望通过前端 GUI 观看频道,例如谜2

我的用例有所不同。我想通过计算机网络传输频道。我可以使用 Enigma2,但我认为电视前端更加用户友好且功能更加丰富。

问题

我想直接在机顶盒上运行 Tvheadend,并且我正在寻找简单的在那里安装它的方法。

选项

openATV 使用的包管理器是奥普克。预配置的存储库包含许多特定于 Enigma2 的软件包,但只有很少的通用软件包,如perlpythonvim类似的。据我所知,其中没有 Tvheadend 包,也没有任何其他与 opkg 兼容的兼容架构(armv7l/armhf)的存储库。

预配置的存储库不包含诸如 之类的构建工具make,不包含编译器,也不包含基本库的开发版本。因此,直接在机顶盒上编译 Tvheadend 需要相当复杂的设置。在其他地方交叉编译它绝对是可能的,而且可能更容易。但是,我更喜欢使用预编译的二进制文件。

我知道 Tvheadend 提供APT 存储库具有兼容armhf架构的 Debian 软件包。我还发现opkg 可以处理安装 .deb 文件。但是,由于运行时依赖项,外部包只有在安装了所有本机依赖项后才能正常工作。

也许我可以直接在机顶盒上安装 Debian。有一个刷新过程,其中包括重写内核映像,然后提取根文件系统的存档。我对引导加载程序不熟悉,并且不知道是否需要或如何修改它才能正确引导标准 Linux 内核。此外,定制硬件驱动程序可能首先需要从当前运行的Linux内核中提取。

问题

上述选项可能都有效,但我认为它们不必要地复杂。我相信应该有一个更简单的方法。也许已经提到的选项可以简化。或者也许有一种我不知道的更简单的方法。

答案1

有一个更简单的方法。

不要尝试引导到不同的 Linux 发行版,而是使用现有的 Linux 内核和 chroot 环境。无需修改引导加载程序或将自定义硬件驱动程序移植到新内核。

创建合适的 chroot 环境的简单方法之一是引导一个干净的系统。 Debian 社区专门为此目的提供了一个工具。它被称为反引导程序

答案2

如果可以接受交叉编译,方法之一是使用 oe-alliance 的构建环境:

  1. 用于git克隆构建环境存储库并切换到某个最近的分支,例如4.3.
  2. 检查是否有 Bitbake 配方tvheadend。它应该位于meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend_git.bb.如果不存在,请将meta-openembedded子模块更新到 的最新master分支origin,该分支应该包含它。
  3. 安装构建依赖项,例如使用来自 openembedded 的指南。
  4. 为 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.
  5. 使用类似于以下的命令激活 bitbake 构建环境:

    $ cd builds/openatv/release/sf4008/
    $ . env.source
    
  6. 通过运行 来构建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 的运行时依赖性。然而,也可以使用预先构建的图像。

相关内容