.titleBar { margin-bottom: 5px!important; }

[ Skript Entwickler Diskussion ] über Aufbau und Struktur des Skrites

Dieses Thema im Forum "Telekom" wurde erstellt von Gump, 5 März 2009.

  1. Gump

    Gump Neuer User

    Registriert seit:
    4 Aug. 2008
    Beiträge:
    41
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo zusammen,

    ich würde gerne ein bischen mehr unterstützen, da mich das Projekt sehr interessiert. Leider hab ich aus dem "Geflecht" an Threads und Infos noch nicht so ganz den Kern extrahieren können. Ich bin dabei, das aktuelle Skript durchzuarbeiten, aber es wäre hilfreich, wenn es vom Meister jpascher vielleicht ein paar Erläuterungen gäbe.

    Ich will hier nicht wieder den Thread unnötig aufblähen, daher zunächst meine Frage, ob Details zum Skript/zur Firmwarerstellung hier oder an anderer Stelle diskutiert werden sollen (oder vielleicht - was mir entgangen wäre - bereits diskutiert werden)? Habe bisher nur den Thread mit dem PPoE Problem gefunden, der aber in eine ähnliche Richtung geht.

    Nach meinem bisherigen Verständnis, sehe ich im wesentlichen 3 Schritte zur Erstellung einer neuen Firmware:

    1.) Anpassungen der Konfigurations- und Startparameter; im wesentlichen in den Dateien rc.conf und rc.S im Verzeichnis etc/init.d
    2.) Ersetzen der Binärdateien aus der "neuen" Firmware unter Beibehaltung einiger speziellen Dateien (Treiber) aus der Originalfirmware.
    3.) Anpassung der GUI

    Schirtt 3 ist relativ klar (Entfernen von nicht vorhandenen Merkmalen etc.)

    Bei Schritt 1 ist auch noch eigermaßen nachvollziehbar, was passiert. Allerdings wäre auch hier berits ein wenig Erklärung hilfreich.

    Bei Schritt 2 stehe ich allerdings auf dem Schlauch: Wie kann man entscheiden/herausfinden, welche Dateien ersetzt und welche beibehalten werden müssen?

    Wie gesagt: Diskussion gerne auch woanders. Würde mich über Feedback der Experten freuen...

    Gump
     
  2. iqjet

    iqjet Mitglied

    Registriert seit:
    16 Juli 2006
    Beiträge:
    685
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    47.6076 N, 12.2016E
    Stimme dir zu. Ein neuer Thread zum Thema Script wäre hilfreich.
    Eigentlich sollte die Kernfrage lauten. Wie kann man:
    -eine allgemein verständliche Script Doku
    -eine Doku für die Entwickler erstellen?

    Nur ich weiß nicht wie man da Anfangen soll?
     
  3. Jpascher

    Jpascher IPPF-Promi

    Registriert seit:
    31 März 2007
    Beiträge:
    6,120
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #3 Jpascher, 5 März 2009
    Zuletzt bearbeitet: 2 Juli 2010
    Ich möchte auf die Fragen nun nicht direkt antworten, und etwas weiter ausholen.

    An einfachsten du orientierst dich einmal an einen Log, wenn das Skript durchläuft, dann hast du auch bereits die Abfolge.

    Werde hier noch mal was einfügen aber im Anhang ein Beispiel log.

    Der eigentliche Beginn:

    ./start.sh

    Menüconfig:

    *** End of Speed-to-fritz configuration.
    *** Execute 'sp-to-fritz.sh' to build Speed-to-fritz.
    Phase 1: Download or check firmware images.
    Phase 2: Unpack and extract files from images.
    Verifying version of TCOM and AVM firmware images ...
    ...
    Phase 3: Copy sources.
    Phase 4: Apply changes.
    Beispiel 920

    Code:
    [B]File Speedport920 start:[/B]
    920/////////////////////////////////////////////////////////////////////////////
    Fritz_Box_7270  --->   Fritz_Box_DECT_W920V
    -- Move contents of OEM directory:
          move /etc/default.Fritz_Box_7270 --> /etc/default.Fritz_Box_DECT_W920V
      -- DSL Driver was taken from the original t-com firmware!
    -- Add missing VDSL scale images
    -- Adding multiannex pages ...
    -- Adding settings timezone pages ...
    ....
    920/////////////////////////////////////////////////////////////////////////////
    [B]File Speedport920 ende![/B]
    Phase 9: Patch install.
    Phase 10: Pack and deliver.

    Als nächster hilft auch etwas die Verzeichnisstruktur.

    sp-to-fritz.sh sollte auch relativ einfach zu entschlüsseln sein.

    Vereinfacht:

    Code:
    Als erster werden Skriptinterne Variabeln voreingestellt.
    
    Aber auch Variablen die die CONFIG Variabln des Speedport beeinflußen können.
    
    Wichtig ist die folgende Funkion diese entält Teile die Tyspezifisch sind!
    Aufgerufen wird die aber erst weiter unten.
    function set_model() 
    {
    case "$1" in
    "500")
    ... 
    "501")
    ...
    "701"|"707")
    ...
    "900"|"907") 
    ...
    esac
    
    return 0
    }
    # hole Kommandozeile Parameter von sp-to-fritz.sh
    . $inc_DIR/processcomline
    # includiere externe Funktioinen
    . $inc_DIR/includefunctions
                 
    set_model "$SPMOD"
    
    #START
    # extract source
    . $inc_DIR/get_workingbase
    # create backup for final compare
    # get version from etc/.version into variables
    . $inc_DIR/getversion
    # get produkt from etc/default.F* into variables FBMOD, CONFIG_PRODUKT and CONFIG_SORCE
    . $inc_DIR/getprodukt
    # save some variabels to incl_var
    . $sh2_DIR/settings
    #print some Hardware setting found in the two firmwares in use
    $sh2_DIR/dedect_HW
    # make sure all is set to correct rights
    [ ${FAKEROOT_ON} = "n" ] && chmod -R 777 .
    echo "********************************************************************************"
    Phase 3: Copy sources
    echo "********************************************************************************"
     echo "${SPMOD}/////////////////////////////////////////////////////////////////////////////"
    # Flashing original firmware image ...                               
    if [ "$ORI" != "y" ]; then
     #international language - fix patches in advance 
     for FILE in `ls $P_DIR`  ; do
        [ "$OEMLINK" == "avme" ] && sed -i -e "s|/avm/|/$OEMLINK/|" $P_DIR/$FILE 
        [ "$OEMLINK" == "avm" ] && sed -i -e "s|/avme/|/$OEMLINK/|" $P_DIR/$FILE 
     done
     #prepare for use of Freetz 7170 Firmware 
     [ "$MOVE_ALL_to_OEM" = "y" ] && $sh_DIR/move_all_to_OEM.sh || $sh_DIR/remake_link_avm.sh 
     # Please dont add conditions on models in any external file
     #enable ext2
     [ "$ENABLE_EXT2" = "y" ] && $sh2_DIR/patch_ext2 
     if [ "$SPMOD" = "920" ]; then
     . Speedport920
     fi
     if [ "$SPMOD" = "907" ]; then
     . Speedport907
     fi
     if [ "$SPMOD" = "707" ]; then
     . Speedport707
     fi
     if [ "$SPMOD" = "721" ]; then
     . Speedport721
     fi
     if [ "$SPMOD" = "500" ]; then
     . Speedport500
     fi
     if [ "$SPMOD" = "501" ]; then
     . Speedport501
     fi
     if [ "$SPMOD" = "503" ]; then
     . Speedport503
     fi
     #remove help 
     [ "$REMOVE_HELP" = "y" ] && $sh_DIR/rmv_help.sh
     #Add modinfo
     $sh_DIR/add_modinfobutton.sh 
     #relace banner
     [ $COPY_HEADER = "y" ] && $sh_DIR/rpl_header.sh 
     #add addons
     [ "$COPY_ADDON_TMP" = "y" ] &&  cp -fdpr  ./addon/tmp/squashfs-root/*  
     #patch download url and add menuitem support
     [ "$ADD_SUPPORT" = "y" ] && $sh2_DIR/patch_url 
     #add dsl expert pages support
     [ "$ADD_DSL_EXPERT_MNUE" = "y" ] && $sh_DIR/add_dsl_expert.sh 
     #add omlinecounter pages 
     [ "$ADD_ONLINECOUNTER" = "y" ] && $sh_DIR/add_onlinecounter.sh 
     #relpace assistent menuitem with enhenced settings 
     [ "$RPL_ASSIST" = "y" ] && $sh2_DIR/rpl_ass_menuitem 
     #gsm    
     [ "$DO_GSM_PATCH" = "y" ] && $sh_DIR/disply_gsm.sh
     #reverse phonebook lookup
     [ "$DO_LOOKUP_PATCH" = "y" ] && $sh2_DIR/patch_fc 
     # remove tcom and some other oem dirs and add link instead to enable other brands.
     $sh2_DIR/add_tcom_link
     #add kaid for xbox 
     [ "$ADD_KAID" = "y" ] && $sh2_DIR/add_kaid
     #exchange kernel 
     [ "$XCHANGE_KERNEL" = "y" ] && cp -rfv "${SPDIR}/kernel.raw" "${FBDIR}/kernel.raw"
      #remove signature
     $sh_DIR/rmv_signatur.sh 
     $sh_DIR/remove_autoupdatetab.sh 
     # patch update pages 
     $sh_DIR/patch_tools.sh 
     #export download links
     $HOMEDIR/extract_rpllist.sh    
     #packing takes place on SPDIR
     export SPDIR="${FBDIR}"
     echo "${SPMOD}/////////////////////////////////////////////////////////////////////////////"
     echo "********************************************************************************"
     Phase 9 Patch install
     echo "********************************************************************************"
    else
     #add addons
     export OEM="tcom"
     [ "$COPY_ADDON_TMP_to_ORI" = "y" ] &&  cp -fdpr  ./addon/tmp/squashfs-root/*  --target-directory="${DST}"
     #exchange kernel
     echo "${SPMOD}/////////////////////////////////////////////////////////////////////////////"
     # patch update pages 
     $sh_DIR/patch_tools.sh    
    fi
    $sh_DIR/patch_install.sh 
    . $inc_DIR/testerror
    echo "********************************************************************************"
    Phase 10:Pack and deliver
    echo "********************************************************************************"
    # compose Filename for new .tar ended File
    # print some info on screen
    . $inc_DIR/print_settings
    if [ "$SET_UP" = "n" ]; then
     #wrap all up again
     fw_pack ...
        echo "********************************************************************************"
     if [ "$PUSHCONF" = "y" ]; then
      pushconfig ... 
     fi
     

    Anhänge:

  4. Gump

    Gump Neuer User

    Registriert seit:
    4 Aug. 2008
    Beiträge:
    41
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @JPascher:

    Danke ersttmal für die einleitende Beschreibung. Interessant ist ja nun, welche Teile verändert werden und welche aus der neuen Firmware unverändert übernommen werden.

    Abhängig vom Modell werden ja sehr viele Parameter abgefragt bzw. gesetzt. In den SpeedportXXX Subskripten werden dann die wesentlichen Anpassungen am Kernel vorgenommen.

    Da das Skript sehr viele Speepdort Modelle anpassen kann, möchte ich mich im Moment erstmal auf den W920V konzentrieren, da ich diesen selber habe.

    Ich hab mal damit begonnen, quasi als "Reverse-Engineering", mir die Unterschiede zwischen der Original TCOM, einer Original AVM (hier 7570 bzw. 7270) zu einer gefritzten Firmware (verschiedene) anzusehen.

    Bei den Parametern sehe ich im wesentlichen die Notwendigkeit,

    • Basisangaben aus der Original-TCOM- in die anzupassende AVM-Firmware zu übertragen,

      Code:
      CONFIG_PRODUKT_NAME
      CONFIG_PRODUKT
      CONFIG_INSTALL_TYPE
      CONFIG_ROMSIZE
      CONFIG_RAMSIZE
    • bzw. Hardware-Features auszulesen, um bei Differenzen später Anpassungen in der GUI vorzunehmen.

      Code:
      CONFIG_AB_COUNT
      CONFIG_ETH_COUNT
      CONFIG_CAPI
      CONFIG_CAPI_POTS
      CONFIG_CAPI_TE
      CONFIG_DECT
      CONFIG_WLAN
      CONFIG_USB_HOST
      CONFIG_FON
      
      CONFIG_VDSL
      CONFIG_VINAX

    Alle weiteren Parameter sind offenbar von den Features des ausgewählten Firmware-Releases abhängig, sofern bei der Hardware (beschrieben in den Einstellungen der Original-Firmware) die nötigen Voraussetzungen (WLAN, DECT, USB, ...) dafür gegeben sind.

    Fortsetzung folgt...

    Gump
     
  5. Jpascher

    Jpascher IPPF-Promi

    Registriert seit:
    31 März 2007
    Beiträge:
    6,120
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #5 Jpascher, 6 März 2009
    Zuletzt bearbeitet: 2 Juli 2010
    Wenn du nur wissen willst was an der rc.conf der 7270 Firmware geändert wurde, dann gibt es da ein 0.inf.diff File das dir die vorgenommen Änderungen deutlich macht.

    Mit den Files ist es schwieriger, aber das Skript hat ja einige Optionen die dir diffs erstellen.

    Seit neuesten auch kdiff3 das muss aber vorher mit apt-get install kdiff3 installiert werden.

    Alle Type spezifischen Änderungen laufen über ./SpeedportXXX

    Der nächste Schritt ist somit das du dir das mal genauer ansiehst.
    Dieser Teil ist ebenfalls strukturiert und die meisten Teile sind in untergeordnete Scripte ausgelagert.

    Die Scripte im Verzeichnis /alien/patches und alien/subskripte sind grundlegend.
    Die im Verzeichnis /subscrits sind untergeordneter Natur und wären verzichtbar, wenn speed-to-fritz direkt in freetz integriert wäre.

    Die meisten Subscripte sind "gewachsen" und könnten natürlich eine Überarbeitung oder Vereinfachung vertragen, nur wage ich das kaum da die Verflechtungen oft schon recht komplex sein können.

    Generell sind die Skript so angelegt, dass diese tolerant auf Veränderungen in der Firmware reagieren so weit das voraussehbar ist.

    Grundsatz:
    Es gibt bei nicht lebenswichtigen Teilen keine Fehlermeldung, wenn das Skript nicht mehr die erwünschte Anpassung vornimmt.
    Es wird somit vorgezogen das Script produziert ein brauchbares Ergebnis, auch wenn sich die Firmware ändert.
    Auftretende Fehler werden erst behoben, wenn die durch Tests festgestellt werden.
    Diffs werden nur verwendet, wenn komplette Files neu geschrien werden.

    Gepatcht wird in erster Linie mit "sed".

    Viele der Patches beziehen sich sowie auf die GUI.
     
  6. Jpascher

    Jpascher IPPF-Promi

    Registriert seit:
    31 März 2007
    Beiträge:
    6,120
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Keine weitern Fragen?