SD2IEC fejlesztői környezet Windows alá

Régóta foglalkoztatott, hogy saját firmware verziót fordítanék az SD2IEC-hez, többször neki is futottam, de sikertelenül. Aztán jött egy kicsit erősebb motiváció: IEC-ATA elkészítette az SD1551 meghajtóját, ami egy SD2IEC (hardver) alapokra épülő, de Commodore 264-es sorozat (C16, C116, plus/4 és a ritkaságok/prototípusok: C232, C264, V364) bővítőportjára csatlakozik, a 1551-es TCBM protokollját használja, SD kártyás háttértárral, de teljesen egyedi firmware-rel.

Ehhez jött az ötlet, hogy ha az SD2IEC kód már most is támogat különböző hardver változatokat és busz-illesztéseket (Commodore soros, DolphinDOS párhuzamos, IEEE-488), akkor ehhez hozzá lehetne tenni a TCBM busz dolgait is, az összes többi (pl. SD-kártya kezelése, fájlrendszer, lemezkép és fájlkezelés, firmware frissítés) meg mehet az alap SD2IEC szoftverből. Persze bele is ugrottam, aztán amint sikerült a saját SD2IEC-emhez firmware-t frissíteni el is szállt a lelkesedés, más projektek kerültek fókuszba. (Fel nem adtam, csak hátrébb soroltam a többi ezer dolog mellé :) )

Szóval: ez a post eredetileg azért készült, hogy leírjam, hogy mit kellett ahhoz tenni, hogy a fordítás menjen.

Szükséges szoftverek

Sajnos az általánosan ajánlott WinAVR csomaggal nem működik a dolog (legalábbis nekem nem sikerült összehozni), mert nagyon erősen a gcc toolchain-re épül a forráskód, make-kel, avr-gcc-vel, perl-lel. Próbából telepítettem egy Ubuntu Linux-ot, ott természetesen az avr csomagok telepítése után minden ment csont nélkül.

Amit ezekhez le kellett tölteni és telepíteni:

  • Git: az SD2IEC firmware egy Git repository-ban van, ez kell ahhoz, hogy le tudjuk húzni magunkhoz.
  • MinGW/MSys: Windows alá ad egy *nix shell konzolt és az ott megszokott fejlesztői eszközöket.
  • AVR GNU toolchain: az AVR specifikus keresztfordító eszközök, C, C++, assembler és egyéb fordítók, linker, stb.
  • Strawberry PERL: sajnos kell egy külön PERL is, mert az MSys-ben egy 5.8-as verzió van (legalábbis amikor én telepítettem az volt), az SD2IEC fordításhoz viszont legalább 5.10-es kell. Interneten keresgélve a Strawberry PERL-t ajánlották, mint jól használható verziót, úgyhogy én is emellett döntöttem.
  • AVRDude: nem annyira a fordításhoz kapcsolódik, ez már a lefordított firmware flash-eléséhez kell. (De az SD2IEC-nek van olyan make target-je, ami egyből ezt is megcsinálja)

Én mindenből a legfrissebbet szedtem le, valószínűleg újabbakkal és régebbiekkel is mennie kell.

Telepítés

Elöljáróban: ha valamelyik telepítő a PATH-hoz akar adni valamit, akkor hagyjuk neki, különben nem fog működni!

git

A https://git-scm.com/downloads oldalról tölthetjük le. Telepíteni kell, semmi extra.

Strawberry PERL

A http://strawberryperl.com/ oldalról tölthetjük le. Itt is csak telepíteni kell, semmi extra.

MinGW/MSys

A https://sourceforge.net/projects/mingw/files/MSYS/ oldalról a fent ajánlott mingw-get-setup -ot kell leszedni. Ez egy installer, indítás után ki kell választani, hogy mit akarunk telepíteni. Azt letölti és telepíti. NAGYON lassú.
Többféle telepítési lehetőséget is ajánl (előre összeválogatott csomagok – Basic Setup) vagy magunknak is összeválogathatjuk, hogy mi kell (All Packages, itt tényleg egyesével válogathatunk). Én nem szórakoztam nagyon, a Basic Setup alól telepítettem hármat:

  • mingw-developer-toolkit
  • mingw32-base
  • és msys-base

AVR GNU toolchain

A http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORWINDOWS.aspx oldalról kell az Atmel AVR 8-bit Toolchain-t letölteni és telepíteni.

Beállítás

Aminek a PATH-ban kell lennie már Windows parancssorban is, hogy működjön:

  • perl: ellenőrizni a perl -v paranccsal lehet
  • avr-gcc: ellenőrizni az avr-gcc -v paranccsal lehet

Ha ezek megvannak, akkor indítsuk el az MSys-t (pl. c:\mingw\msys\1.0\msys.bat).

FONTOS: MSys alatt a root könyvtár (/) az MSys könyvtár lesz, a Windows-os meghajtókat /<meghajtóbetűjel kettőspont nélkül> útvonalon érjük el. Pl. a C:\Work útvonala /c/Work lesz.

Állítsuk be, hogy a beépített perl helyett a Strawberry-t használja (telepíteni kell a beépítettet is, mert egy csomó olyan eszközt csak így tesz fel):

  • Menjünk be a /bin könyvtárba (cd /bin)
  • Nevezzük át a régit (mv perl.exe perl.exe.msys)
  • Linkeljük be a Strawberry-t: (ln -s <Strawberry perl bináris útvonala> perl.exe, pl. ln -s /c/Development/Strawberry/perl/bin/perl.exe perl.exe)
  • Ellenőrizzük perl -v -vel, hogy ugyanazt kapjuk-e, mint Windows parancssorból.

Ezzel ha minden igaz kész a környezet.

Fordítás

MSys shell-en belül készítsünk egy git munkakönyvtárat, pl:

  • cd /c/Work
  • mkdir git
  • cd git

Szedjük le az SD2IEC aktuális verziót:

Próbáljunk szerencsét:

  • cd sd2iec
  • make CONFIG=configs/config-larsp

(vagy bármelyik másik konfigurációt is használhatjuk, kivéve az example, az nem fog fordulni. Az én eszközöm ennek felel meg, ezért ezt használtam).

Később valamelyik konfigurációt lemásolhatjuk az sd2iec fő könyvtárába config néven, akkor elég a

  • make

parancs a fordításhoz.

Ha kisebb AVR-t használunk (az én eszközömben 644p van), akkor szükség lehet arra, hogy különböző részeket a config-ban kikapcsolgassunk, mert már elég nagy a firmware, nem minden fér el benne.

Sőt, saját hardver-nél még saját hardver variánst is készíteni kell.

Frissítés 2017.03.12:

(leginkább emlékeztető magamnak)

A scripts/avr könyvtárban a variables.mk fájlban lehet testreszabni az AVR programozónk beállításait:

  • AVRDUDE: én nem adtam hozzá a PATH-hoz az avrdude könyvtárát, ide írtam be az elérési útját
  • AVRDUDE_PROGRAMMER: milyen típusú programozót használunk (nekem usbasp az eredetileg beállított stk200 helyett)
  • AVRDUDE_WRITE_EEPROM: szedjük ki előle a komment jelzőt, ha az EEPROM-ot is szeretnék programozni.

Ezután

  • make program

paranccsal már írhatjuk is az AVR flash memóriáját (opcionálisan az EEPROM-ot is, ha bekapcsoltuk)

Ami nálam kimaradt még:

  • make fuses

paranccsal az MCU alapbeállításait is tegyük meg.