Heim System-Tutorial LINUX Kann Linux auf einer 8-Bit-MCU ausgeführt werden?

Kann Linux auf einer 8-Bit-MCU ausgeführt werden?

Feb 05, 2024 pm 06:18 PM
linux linux教程 linux系统 linux命令 shell脚本 模拟器 eingebettetes Linux gute Lizenz Erste Schritte mit Linux Linux-Lernen

In Mikrocontroller-Foren fragen Anfänger oft, ob auf ihren kümmerlichen 8-Bit-Mikrocontrollern Linux laufen kann. Diese Fragen lösen oft schallendes Gelächter aus. In Linux-Foren fragen wir oft nach den Mindestanforderungen für die Ausführung von Linux. Die gängige Antwort lautet, dass Linux eine 32-Bit-Architektur und eine MMU (Memory Management Unit) sowie mindestens 1 MB RAM benötigt, um den Kernel zu erfüllen.

Dieses Projekt zielt jedoch darauf ab, diese Wahrnehmungen zu zerstören (und es ist ihm auch gelungen). Das im Bild unten gezeigte Entwicklungsboard basiert auf ATmega1284P. Ich (ein Ausländer) habe auch ein Entwicklungsboard auf Basis von ATmega644a erstellt, was ebenfalls erfolgreich war. Dieses Entwicklungsboard verwendet keine anderen Prozessoren und kann den Linux 2.6.34-Kernel booten. Tatsächlich kann es sogar einen vollständigen Ubuntu-Stack ausführen, einschließlich X (wenn Sie bereit sind, auf den Start zu warten) und der Gnome-Desktop-Umgebung.

Linux是否能在 8 位 MCU 上运行?

▍RAM (Random Access Memory)

Ja, das stimmt, eine vollständige Linux-Installation erfordert mehrere Megabyte RAM und eine 32-Bit-CPU mit einer MMU. Dieses Projekt hat es in sich. Lassen Sie uns zunächst auf den RAM zugreifen. Wie Sie sehen können, befindet sich in der Schaltung ein antikes 30-poliges SIMM-Speichermodul. Dies ist, was einst 80286-basierte PCs verwendeten. Es ist mit dem ATmega verbunden und ich schreibe Code, um darauf zuzugreifen und es gemäß den Spezifikationen zu aktualisieren (SDRAM benötigt eine konstante Aktualisierungsrate, um Datenverluste zu vermeiden).

Wie schnell ist es? Der Aktualisierungsinterrupt erfolgt alle 62 ms und nimmt 1,5 ms in Anspruch, sodass er weniger als 3 % der CPU beansprucht. Greifen Sie zur Vereinfachung der Programmierung byteweise auf den RAM zu. Die dadurch erzeugte maximale Bandbreite beträgt etwa 300 KBit/s.

Linux是否能在 8 位 MCU 上运行?

***▍*Speicher

Damit RAM im Ruhezustand funktioniert, müssen wir uns um zwei Dinge kümmern. Lagerung ist kein Problem, das allzu schwer zu lösen ist. Es ist sehr einfach, über SPI mit der SD-Karte zu interagieren, und ich habe dies in meinem Projekt getan. Eine 1-GB-SD-Karte funktioniert einwandfrei, für dieses spezielle Dateisystem (Ubuntu Jaunty) sind jedoch 512 MB ausreichend.

ATmega hat ein Hardware-SPI-Modul, aber aus irgendeinem Grund funktionierte es nicht ganz reibungslos, also habe ich die Schnittstelle etwas entfernt. Es ist immer noch groß genug – etwa 200 KBit/s. Es macht auch für das Projekt absolut Sinn – es kann auf jedem Mikrocontroller mit genügend Pins implementiert werden, ohne dass zusätzliche Hardwaremodule verwendet werden müssen.

***▍*CPU (Zentraleinheit)

Alles, was übrig bleibt, sind die 32-Bit-CPU- und MMU-Anforderungen. Allerdings verfügt der AVR nicht über eine MMU und ist 8-Bit. Um diese Schwierigkeit zu überwinden, habe ich einen ARM-Emulator geschrieben. ARM ist die Architektur, mit der ich am besten vertraut bin, und sie ist so einfach, dass ich problemlos einen Emulator dafür schreiben kann. Warum eins schreiben statt eines zu portieren?

Nun, es macht keinen Spaß, den Code von jemand anderem zu portieren, außerdem sehe ich keine dokumentierte Dokumentation zur einfachen Portierung von Emulatoren auf 8-Bit-Geräte. Ein Grund: Das Beharren des AVR-Compilers auf 16 Bits für die Verarbeitung von Ganzzahlen führt zu Problemen mit einfachen „(1 Linux是否能在 8 位 MCU 上运行?

***▍*Andere Funktionen

Das Board kommuniziert über eine serielle Schnittstelle mit der realen Welt. Derzeit ist es über eine serielle Schnittstelle mit einem Minicom verbunden, das auf meinem PC läuft, aber eine alternative Verbindung, die es testen könnte, wäre eine Tastatur und ein Zeichen-LCD, die an den Schaltkreis angeschlossen sind und es völlig eigenständig machen würden. Auf der Platine befinden sich zwei weitere LEDs. Sie zeigen den Zugriff auf die SD-Karte an. Einer repräsentiert den Lesevorgang und der andere repräsentiert den Schreibvorgang. Auf der Platine befindet sich auch ein Knopf. Wenn Sie diese Taste 1 Sekunde lang gedrückt halten, wird die serielle Schnittstelle aus der aktuell effektiven Geschwindigkeit der emulierten CPU herausgenommen. Die Hauptfrequenz des AVR beträgt 24 MHz (eine leichte Übertaktung über die ursprünglichen 20 MHz).

***▍*Wie schnell ist es?

uARM hat definitiv keinen Rate-Daemon. Das Starten der BASH-Eingabeaufforderung („init=/bin/bash“-Kernel-Befehlszeile) dauerte etwa zwei Stunden. Dann hat es mehr als 4 Stunden gedauert, das gesamte Ubuntu zu starten („exec init“ und dann einloggen). Das Starten von X dauert länger. Die effektive emulierte CPU-Geschwindigkeit beträgt etwa 6,5 ​​kHz, was ungefähr dem entspricht, was man bei der Emulation einer 32-Bit-CPU und MMU auf einem dürftigen 8-Bit-Mikrocontroller erwarten würde. Seltsamerweise ist das System nach dem Hochfahren einigermaßen benutzbar. Sie können einen Befehl eingeben und innerhalb einer Minute eine Antwort erhalten. Das bedeutet, dass Sie es tatsächlich verwenden können. Ich habe damit heute zum Beispiel meine SD-Karte formatiert. Er ist definitiv nicht der Schnellste, aber meiner Meinung nach ist er wahrscheinlich der günstigste, langsamste, am einfachsten von Hand zusammenzubauende PC, hat die geringste Teileanzahl und ist der Linux-PC mit der niedrigsten Preisklasse. Die Leiterplatte wird mithilfe von Drähten von Hand verlötet, ohne dass eine Leiterplatte (PCB) erforderlich ist.

***▍*Details zum Emulator?

Der Emulator ist recht modular aufgebaut, sodass er nach Belieben erweitert werden kann, um andere SoC- (System on Chip) und Hardwarekonfigurationen zu emulieren. Die simulierte CPU ist ARMv5TE. Vor einiger Zeit habe ich begonnen, an der Unterstützung von ARMv6 zu arbeiten, diese ist jedoch noch nicht abgeschlossen (wie aus dem Code hervorgeht), da sie nicht unbedingt benötigt wird. Der simulierte SoC ist PXA255.

Aufgrund des modularen Aufbaus können Sie die SoC.c-Datei ersetzen und einen komplett neuen SoC mit demselben ARMv5TE-Kern kompilieren oder den Kern oder die Peripheriegeräte nach Ihren Wünschen austauschen. Das ist Absicht, ich meine, dieser Code ist auch ein ziemlich gutes Beispiel dafür, wie ein ARM-SoC funktioniert. Der Code des CPU-Emulators selbst ist nicht besonders ordentlich, es handelt sich also um einen CPU-Emulator. Das wurde vor ein paar Jahren in über 6 Monaten Freizeit geschrieben und dann beiseite gelegt. Es wurde kürzlich speziell für dieses Projekt wiederbelebt. Der Emulator implementiert i-cache, um die Geschwindigkeit zu verbessern. Dies gibt dem AVR große Hilfe, da er im Gegensatz zu meinem externen RAM mit über 5 MB pro Sekunde auf den internen Speicher zugreifen kann. Ich bin noch nicht dazu gekommen, D-Cache (Daten-Caching) zu implementieren, aber es steht auf meiner To-Do-Liste. Der Zugriff auf Blockgeräte wird nicht als SD-Geräte emuliert. Dies erwies sich als zu langsam. Stattdessen gibt es ein paravirtualisiertes Festplattengerät (pvdisk, siehe pvDisk.tar.bz2, GPL-lizenziert), das ich mit einem ungültigen Opcode geschrieben habe, um den Emulator zu laden und auf die Festplatte zuzugreifen. Die Ramdisk (virtuelle Festplatte) in meinem Image lädt diese PVDisk und ändert dann das Stammverzeichnis in /dev/pvd1.

ramdisk ist in „rd.img“ enthalten. Der „Maschinentyp“, den ich verwende, ist PalmTE2. Warum? Da ich mit dieser Hardware sehr vertraut bin, ist es der erste Typ einer PXA255-Maschine, den ich gesehen habe.

***▍*Hypercall?

Es gibt einige Dienste, bei denen Sie mithilfe eines speziellen Opcodes Anfragen an den Emulator stellen können. In ARM ist es 0xF7BBBBBB, in Thumb ist es 0xBBBB. Diese wurden ausgewählt, weil sie in einem Bereich liegen, in dem ARM-Garantien nicht definiert sind. Die Hypercall-Nummer wird im Register R12 übergeben, die Parameter werden in den Registern R0-R3 übergeben und der Rückgabewert wird in R0 platziert.

Anruf:

· 0 = Simulation stoppen

· 1 = Dezimalzahl drucken

· 2 = Druckzeichen

· 3 = RAM-Größe ermitteln

· 4 = Geräteoperation blockieren (R0 = Operation, R1 = Sektornummer). Beachten Sie, dass diese nicht in den emulierten RAM schreiben, sondern einen anderen Hyperaufruf verwenden, um den internen Puffer des Emulators, auf den der emulierte Benutzer zugreift, Wort für Wort zu füllen. Ich wollte DMA implementieren, bin aber noch nicht dazu gekommen.

Bedienung:

· 0 = Informationen abrufen (wenn die Sektornummer 0 ist, wird die Anzahl der Sektoren zurückgegeben; wenn die Sektornummer 1 ist, wird die Sektorgröße in Bytes zurückgegeben)
· 1 = Sektor gelesen
· 2 = Sektor schreiben

· 5 = Gerätepufferzugriff blockieren (R0 = Werteingang/Wertausgang, R1 = Anzahl der Wörter, R2 = 1, wenn geschrieben, 0 sonst)

***▍*Daumenstütze?

Volle Unterstützung für Thumb. Ich habe ein wenig geschummelt und jede Thumb-Anweisungszeichenfolge (instr) in die entsprechende ARM-Anweisungszeichenfolge dekodiert und ausgeführt, anstatt die ARM-Emulatorfunktionen zu verwenden. Es ist nicht so schnell wie das Original, aber es ist einfach und der Code ist klein. Es ist möglich, eine 256-KB-Nachschlagetabelle zu verwenden, aber ich bin der Meinung, dass 256 KB zu groß für den Flash-Speicher des Mikrocontrollers sind. Einige Thumb-Anweisungen können nicht in ARM-Anweisungen konvertiert werden, sondern werden stattdessen korrekt verarbeitet.

Ich möchte eins bauen!

Für nichtkommerzielle Zwecke können Sie dies durchaus tun. Die Verkabelungsmethode ist wie folgt:

· RAMs DQ0-DQ7 sind mit AVRs C0-C7 verbunden

· RAMs A0-A7 verbinden AVRs A0-A7

· RAMs A8-A11 verbinden AVRs B0-B3

· RAM nRAM nRAS nCAS nWE verbinden AVR D7 B4 B5

· SDs DI SCK DO verbindet AVRs B6 B7 D6

· Der Lese-/Schreibzugriff der LED ist mit D2 D3 des AVR verbunden (andere Pins der LED sind mit Masse verbunden);

· Der Taster ist mit D4 des AVR verbunden (andere Pins sind mit Masse verbunden).

Linux是否能在 8 位 MCU 上运行?RAM kann ein beliebiges 30-Pin-16-MB-SIMM sein, das mit einer CAS-vor-RAS-Aktualisierungsrate von 4000 Zyklen alle 64 Millisekunden ausgeführt werden kann. Das von mir verwendete (OWC) kann für ein paar Dollar online gekauft werden. Der Schaltplan ist hier abgebildet, zum Vergrößern anklicken.

**

*▍*Quellcode?

Dieser Code ist etwas chaotisch, funktioniert aber (der Code kann in China nicht heruntergeladen werden). Um den Emulator auf Ihrem PC einzurichten und auszuprobieren, geben Sie „make“ ein. Zum Ausführen verwenden Sie „./uARM DISK_IMAGE“. Um die optimierte PC-Version zu erstellen, verwenden Sie „make BUILD=opt“. Um eine lauffähige Version von AVR zu erstellen, verwenden Sie „make BUILD=avr“. Jetzt ist es für das Ziel ATmega1284P kompiliert. Um mit ATmega644 als Ziel zu kompilieren, müssen Sie zusätzlich zum Ändern des Makefiles die Anzahl in icache.h reduzieren, sodass der i-Cache klein genug ist, um mit dem RAM im 644 übereinzustimmen. Im Archiv sind auch die finalen Hex-Dateien für 1284p enthalten.

▍Startvorgang

Um Codeplatz in AVR zu sparen, ist im Emulator fast kein Startcode vorhanden. Tatsächlich umfasst das „ROM“ insgesamt 50 Bytes: 8 Bytes werden verwendet, um den Thumb-Modus auszuwählen, und ein gewisser Thumb-Code liest den ersten Sektor der SD-Karte und springt in den Thumb-Modus (siehe embeddedBoot.c). Der MBR der SD-Karte verfügt über einen weiteren Bootloader (im Thumb-Modus geschrieben). Dieser Bootloader durchsucht den MBR, findet die aktive Partition und lädt deren Inhalt bis zum Ende des RAM. Dann springt es zur Ziel-RAM-Adresse +512 (siehe mbrBoot.c). Hier läuft der dritte und größte Bootloader, ELLE (siehe ELLE.c). Dieser Bootloader verschiebt die Ramdisk, richtet ATAGS ein und ruft den Kernel auf. Ich stelle alle Binärdateien und den Quellcode zur Verfügung, sodass Sie auf Wunsch Ihr eigenes Image erstellen können. Der Bootvorgang ähnelt dem Booten eines PCs. :) Mit dem mitgelieferten Tool mkbooting.sh kann ein funktionierendes Image für die Boot-Partition erstellt werden.

Das obige ist der detaillierte Inhalt vonKann Linux auf einer 8-Bit-MCU ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Android TV Box erhält inoffizielles Ubuntu 24.04-Upgrade Android TV Box erhält inoffizielles Ubuntu 24.04-Upgrade Sep 05, 2024 am 06:33 AM

Für viele Benutzer klingt das Hacken einer Android-TV-Box entmutigend. Allerdings stand Entwickler Murray R. Van Luyn während der Broadcom-Chipknappheit vor der Herausforderung, nach geeigneten Alternativen zum Raspberry Pi zu suchen. Seine Zusammenarbeit mit der Armbia

Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Deepseek Web Version Eingang Deepseek Offizielle Website Eingang Feb 19, 2025 pm 04:54 PM

Deepseek ist ein leistungsstarkes Intelligent -Such- und Analyse -Tool, das zwei Zugriffsmethoden bietet: Webversion und offizielle Website. Die Webversion ist bequem und effizient und kann ohne Installation verwendet werden. Unabhängig davon, ob Einzelpersonen oder Unternehmensnutzer, können sie massive Daten über Deepseek problemlos erhalten und analysieren, um die Arbeitseffizienz zu verbessern, die Entscheidungsfindung zu unterstützen und Innovationen zu fördern.

So installieren Sie Deepseek So installieren Sie Deepseek Feb 19, 2025 pm 05:48 PM

Es gibt viele Möglichkeiten, Deepseek zu installieren, einschließlich: kompilieren Sie von Quelle (für erfahrene Entwickler) mit vorberechtigten Paketen (für Windows -Benutzer) mit Docker -Containern (für bequem am besten, um die Kompatibilität nicht zu sorgen), unabhängig von der Methode, die Sie auswählen, bitte lesen Die offiziellen Dokumente vorbereiten sie sorgfältig und bereiten sie voll und ganz vor, um unnötige Schwierigkeiten zu vermeiden.

BitPie Bitpie-Wallet-App-Download-Adresse BitPie Bitpie-Wallet-App-Download-Adresse Sep 10, 2024 pm 12:10 PM

Wie lade ich die BitPie Bitpie Wallet-App herunter? Die Schritte sind wie folgt: Suchen Sie im AppStore (Apple-Geräte) oder Google Play Store (Android-Geräte) nach „BitPie Bitpie Wallet“. Klicken Sie auf die Schaltfläche „Get“ oder „Install“, um die App herunterzuladen. Besuchen Sie für die Computerversion die offizielle BitPie-Wallet-Website und laden Sie das entsprechende Softwarepaket herunter.

Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Bitget Offizielle Website -Installation (2025 Anfängerhandbuch) Feb 21, 2025 pm 08:42 PM

Bitget ist eine Kryptowährungsbörse, die eine Vielzahl von Handelsdienstleistungen anbietet, darunter Spot -Handel, Vertragshandel und Derivate. Der 2018 gegründete Austausch hat seinen Hauptsitz in Singapur und verpflichtet sich, den Benutzern eine sichere und zuverlässige Handelsplattform zu bieten. Bitget bietet eine Vielzahl von Handelspaaren, einschließlich BTC/USDT, ETH/USDT und XRP/USDT. Darüber hinaus hat der Austausch einen Ruf für Sicherheit und Liquidität und bietet eine Vielzahl von Funktionen wie Premium -Bestellarten, gehebelter Handel und Kundenunterstützung rund um die Uhr.

Installation der Quellcode-Kompilierung von Zabbix 3.4 Installation der Quellcode-Kompilierung von Zabbix 3.4 Sep 04, 2024 am 07:32 AM

1. Installationsumgebung (virtuelle Hyper-V-Maschine): $hostnamectlStatichostname:localhost.localdomainIconname:computer-vmChassis:vmMachineID:renwoles1d8743989a40cb81db696400BootID:renwoles272f4aa59935dcdd0d456501Virtualisierung:microsoftOperatingSystem:CentOS 7(Kern)CPEOSName:cpe:

Ouyi OKX Installationspaket ist direkt enthalten Ouyi OKX Installationspaket ist direkt enthalten Feb 21, 2025 pm 08:00 PM

Ouyi Okx, die weltweit führende digitale Asset Exchange, hat jetzt ein offizielles Installationspaket gestartet, um ein sicheres und bequemes Handelserlebnis zu bieten. Auf das OKX -Installationspaket von Ouyi muss nicht über einen Browser zugegriffen werden. Der Installationsprozess ist einfach und einfach zu verstehen.

Holen Sie sich das Installationspaket Gate.io kostenlos Holen Sie sich das Installationspaket Gate.io kostenlos Feb 21, 2025 pm 08:21 PM

Gate.io ist ein beliebter Kryptowährungsaustausch, den Benutzer verwenden können, indem sie sein Installationspaket herunterladen und auf ihren Geräten installieren. Die Schritte zum Abholen des Installationspakets sind wie folgt: Besuchen Sie die offizielle Website von Gate.io, klicken Sie auf "Download", wählen Sie das entsprechende Betriebssystem (Windows, Mac oder Linux) und laden Sie das Installationspaket auf Ihren Computer herunter. Es wird empfohlen, die Antiviren -Software oder -Firewall während der Installation vorübergehend zu deaktivieren, um eine reibungslose Installation zu gewährleisten. Nach Abschluss muss der Benutzer ein Gate.io -Konto erstellen, um es zu verwenden.

See all articles