2016-06-30 23 views
0

Ich versuche, ein Netzwerkprogramm (wie Nginx) auf RISC-V auszuführen.gibt es eine Möglichkeit, Netzwerk (Socket) Programm in RISC-V ausführen?

Ich bin mir nicht bewusst, Netzwerkgeräte auf RISC-V, und ich möchte es nicht selbst implementieren, also bin ich auf der Suche nach dem anderen Weg.

Zuerst habe ich versucht, ein einfaches Programm auszuführen, das eine HTTP-Anfrage an die angegebene Adresse sendet. Es löst die IP-Adresse mit gethostbyname auf und sendet eine HTTP-Anfrage.

Ich lief erfolgreich Riscv-Linux auf Spike-Simulator und kompilierte das Programm und führte es aus. gethostbyname gibt Unknown server error zurück, und wenn ich die IP-Adresse direkt verwende, gibt connectNetwork is unreachable Fehler zurück.

Ich habe festgestellt, dass der Front-End-Server fesvr Systemaufrufe verarbeiten kann, die vom RISC-V-Prozessor weitergeleitet werden, und dachte, dass es möglicherweise Netzwerk-bezogene Systemaufrufe verarbeiten wird. Ich fand auch fesvr-eth und dachte, vielleicht ist es etwas im Zusammenhang mit der Handhabung von Netzwerkdiensten, aber nach this link ist es nur für die Verbindung von fesvr läuft auf dem PC auf der Entwicklungskarte von Ethernet. Auch fesvr-eth wurde aus dem letzten Git Repo entfernt.

So jetzt möchte ich schauen und risk-v Linux und sehen, wie es tatsächlich Netzwerksystem Anrufe wie connect handhaben. Ich denke, wenn die Netzwerkoperationen nur innerhalb localhost durchgeführt werden, kann es ohne ein Netzwerkgerät ordnungsgemäß behandelt werden. Oder es kann eine einfache Möglichkeit geben, fesvr zu erweitern, um Netzwerkdienste zu behandeln.

Fasst man die Fragen:

  • ist es eine Möglichkeit, Netzwerk-Anwendungen in RISC-V zu laufen, dass ich verpasst?
  • können Netzwerkdienste tatsächlich verarbeitet werden, wenn die Anforderung vom selben Host stammt, auch wenn keine Netzwerkgeräte vorhanden sind?
  • andere Kommentare oder Referenzen, die hilfreich sein können?

Antwort

0

Im Moment bieten weder Spike noch Riscv-Qemu Modelle für Netzwerkschnittstellen. Mit diesen beiden Tools können Sie das Loopback-Gerät (127.0.0.1) zum Netzwerken zwischen Prozessen verwenden. Loopback-Netzwerke werden direkt vom Betriebssystemkern implementiert.

Für andere Architekturen bietet qemu eine große Anzahl von Netzwerkoptionen. Es sollte nicht zu schwierig sein, riscv-qemu/hw/riscv/riscv_board.c zu ändern, um eine dieser virtuellen Netzwerkschnittstellen in ein emuliertes RISC-V-System zu instanziieren.

+0

Danke. Ich habe das 'ifconfig' Applet in' busybox' hinzugefügt und den Befehl 'ifconfig lo: 127.0.0.1 netmask 255.0.0.0 up' verwendet, um das Loopback-Netzwerk einzurichten. Dann habe ich einen einfachen Echo-Server und -Client ausgeführt, aber der Server und der Client hängen jeweils auf "accept" und "connect". loopback network scheint korrekt eingerichtet zu sein, denn wenn ich das Programm starte, ohne es einzurichten, schlägt "connect" mit "network unreachable" fehl. Ich werde den Kommentar hinzufügen, wenn ich Updates habe. –