Wo kann ich herausfinden, wie man eine Hex-Datei für die Arduino-Firmware erstellt?

7

Ich habe dieses Tutorial zum Flashen meines Arduino R3 befolgt , um daraus eine "USB-Tastatur" zu machen, aber der Artikel erklärt nicht, wie das Hex funktioniert, es ist nur eine Selbstverständlichkeit. Wo kann ich lernen, wie ich meine eigene Hex-Datei erstelle, damit mein Arduino jedes USB-Gerät nachahmt?

trusktr
quelle
Willkommen bei Arduino SE! Du bist hier wirklich vage. USB-Geräte sind ein sehr komplexes Thema, und höchstwahrscheinlich können Sie ohne ein wenig Geschick keine eigenen Dateien für USB erstellen . Sie können HEX-Dateien für den USB-Chip finden, um andere vorkompilierte Geräte nachzuahmen.
Anonymer Pinguin
@AnnonomusPenguin Hallo! Ich glaube, es gibt noch kein Hex, um ein DataLocker- oder IronKey-Gerät zu imitieren, also würde ich es gerne versuchen. xD Irgendwelche Ratschläge, wo ich anfangen soll?
Trusktr
Ich habe keine wirkliche Ahnung: D Ich würde sagen, schauen Sie sich vielleicht einige Open-Source-Hex-Dateien an, die USB-Massenspeicher enthalten (ich habe einige Open-Source-Projekte mit mindestens dreißig Arten von USB-Geräten für Arduino gesehen) und Ändern Sie es so, dass keine Dateien angezeigt werden, bis sich im Stammverzeichnis des Geräts eine Textdatei mit dem Kennwort befindet. Das IRC wäre ein guter Weg, um Hilfe zu erhalten. Damit Sie die Leute nicht wütend machen, versuchen Sie zu lernen, wie es geht, und nicht nur zu kopieren und einzufügen. Wenn Sie dies tun, stellen Sie außerdem sicher, dass Sie Ihren Code für andere freigeben.
Anonymer Pinguin
Das Tutorial, dem Sie folgen, enthält Links zu einem komprimierten Teerarchiv des Quellcodes und des Makefiles, die zum Erstellen der von Ihnen geladenen Hex-Datei für die Tastatur von Darran verwendet wurden: Hunt.net.nz/users/darran/weblog/b3029/attachments/bd341/…
Chris Stratton

Antworten:

2

Die HEX-Datei ist einfach eine übersetzte Version der ausführbaren AVR-Datei, die wiederum eine übersetzte Version des AVR-Quellcodes ist.

Es gibt viele Tools, mit denen Sie AVR-Quellcode in eine ausführbare AVR-Datei umwandeln (kompilieren) können, einschließlich, aber nicht beschränkt auf Arduino IDE , Ino , AVR-GCC und Atmel Studio . Beachten Sie, dass alle vier Tools den Code auf dieselbe Weise kompilieren, da AVR-GCC von den anderen drei unter der Haube verwendet wird.

avr-g++ -mmcu=atmega328 source.cc -o executable

Sobald Sie den Code kompiliert haben, können Sie mit avr-objcopy die entsprechenden Abschnitte aus der ausführbaren Datei in HEX-Dateien extrahieren, um sie in Flash und EEPROM zu programmieren.

avr-objcopy -j .text -j .data -O ihex executable executable.hex

Anschließend können Sie mit AVRDUDE die verschiedenen HEX-Dateien auf das Zielgerät hochladen.

avrdude -c arduino -P /dev/ttyUSB0 -b 19200 -p m328 -U flash:w:executable.hex:i

Beachten Sie, dass die USB-Bibliotheken in Arduino / Ino und AVR LibC begrenzt sind. Sie müssen Atmel Studio verwenden, wenn Sie alle USB-Funktionen nutzen möchten.

Ignacio Vazquez-Abrams
quelle
2

Es gibt viele Websites, die dokumentieren, wie solche erstellt / erstellt werden.

Example: http://hunt.net.nz/users/darran/ 
or https://github.com/harlequin-tech/arduino-usb
GOOGLE: build usb keyboard 16u2

Bitte beachten Sie, dass die DFU beim Versuch auf dem Uno R3 den Code auf dem 16U2 und nicht auf dem 328p aktualisiert.

Ich würde Anfängern empfehlen, den Leonardo zu verwenden. Wo es in der IDE Beispiele für die Verwendung der Anwendung direkt als USB-HID gibt. Vermeiden Sie Änderungen am Bootloader oder am USB-zu-Seriell-Co-Prozessor-Chip (16u2). Es viel einfacher machen.

mpflaga
quelle
1

Es ist möglich, aber es ist ziemlich schwierig (besonders wenn Sie sowohl den 8u2 als auch den 16u2 modifizieren möchten. Ich würde den Teensy empfehlen ( https://www.pjrc.com/teensy/index.html ), den ich kürzlich veröffentlicht habe Frage zu einer ähnlichen Frage wie Sie und nachdem ich von all den Gefahren gehört hatte, entschied ich mich für den Teensy. Ich habe standardmäßig eine viel umfangreichere USB / HID-Unterstützung (Sie können sofort mit Ihrem Projekt beginnen, anstatt zu versuchen, die UNO zu modifizieren). Teensys sind auch relativ billig und kosten zwischen 18 und 24 US-Dollar.

Zum Vergleich: UNOs kosten 27,18 USD und sind nicht vorrätig. Um fair zu sein, werden beide wahrscheinlich billiger verwendet. Dies ist wahrscheinlich umstritten, da Sie anscheinend bereits eine haben. Weitere Informationen finden Sie in meiner Frage ( Machbarkeit des Flashens von Arduino UNO r3 mit teensy Firmware für HID-Emulationszwecke (Tastatur) ).

fozbstuios
quelle
1

Sie müssen nichts Magisches tun. Hier erfahren Sie, wie Sie die Partner der Arduino IDE verwenden können.

Sobald Sie eine Skizze kompiliert oder hochgeladen haben, wird die .hex- Datei automatisch erstellt und auf dem Laufwerk Ihres Computers gespeichert, auf dem das Betriebssystem installiert ist (ich habe dies unter Windows gefunden). Sie können darauf zugreifen, indem Sie zu dem Verzeichnis navigieren, das temporäre Dateien enthält.

Normalerweise lautet der Pfad wie folgt: C:> Benutzer> Admin> AppData> Lokal> Temp

Jetzt sehen Sie (viele) Verzeichnisse mit Namen, die wie "build" lauten ... gefolgt von einer großen Zahl. Eines dieser Verzeichnisse enthält vom Compiler generierte Dateien des gesuchten Codes. Von diesem Speicherort aus können Sie (z. B. mit Windows Explorer) die gesuchte Hex- Datei anhand des Datums und der Uhrzeit der letzten Änderung suchen und identifizieren .

Sobald Sie Ihre .hex- Datei erhalten haben, können Sie sie mit Atmel FLIP auf Ihr Arduino hochladen, nachdem Sie den Mikrocontroller Ihres Arduino in den DFU-Modus (Device Firmware Upgrade) versetzt haben. Atmel FLIP, eine Abkürzung für FLexible In-System Programmer, kann dank seiner minimalen Benutzeroberfläche sehr einfach verwendet werden.

So verwenden Sie FLIP:

  1. Gehen Sie zu Datei> HEX-Datei laden ... und wählen Sie die Datei aus.
  2. Wählen Sie Ihren Mikrocontroller aus, indem Sie das erste Symbol in der Leiste auswählen.
  3. Wählen Sie Ihre Programmierschnittstelle aus der kleinen Liste.

Ich habe dies mit ATXmega verwendet, das USB unterstützt, aber es ist nicht für alle gleich.

Leuchtturm
quelle
Basierend auf Ihrer Antwort generieren Sie die Hex-Dateien nur mithilfe der Arduino IDE, oder? Können Sie mit Arduino IDE beispielsweise HID-Code (USB Human Interface Device) schreiben?
Trusktr
Das ist richtig, nichts anderes als die IDE ist erforderlich. Angenommen, Ihr HID ist mit der Arduino IDE kompatibel, können Sie dies. Wenn ein Add-On erforderlich ist (wie zum Beispiel ein Crumbuino oder ein Teensy), wird es immer noch dasselbe tun. Das liegt daran, dass die .hex-Datei auf die gleiche Weise hochgeladen wird. Das Add-On definiert nur benutzerdefinierte Funktionen. Sie müssen nur die .hex-Datei unter den temporären Dateien finden. Wenn das HID nicht kompatibel ist, können Sie versuchen, den Code in Atmel Studio (nur für AVR und ARM) mit einem geeigneten Compiler zu schreiben, der die .hex-Datei erstellen kann.
LIGHThouse