FirmwareEntwicklung: Unterschied zwischen den Versionen

Aus Freifunk Franken
Wechseln zu:Navigation, Suche
(Init)
 
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
= Benutzung des Buildscripts =
* git clone https://github.com/FreifunkFranken/firmware.git
* git clone https://github.com/FreifunkFranken/firmware.git
* cd firmware
* cd firmware
Zeile 9: Zeile 11:
* ./buildscript selectbsp bsp/board wr1043nd.bsp
* ./buildscript selectbsp bsp/board wr1043nd.bsp
* ./buildscript
* ./buildscript
= Was ist ein BSP? =
Ein BSP beschreibt, was zu tun ist, damit ein Firmware Image für eine spezielle Hardware gebaut werden kann.
Typischerweise ist eine folgene Ordner-Struktur vorhanden:
* .config
* root_file_system/
** etc/
*** rc.local.board
*** config/
**** board
**** network
**** system
*** crontabs/
**** root
Die Daten des BSP werden nie alleine verwendet. Zu erst werden immer die Daten aus dem "default"-BSP zum Ziel kopiert, erst danach werden die Daten des eigentlichen BSPs dazu kopiert. Durch diesen Effekt kann ein BSP die "default" Daten überschreiben.
= Der innere Aufbau des Buildscripts =
* Das BSP file wird als dot Script eingeladen.
* Community file generiert dynamisches sed-Script, dies geschriebt, damit die Templates mit den richtigen Werten gefüllt werden.
== ./buildscript prepare ==
* Sourcen werden in einen separaten src-Folder geladen, sofern diese noch schont da sind. Zu den Sourcen zählen folgende Komponenten:
** OpenWRT
** Sämtliche Packages (ggfs werden Patches angewandt)
* Ein ggfs altes Target wird gelöscht
* OpenWRT wird ins Target exportiert (kopiert)
* Eine OpenWRT Feed-Config wird mit dem lokalen Source Verzeichnis als Quelle angelegt
* Die Feeds werden geladen
* Spezielle Auswahl an Paketen wird geladen
* Patches werden angewandt
* board_prepare() aus dem BSP wird aufgerufen (wird. z.B. fur Patches für eine bestimmte HW verwendet)
== ./buildscript build ==
* prebuild
** $target/files aufräumen
*** (In $target/files liegen Dateien, die später direkt im Ziel-Image landen)
** Files aus default-bsp und bsp kopieren
** OpenWRT- und Kernel-Config kopieren
** board_prebuild() aus dem BSP wird aufgerufen
* Templates transformieren
* GIT Versionen speichern: $target/files/etc/firmware_release
* OpenWRT: make
* postbuild
** board_postbuild() wird aufgerufen
== ./buildscript config ==
Um das Arbeiten mit den OpenWRT .config's zu vereinfachen bietet das Buildscript die Möglichkeit die OpenWRT menuconfig und die OpenWRT kernel_menuconfig aufzurufen. Im Anschluss hat man die Möglichkeit die frisch editierten Configs in das BSP zu übernehmen.
* prebuild
* OpenWRT: make menuconfig ; make kernel_menuconfig
* Speichern, y/n?
* Config-Format vereinfachen
* Config ins BSP zurück speichern

Version vom 10. August 2014, 01:07 Uhr

Benutzung des Buildscripts

Mit Hilfe der Community-Files werden Parameter, wie die ESSID, der Kanal sowie z.B. die Netmon-IP gesetzt. Diese Einstellungen sind Community weit einheitlich und müssen i.d.R. nicht geändert werden.

  • ./buildscript selectcommunity community/franken.cfg

Je nach dem, für welche Hardware die Firmware gebaut werden soll muss das BSP gewählt werden:

  • ./buildscript selectbsp bsp/board wr1043nd.bsp
  • ./buildscript

Was ist ein BSP?

Ein BSP beschreibt, was zu tun ist, damit ein Firmware Image für eine spezielle Hardware gebaut werden kann.

Typischerweise ist eine folgene Ordner-Struktur vorhanden:

  • .config
  • root_file_system/
    • etc/
      • rc.local.board
      • config/
        • board
        • network
        • system
      • crontabs/
        • root

Die Daten des BSP werden nie alleine verwendet. Zu erst werden immer die Daten aus dem "default"-BSP zum Ziel kopiert, erst danach werden die Daten des eigentlichen BSPs dazu kopiert. Durch diesen Effekt kann ein BSP die "default" Daten überschreiben.

Der innere Aufbau des Buildscripts

  • Das BSP file wird als dot Script eingeladen.
  • Community file generiert dynamisches sed-Script, dies geschriebt, damit die Templates mit den richtigen Werten gefüllt werden.

./buildscript prepare

  • Sourcen werden in einen separaten src-Folder geladen, sofern diese noch schont da sind. Zu den Sourcen zählen folgende Komponenten:
    • OpenWRT
    • Sämtliche Packages (ggfs werden Patches angewandt)
  • Ein ggfs altes Target wird gelöscht
  • OpenWRT wird ins Target exportiert (kopiert)
  • Eine OpenWRT Feed-Config wird mit dem lokalen Source Verzeichnis als Quelle angelegt
  • Die Feeds werden geladen
  • Spezielle Auswahl an Paketen wird geladen
  • Patches werden angewandt
  • board_prepare() aus dem BSP wird aufgerufen (wird. z.B. fur Patches für eine bestimmte HW verwendet)

./buildscript build

  • prebuild
    • $target/files aufräumen
      • (In $target/files liegen Dateien, die später direkt im Ziel-Image landen)
    • Files aus default-bsp und bsp kopieren
    • OpenWRT- und Kernel-Config kopieren
    • board_prebuild() aus dem BSP wird aufgerufen
  • Templates transformieren
  • GIT Versionen speichern: $target/files/etc/firmware_release
  • OpenWRT: make
  • postbuild
    • board_postbuild() wird aufgerufen

./buildscript config

Um das Arbeiten mit den OpenWRT .config's zu vereinfachen bietet das Buildscript die Möglichkeit die OpenWRT menuconfig und die OpenWRT kernel_menuconfig aufzurufen. Im Anschluss hat man die Möglichkeit die frisch editierten Configs in das BSP zu übernehmen.

  • prebuild
  • OpenWRT: make menuconfig ; make kernel_menuconfig
  • Speichern, y/n?
  • Config-Format vereinfachen
  • Config ins BSP zurück speichern