AVR Ethersex Bootloader
Einführung Bootloader
Mittels Bootloader ist es möglich, die ethersex Firmware via Netzwerk in das AVR Net-IO zu übertragen. Es ist lediglich einmalig ein ISP-Programmer erforderlich, um den Bootloader in den AVR Controller zu übertragen. Anschließend kann sich der Bootloader das Firmware-Image beim Einschalten, oder auf Kommando von einem sog. TFTP-Server holen. Dies hat den großen Vorteil, dass das Gehäuse zum Firmware Update nicht geöffnet werden muss, um den ISP-Programmer anzustecken. Voraussetzung:
- TFTP-Server auf einem PC bzw. Server im Netzwerk ist installiert
- TFTP-Client auf dem PC, mit dem ethersex compiliert wird
Bootloader konfigurieren
Der Bootloader wird analog zum "normalen" ethersex konfiguriert. Um die ethersex-Konfiguration zu behalten, empfiehlt es sich ein Backup der Konfigurationsdatei anzulegen:
cd ~/Dokumente/ethersex cp .config config_steckdose
Ändern der Konfiguration für den Bootloader (nur die folgenden zusätzlichen Optionen selektieren, damit der bootloader nicht zu groß wird - es stehen lediglich 8KB Flashspeicher für den Bootloader zur Verfügung):
make menuconfig |-Load a Default Configuration | |-Ethernet Bootloader selektieren |-Network | |-Hostname: beliebig - z.B. Steckdose | |-BOOTP (DHCP like) support DESELEKTIEREN, damit die IP-Adresse und der TFTP-Server eingestellt werden können | |-Ethernet (ENC28J60) support | | |-MAC address: Die selbe wie auf dem AVR NET-IO abgedruckt ist | | |-Etherrape IP address: Gewünschte IP-Adresse: IP_NETIO' | | |-Netmask: 255.255.255.0 |-Applications | |-TFTP Support | |-Bootloader configuration | | |-TFTP-o-matic | | | |-TFTP IP-adress: IP-Adresse des TFTP-Servers: IP_TFTP | | | |-TFTP Image to load: steckdose.bin
Nach dem Aktivieren aller Optionen, das Konfigprogramm mit Exit verlassen und die Änderungen abspeichern.
Bootloader compilieren
make fullclean make all
Bootloader auf Net-IO übertragen
Nach dem erfolgreichen compilieren liegt im ethersex-Verzeichnis das HEX-File des Bootloaders ethersex.hex dieses wie unter Programmer beschrieben auf den AVR-Controller des AVR Net-IO übertragen.
avrdude -c <PROGRAMMER> -P <PORT> -p atmega644 -U ethersex.hex
Hinweis: | |
Die beiden Parameter <PROGRAMMER> und <PORT> wie unter Programmer beschrieben einsetzen. |
bzw. mit
make download
Lockbits anpassen
Damit der Bootloader nicht versehentlich durch ein zu großes Image überschrieben wird, sollten die Lockbits folgendermaßen auf Bootloader Protection Mode 3 gesetzt werden.
avrdude -c <PROGRAMMER> -P <PORT> -p atmega644 -U lock:w:0x0F:m
Hinweis: | |
Die beiden Parameter <PROGRAMMER> und <PORT> wie unter Programmer beschrieben einsetzen. |
Fuses anpassen
Damit der Bootloader nach dem Power On bzw. Reset auch angesprungen wird, muss noch zusätzlich die BOTRST Fuese gesetzt werden. Weitere Details zu den AVR Fuses → siehe auch hier. Folgende Fuses werden benötigt: BODLEVEL=4,3V, OCDEN=1, JTAGEN=1, SPIEN=0, WDTON=1, EESAVE=0, BOOTSZ=4096 Words, BOOTRST=0, CKDIV8=1, CKOUT=1, Ext. Crystal Oscillator (16k CK + 65ms)
avrdude -c <PROGRAMMER> -P <PORT> -p ATMega644 -U efuse:w:0xFC:m -U lfuse:w:0xFF:m -U hfuse:w:0xD0:m
Kofiguration wieder herstellen
- Bootloader Konfiguartion sichern, falls diese später erneut gebraucht wird:
cp .config config_bootloader
- Operationelle Ethersex Konfiguration wieder herstellen:
cp config_steckdose .config
Firmware via Bootloader flashen
Nach dem Übertragen des Bootloaders wurde die operationelle ethersex Firmware wieder gelöscht. Diese kann nun via Bootloader erneut übertragen werden
- Neu compilieren:
make fullclean make
- Beobachten des Logfiles auf dem TFTP-Server (Achtung: diese Zeile auf dem TFTP-Server ausführen, nicht am lokalen Linux-PC):
tail -f /var/log/atftpd.log
- Bereitstellen der operationellen Firmware (steckdose.bin) auf dem TFTP-Server
atftp --put -l ethersex.bin -r steckdose.bin IP_TFTP
- Im TFTP-Logfile sollte folgender Eintrag erscheinen:
Fetching from IP_CLIENT to steckdose.bin
- Flashen via Bootloader:
- Stromversorgung zum AVR Net-IO kurz unterbrechen und wiederherstellen.
- Im TFTP-Log sollte nach einigen Sekunden folgender Eintrag erscheinen:
Serving steckdose.bin to IP_NETIO
- Funktionstest, wie → hier beschrieben, durchführen.
Analog zum make download (siehe auch hier) kann auch das Übertragen via Bootloader vereinfacht werden:
gedit ~/Dokumente/ethersex/config.mk
Folgende Zeilen einfügen:
bootload: ethersex.hex
atftp --put -l ethersex.bin -r steckdose.bin IP_TFTP echo "bootloader"|nc IP_NETIO -q 1 2701
Achtung: | |
Vor atftp und echo MUSS unbedingt ein TAB-Zeichen eingegeben werden. Ansonsten kommt es zu Fehlermeldungen |
Übertragen via Bootloader:
make bootload