Mini-rootfs :: Building enigma2 z zależnościami :: build-cmd :: Instalacja enigma2 z zależnościami :: Narzędzia i rozszerzenia :: Listy kanałów :: Uwagi końcowe

DVB STB: Enigma2

Enigma2 jest popularną aplikacją realizującą funkcjonalność dekodera telewizji cyfrowej w rozwiązaniach STB (set top box) opartych na Linuxie. Zajmuje się ona zarówno samą obsługą linuxowych urządzeń DVB - /dev/dvb/adapert*/* (czyli przełączaniem kanałów, źródeł sygnału, nagrywaniem sygnału kierowaniem go na wyjście wizyjne (np. HDMI) urządzenia), jak również obsługą GUI i wszelkich jego "feature'ów". Rdzeń aplikacji napisany jest w C++, natomiast elementy interfejsu użytkownika oraz różnego rodzaju rozszerzenia kodowane są w Pythonie.

Niestety w aplikacji nie został zastosowany podział na frontend (realizujący GUI) i backend (odpowiedzialny za obsługę DVB), efektem tego jest m.in. to że drobne błędy w GUI prowadzą do restartu całej aplikacji (i np. przerwania trwających nagrań). W porównaniu z innymi projektami FLOSS (Enigma2 korzysta z licencji GPL) także rozwój projektu jest dziwny - projekt jako taki nie ma zasadniczo strony domowej, głównego repozytorium kodu, ani niczego w tym stylu - rozwijany jest jako zestaw forków, utrzymywanych w ramach poszczególnych dystrybucji oprogramowania dla STB, które od czasu do czasu wymieniają pomiędzy sobą fragmenty kodu. Wygląda to tak jakby Linux nie miał swojego repozytorium kodu, struktur projektu, itd, zamiast tego każda dystrybucja miałaby własne repozytorium kodu jądra i od czasu do czasy wymieniała kod z innymi dystrybucjami. Nie udało mi się również nigdzie odnaleźć dokumentacji pythonowego API enigmy. W przypadku dystrybucji enigmy zauważalne jest dość luźne (przynajmniej z punktu widzenia użytkownika Debiana) podejście do zagadnień licencyjnych - np. wiele z pluginów enigmy nie ma w ogóle określonej licencji (jest tylko kod w jakimś repozytorium), bardzo duża część ma licencje CC "non-comercial" (a pomimo tego znajdują się w dystrybucjach które są preinstalowane w sprzedawanych urządzeniach).

Poniższe opisy bazują na moich doświadczeniach z Enigmą2 pochodzący z dystrybucji OpenATV oraz urządzeniu Golden Interstar Xpeed LX3 (ten sam sprzęt występuje także pod nazwami "Sezam Marvel" i "inihdp"). Ogólną strukturę urządzeń DVB w tym urządzeniu można przedstawić w sposób następujący:
POWIĘKSZStruktura urządzeń DVB w Xpeed LX3

Jako że OpenATV (dystrybucja Linuxa z Enigmą oparta, jak większość podobnych, na managerze pakietów ipkg/opkg) nie udostępnia pakietów deweloperskich, a cross-kompilacja (zwłaszcza na system dla którego nie mamy bibliotek w wersjach deweloperskich) bywa uciążliwa, a zasoby STB na to pozwalają to do kompilacji postanowiłem wykorzystać Debiana działającego w chroocie. Instalacja Debiana wykonana została poprzez debootstrap - pierwszy etap (z opcją --foreign) na PC, przekopiowanie tar-em na HDD STB i tam w chroocie drugi etap debootstrapem (opcja --second-stage).

Mini-rootfs

Celem wygodnego uruchamiania usług z (potencjalnie różnych) środowisk chrootowych oraz zamienienia samego openAVT na środowisko chrootowe przygotowany został na bazie OpenAVT minimalny rootfs. Składają się na niego:

Wszystkie te programy wraz z dolinkowaniami umieszczone zostały w /bin, natomiast /sbin jest dowiązaniem symbolicznym do /bin. W /lib (ld.so.1, libc.so.6, libcrypt.so.1, libnss_files-2.19.so, libnss_files.so.2, libz.so.1) oraz moduły jądra. Ponaddto w skład mini-rootfs wchodzą pliki konfiguracyjnymi:

Building enigma2 z zależnościami

W "devel-chroot" instalujemy biblioteki developerskie

aptitude insall libcrypto++-dev libdvdnav-dev libfreetype6-dev libfribidi-dev libgif-dev libgstreamer-plugins-base0.10-dev libgstreamer0.10-dev libjpeg8-dev libpng12-dev libsdl1.2-dev libsigc++-1.2-dev  libxml2-dev libxslt1-dev
rm -fr /usr/include/linux/dvb
cp -a ~/deps/dvb_header_linux_3.14 /usr/include/linux/dvb

W "devel-chroot" kompilujemy i instalujemy enigma2 ecosystem (wykorzystywane patche można pobrać tutaj):

build-cmd

# enigma2 dependencies - "libxmlccwrap", "libdvbsi++", "tuxtxt" and "boxbranding.so"
  mkdir -p /usr/local/share/enigma2 /usr/local/lib/enigma2 /usr/local/etc/enigma2
  mkdir deps
  (
    cd deps
    git clone git://git.opendreambox.org/git/obi/libxmlccwrap.git
    (
      cd libxmlccwrap
      autoreconf -i
      ./configure
      make
      make install
    )
    git clone git://git.opendreambox.org/git/obi/libdvbsi++.git
    (
      cd libdvbsi++
      autoreconf -i
      ./configure
      make
      make install
    )
    git clone git://git.code.sf.net/p/openpli/tuxtxt
    (
      cd tuxtxt/libtuxtxt
      touch AUTHORS ChangeLog NEWS README
      autoreconf -i
      ./configure --with-boxtype=generic --with-fontdir=/usr/local/share/fonts
      make
      make install
    )
    (
      cd tuxtxt/tuxtxt
      touch AUTHORS ChangeLog NEWS README
      autoreconf -i
      ./configure --with-boxtype=generic --with-configdir=/usr/local/etc/
      make
      make install
    )
    git clone http://github.com/oe-alliance/branding-module
    (
      autoreconf -i
      ./configure \
        --with-boxtype=xpeedlx3 \
        --with-machinebrand=GI \
        --with-machinename=LX-3 \
        --with-brandoem=ini \
        --with-machinebuild=inihdp \
        --with-distro=openatv \
        --with-mtdrootfs=mtd0 \
        --with-mtdkernel=mtd2 \
        --with-rootfile=rootfs.bin \
        --with-kernelfile=kernel.bin \
        --with-mkubifs="-m 4096 -e 1040384 -c 1984" \
        --with-ubinize="-m 4096 -p 1024KiB" \
        --with-driverdate="20140716" \
        --with-imageversion=4.1 \
        --with-imagebuild=0 \
        --with-imagedir=xpeedlx3 \
        --with-imagefs=ubi
      make
      make install
      rm /usr/local/lib/enigma2/python/boxbranding.la
      
      # compare results of branding-module/BoxBranding/lib/test.py running with:
      #   orginal boxbranding.so (/usr/local/lib/enigma2/python/boxbranding.so) and new build boxbranding.so
      # if need correct ./configure options
    )
# "enigma2"
  git clone http://github.com/openatv/enigma2 enigma2-openatv
  (
    cd enigma2-openatv
    autoreconf -i
    ./configure --with-boxtype=xpeedlx3
    
    # build and run patches
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-build.diff
    # VT, keyboard, movie seek, epg, clock and debug info patches
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-VT.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-keyboard.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-seek.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-EPG.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-clock.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-debug.diff
    # test & dirty-hack patches
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-decoder-pesinput.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-RTL2832_R820T.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/Enigma2-dirty.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/InfoBarGenerics-DirtyHacks.diff
    # plugins patches
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/InfoPanel.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/DefaultServicesScanner.diff
    patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/DiseqcTester.diff
    
    echo "exit 0" > py-compile
    make
    make install
    ( cd data/vfd255 && make install )
    ( cd /usr/local/lib/enigma2/python/Plugins && rm -fr SystemPlugins/WirelessLan Extensions/DVDBurn Extensions/Modem Extensions/MediaScanner )
    
    wget -O /usr/local/lib/enigma2/python/process.py  https://raw.githubusercontent.com/openembedded/openembedded/master/lib/oe/process.py
  )
# skins
  mkdir skins
  (
    cd skins
    git clone https://github.com/oe-alliance/oe-alliance-e2-skindefault skin-default
    (
      cd skin-default
      autoreconf -i
      ./configure
      make
      make install
    )
    git clone https://github.com/a4tech/mega32-egami.git mega32
    (
      cd mega32
      patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/SkinMega32.diff
      cp ~/NEW-FROM-SCRACH/rrp/patches/SkinMega32-channel.png usr/share/enigma2/mega32/skin_default/
      cp -a usr/share/enigma2/mega32 /usr/local/share/enigma2/
      cp -a usr/share/fonts/* /usr/local/share/fonts/
    )
  )
# tools
  mkdir tools
  (
    cd tools
    
    git clone git://github.com/oe-alliance/aio-grab.git
    (
      cd aio-grab
      autoreconf -i
      ./configure
      make
      make install
    )
    
    mkdir showiframe && wget -O showiframe/showiframe.c https://raw.githubusercontent.com/SIFTeam/openembedded/master/recipes/vuplus/vuplus-dvb-tools/showiframe.c
    (
      cd showiframe
      gcc showiframe.c -o showiframe
      cp showiframe /usr/local/bin/
    )
    
    cp -a arora-bin/qws /usr/local/
  )
# plugins
  mkdir plugins
  mkdir plugins/e2openplugin
  (
    cd plugins
    
    git clone http://github.com/E2OpenPlugins/e2openplugin-OpenWebif.git e2openplugin/openWebif
    (
      cd e2openplugin/openWebif
      patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/OpenWebif.diff
      cp -a plugin/ /usr/local/lib/enigma2/python/Plugins/Extensions/OpenWebif
    )
    
    git clone https://github.com/E2OpenPlugins/e2openplugin-StreamInterface.git e2openplugin/streamInterface  # unknow licence
#    cp -a e2openplugin/streamInterface/plugin/ /usr/local/lib/enigma2/python/Plugins/Extensions/WebStreamInterface
    
    git clone https://github.com/E2OpenPlugins/e2openplugin-SimpleUmount e2openplugin/simpleUmount
    cp -a e2openplugin/simpleUmount/plugin/ /usr/local/lib/enigma2/python/Plugins/Extensions/SimpleUmount
    
    git clone https://github.com/E2OpenPlugins/e2openplugin-SetPicon e2openplugin/setPicon
#    cp -a e2openplugin/setPicon/plugin/ /usr/local/lib/enigma2/python/Plugins/Extensions/SetPicon
      
    git clone https://github.com/E2OpenPlugins/e2openplugin-CrossEPG e2openplugin/crossEPG
#    (
#      cd crossEPG
#      ln -s /usr/include/libxml2/libxml /usr/include/
#      make
#      make install
#    )
    
    git clone https://github.com/betonme/e2openplugin-EnhancedMovieCenter.git enhancedMovieCenter
    (
      cd enhancedMovieCenter
      
      mkdir m4
      autoreconf -i
      ./configure
      echo "exit 0" > py-compile
      
      patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/EnhancedMovieCenter.diff
      make
      make install
    )
    
    cp -a ~/NEW-FROM-SCRACH/rrp/plugins/TelnetClient /usr/local/lib/enigma2/python/Plugins/Extensions/
    
    git clone http://github.com/oe-alliance/enigma2-plugins
    (
      cd enigma2-plugins
      autoreconf -i
      ./configure --with-boxtype=xpeedlx3
      echo "exit 0" > py-compile
      
      ( cd moviecut        && make ; make install )
      ( cd vlcplayer       && make ; make install )
      ( cd youtubeplayer   && make ; make install )
      
      patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/bmediacenter.diff
      ( cd bmediacenter      && make ; make install )  # unknow licence
      patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/oscaminfo.diff
      ( cd oscaminfo         && make ; make install )  # unknow licence
      
      patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/aspectratioswitch.diff
      ( cd aspectratioswitch   && make ; make install ) # non-free licence (no comercial), in plugin.py MIT-type
      ( cd epgsearch           && make ; make install ) # non-free licence (no comercial)
      ( cd toolkit             && make ; make install ) # non-free licence (no comercial), for epgsearch
    )

    git clone https://github.com/oe-alliance/oe-alliance-plugins
    (
      cd oe-alliance-plugins
      autoreconf -i
      ./configure --with-boxtype=xpeedlx3
      echo "exit 0" > py-compile
      
      ( cd AutoBouquetsMaker  && make && make install )
      ( cd Blindscan          && make && make install )
      ( cd TransCodingSetup   && make && make install ) # unknow licence
      patch -p1 < ~/NEW-FROM-SCRACH/rrp/patches/WebBrowser-arora.diff
      ( cd WebBrowser         && make && make install ) # unknow licence
    )
  )

XHTML generated by highlight (http://www.andre-simon.de/) from build-cmd

Instalacja enigma2 z zależnościami

W "production-chroot" przygotowujemy środowisko uruchomieniowe:

aptitude install libfreetype6 libxml2 libjpeg8 libfribidi0 libgif4 libgstreamer0.10-0 ibgstreamer-plugins-base0.10-0 libpng12-0 libsigc++-1.2-5c2  libxslt1.1   llibgomp1 libpython2.7
aptitude install python-twisted-core python-twisted-runner python-twisted-web python-usb python-openssl python-gdata
wget -O /tmp/python-cheetah_2.4.4-3+b1_mipsel.deb http://ftp.pl.debian.org/debian/pool/main/c/cheetah/python-cheetah_2.4.4-3+b1_mipsel.deb && dpkg -i /tmp/python-cheetah_2.4.4-3+b1_mipsel.deb
wget -O /tmp/libssl0.9.8_0.9.8o-4squeeze14_mipsel.deb http://ftp.pl.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_mipsel.deb && dpkg -i /tmp/libssl0.9.8_0.9.8o-4squeeze14_mipsel.deb
ln -s /usr/local/etc/enigma2       /etc/
ln -s /usr/local/etc/timezone.xml  /etc/
ln -s /usr/local/etc/tuxbox        /etc/
ln -s /usr/local/etc/tuxtxt        /etc/
ln -s /usr/local/lib/enigma2       /usr/lib/
ln -s /usr/local/share/enigma2     /usr/share/
ln -s /usr/local/share/fonts       /usr/share/
ln -s /usr/local/qws               /qws

Następnie należy skopiować /usr/local z deweloperskiego do produkcyjnego chroot'a. Aby nie zarzynać flasha warto także (wzorem orginalnego OpenATV) pewne katalogi przenieść do /run w którym montowany jest ramfs:

rm -fr /media /var/tmp /var/log /var/cache # /var/lock i /var/run są domyślnie linkami do /run
ln -s /run/media /media
ln -s /run/tmp   /var/tmp
ln -s /run/log   /var/log
ln -s /run/cache /var/cache

Narzędzia i rozszerzenia

TelnetClient

Jest to wtyczka do Enigmy implementująca funkcjonalność klienta telnet. Korzysta ona z pythonowego modułu terminal. Funkcjonuje zarówno w oryginalnej wersji enigmy2, jak i wersji zmodyfikowanej powyżej opisanymi łatkami. W nie zmodyfikowanej wersji enigmy modyfikatory klawiatury działają jednorazowy (czyli np. aby wpisać AB naciskamy shift, puszczamy go, wciskamy a, ponownie naciskamy i puszczamy shift, wciskamy b). Aby korzystać z wersji z usprawnieniami należy zmienić wartość enigmaFixed w ConsoleKeyboardInput na True. Całość wtyczki zaimplementowana jest w pliku: plugin.py

Pobierz

Narzędzia obsługi FrameBuffera

  • FBinit.c - inicjalizacja framebuffera w Xpeed LX3
  • FBclear.c - czyszczenie framebuffera
  • FBconsole.c - przekierowanie konsoli z tty2 na framebuffer (zrobione trochę na około - tak aby nie korzystać z linuxowego rozwiązania konsoli na framebufferze bo nie chciało ono działać na testowanej wersji jądra/sprzęcie)

Narzędzia wspomagające edycję list kanałów

  • userbouquet-names.sh - dodawanie do "userbouquet" nazw kanałów w oparciu o lamedb w celu prostej edycji jako plik tekstowy

Listy kanałów

W enigma2 występują dwa główne miejsca konfiguracji list kanałów - są to plik /etc/enigma2/lamedb oraz plik /etc/enigma2/bouquets.tv (wraz z plikami do niego podłączonymi).

lamedb

W pliku tym znajdują się informacje związane z odbiorem poszczególnych stacji - informacje na temat używanych transponderów oraz informacje na temat parametrów poszczególnych programów (transponder i parametry w ramach niego).

Listy parametrów transponderów znajdują się pomiędzy liniami "transponders" i "end". Opis parametrów transpondera ma postać:

[NAMESPACE ID]:[TRANSPORT STREAM ID]:[NETWORK ID]
	[type] [frequency kHz]:[symbol rate]:[polaization]:[fec]:[position]:[inversion]:[flags]:[system]:[modulation]:[rolloff]:[pilot]
/

gdzie:

  • type: s => DVB-S* t => DVB-T c => DVB-C
  • polaization: 0 => Horizontal, 1 => Vertical, 2 => left, 3 => right
  • system: 0 => DVB-S, 1 => DVB-S2
  • cztery ostatnie pola (:[system]:[modulation]:[rolloff]:[pilot]) nie występują w części wpisów

Listy parametrów usług / stacji TV (pomiędzy liniami "services" i "end"), opis parametrów usługi ma postać:

[SERVICE ID]:[NAMESPACE ID]:[TRANSPORT STREAM ID]:[NETWORK ID]:[type 1=TV 2=RADIO]:[number]
[nazwa usługi]
p:[nazwa dostawcy],c:[cached data],C:[card ID],f:[flags]

Zobacz także w Sieci: Lamedb format explained.

bouquets.tv

bouquets.tv oraz includowane przez niego (poprzez wpis #SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "nazwa_pliku" ORDER BY bouquet) pliki zawierają m.in. wpisy typu:

  • stacja TV: #SERVICE 1:0:[service type]:[SERVICE ID]:[TRANSPORT STREAM ID]:[NETWORK ID]:[NAMESPACE ID]:[parent service ID]:[parent transport stream ID]:0::[komentarz], gdzie:
    • service type - typowo 1
    • SERVICE ID - identyfikuje usługę na transponderze (zestaw strumieni danej stacji)
    • TRANSPORT STREAM ID + NETWORK ID + NAMESPACE ID - identyfikuje multiplex (transponder, kanał)
    • parent service ID - typowo 0
    • parent transport stream ID - typowo 0
  • separator: #SERVICE 1:64:0:0:0:0:0:0:0:0::sep
  • pominięty numer: #SERVICE 1:832:0:0:0:0:0:0:0:0::noop
  • nazwa: #DESCRIPTION [nazwa dla poprzedzającego wpisu #SERVICE], dla kanałów nazwa standardowo pobierana jest z lamedb więc nie ma potrzeby stosowania tego pliku)

Pierwsze pole w #SERVICE określa typ usługi:

  • 0 => Structure
  • 1 => DVB
  • 2 => File

Drugie pole w #SERVICE jest flagą binarną:

  • 1 => isDirectory
  • 2 => mustDescent
  • 3 => canDescent
  • 8 => shouldSort
  • 16 => hasSortKey in data[3]
  • 32 => sort key ma wartość 1 zamiast 0
  • 64 => isMarker
  • 128 => isGroup
  • 256 => isNumberedMarker (używany z isMarker)
  • 512 => isInvisible

Pola od trzeciego do dziesiątego to kolejne elementy tablicy data[]. Natomiast ostatnie jedenaste pole jest postaci: [URL] [nazwa], URL może zawierać dwukropki.

Przykład - /etc/enigma2/bouquets.tv:

#NAME Bouquets (TV)
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquet.001-030.Podstawowe.tv" ORDER BY bouquet
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquet.031-050.Dodatkowe.tv" ORDER BY bouquet
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquet.051-080.Przyrodnicze.tv" ORDER BY bouquet
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquet.081-110.Kids.tv" ORDER BY bouquet
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquet.111-130.Informacyjne.tv" ORDER BY bouquet
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquet.131-160.Dodatkowe2.tv" ORDER BY bouquet
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquet.161-180.Music.tv" ORDER BY bouquet
#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet

Przykład - fragment /etc/enigma2/bouquet.051-080.Przyrodnicze.tv (wpis z noop_52 powoduje przeskoczenie jednego kanału w numeracji):

#NAME Przyrodnicze, naukowe itp
#SERVICE 1:64:0:0:0:0:0:0:0:0::przyrodnicze, naukowe itp
#DESCRIPTION przyrodnicze, naukowe itp
#SERVICE 1:0:1:3B66:12C:13E:820000:0:0:0::Animal Planet HD
#SERVICE 1:832:0:0:0:0:0:0:0:0::noop_52
#SERVICE 1:0:1:1C8B:1CE8:71:820000:0:0:0::Nat Geo Wild

Uwagi końcowe

Ważne wpisy konfiguracyjne w /etc/enigma2/settings:

config.misc.remotecontrol_text_support=false
config.usage.shutdownNOK_action=standby
config.usage.boot_action=standby
config.usage.quickzap_bouquet_change=true
config.skin.primary_skin=Utopia_HD/skin.xml
config.misc.epgcachepath=/media/hdd/
config.usage.allowed_timeshift_paths=['/media/hdd/timeshift/']
config.usage.allowed_autorecord_paths=['/media/hdd/movie/']
config.EMC.movie_pathlimit=/media
config.EMC.movie_homepath=/media/hdd/movie
config.EMC.movie_trashcan_path=/media/hdd/movie/.Trash
config.EMC.movie_preview=true
config.OpenWebif.auth=true
config.av.policy_43=letterbox

backup miniFS oraz debianowego chroot'a:

cd / && echo -e "dev/*\nproc/*\nsys/*" | busybox tar -X - -cf /media/hdd/miniFS.tar bin dev etc lib media proc sbin sys
cd /debian/ && echo -e "dev/*\nproc/*\nrun/*\nsys/*" | busybox tar -X - -cf /media/hdd/debian.tar bin dev etc home lib media mnt proc root sbin sys tmp usr var

Gdy nasze skrypty startowe zawiodą możemy odpalić linuxa z /bin/sh jako init-em. W tym celu należy połączyć się przez port szeregowy (prędkość 115200) i przed startem bootloadera nacisnąć Ctr+C, zobaczymy wtedy:

BCM97424B2 CFE v3.41, Endian Mode: Little
Build Date: Sun May 25 23:34:49 CEST 2014 (paul@ini)
Copyright (C) Broadcom Corporation.

******************************************
Automatic startup canceled via Ctrl-C
******************************************
[...]
CFE>

W uzyskanym shellu należy wpisać: boot -z -elf nandflash0.kernel: 'ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs rw bmem=128M@64M bmem=384M@512M memc1=640M init=/bin/sh' i nacisnąć Enter.



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/usage_and_config/multimedia/enigma2_dvb_stb) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2015-10-02 19:27:30 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).