3. Firmware selbst bauen (optional)
Für den Betrieb reicht das fertige Image in firmware/. Diese Seite ist für alle, die den Quelltext
ändern oder das Image nachbauen wollen.
Wo die Quellen veröffentlicht werden, steht noch nicht fest (siehe
README.mdbzw. Homepage). Die Angaben unten beziehen sich auf den Stand1c15155auf der Basisjamarju/opengd77.
Werkzeuge
- STM32CubeIDE (geprüft: 2.2.0 unter Linux). Download bei st.com, dafür ist ein myST-Konto nötig.
- Git.
Quelltext vorbereiten
- Quellen holen (Basis
jamarju/opengd77plus D-Star-Erweiterungen). - Im Ordner
opengd77/einmal./prepareausführen (unter Windowsprepare.bat). Das erzeugtMDUV380_firmware/application/source/linkerdata/codec_bin_section_1.binals Platzhalter aus0xFF. Der echte Codec wird nicht gebraucht und gehört nicht ins Repo.
binutils-Anpassung
Neuere Toolchains (binutils 2.44, wie in STM32CubeIDE 2.x) brechen beim Linken der Codec-Einsprünge ab,
weil .thumb_func benannte Symbole verlangt. Die Basis fix_vol (1c8fe34) ergänzt dafür benannte
.thumb_func-Symbole in application/source/dmr_codec/codec_bin.S und
application/include/dmr_codec/codec.h. Am Codec selbst ändert sich nichts. Der Stand 1c15155
enthält diese Änderung.
Build-Konfigurationen
| Konfiguration | Inhalt | Ausgabe |
|---|---|---|
DM1701_FW |
normale OpenGD77-Firmware für das DM-1701 (unverändert) | OpenDM1701.bin |
DM1701_HS_FW |
Hotspot mit D-Star (Define HOTSPOT_DSTAR) |
OpenDM1701_HS.bin |
In der IDE: Projekt MDUV380_firmware importieren, Konfiguration DM1701_HS_FW wählen, bauen.
Ohne Oberfläche (headless):
stm32cubeide -nosplash \
-application org.eclipse.cdt.managedbuilder.core.headlessbuild \
-data <workspace> -import <pfad>/opengd77/MDUV380_firmware \
-cleanBuild "MDUV380_firmware/DM1701_HS_FW"
Der Build dauert etwa 20 s. Danach beendet sich der IDE-Prozess nicht von selbst. Auf
Finished building target im Log warten und den Prozess dann beenden.
Hinweise
- Die Firmware übernimmt beim Bauen
git rev-parse --short HEADals Versionskennung. Deshalb erst committen und dann bauen, sonst zeigt „Firmware-Info“ einen falschen Stand. - Der RAM ist knapp (Haupt-RAM frei ≈ 5,4 KB, CCM-RAM ≈ 1,8 KB). Neue Puffer, die nicht per DMA
genutzt werden, gehören ins CCM-RAM (
__attribute__((section(".ccmram")))). DMA-Puffer müssen im Haupt-RAM liegen. - Das fertige Image enthält an Offset
0x6937Cden0xFF-Platzhalter für den Codec, genau wie die offiziellen Releases. Geflasht wird es wie in02_Firmware_flashen.mdbeschrieben.