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

Gump

Neuer User
Mitglied seit
4 Aug 2008
Beiträge
41
Punkte für Reaktionen
0
Punkte
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
 
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?
 
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

  • history-log.txt
    7.8 KB · Aufrufe: 32
Zuletzt bearbeitet:
@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
 
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.
 
Zuletzt bearbeitet:
Keine weitern Fragen?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.