2016-06-05 17 views
1

Wir wollen Linux für Single-Core-RISCV-Prozessor auf FPGA portieren. In der Zwischenzeit wird der Linux-Kernel durch LLVM-Passing instrumentiert.Kompilieren Sie den Linux-Kernel mit LLVM

Meine Zweifel sind: 1. Ob die Riscv-Llvm Toolchain könnte verwendet werden, um den Linux-Kernel zu kompilieren? 2. Ob die riscv-llvm Toolchain jetzt das Hinzufügen von benutzerdefinierten Pass unterstützt?

+0

Neue Versionen des Linux-Kernels können von llvm erstellt werden (es gab das Projekt http://llvm.linuxfoundation.org/, um dies zu ermöglichen; einige Module/Optionen waren vor einiger Zeit nicht kompilierbar). Welche Version von Linux Kernel und Llvm wird in Ihrem Projekt verwendet? Sie können jedem Llvm benutzerdefinierte Pässe hinzufügen, und es gibt Quellen für Llvm für Riscv. – osgx

+0

Wir wollen Linux Kernel-2.6.33 verwenden. Ich bin ein kompletter Anfänger zum Kompilieren von Linux Kernel. Könnten Sie mir bitte eine Anleitung oder einen Vorschlag zum Prozess geben? – Rambo

+0

Rambo, gibt es Linux Kernel 2.6.33 für RISC-V? Ich denke, es gibt nur die Version https://github.com/riscv/riscv-linux, die nicht 2.6, sondern 3.14/4.1 ist. Sie können diesen alten Kernel nicht einfach kompilieren; die Portierung auf RISC-V wird benötigt, was nicht Aufgabe für Anfänger ist. – osgx

Antwort

2

Es gibt zwei Probleme mit der gewählten Linux-Version 2.6.33.

Das erste Problem ist, dass diese Version nie von RISC-V-Team auf RISC-V portiert wurde. Sie haben 3,14 und 4,1 in https://github.com/riscv/riscv-linux. Um es im RISC-V-Prozessor zu starten, sollten Sie daher die gesamte Portierung des architekturabhängigen Teils (arch/ Verzeichnis des Kernels) wiederholen. Dies ist sehr komplexe Aufgabe, auch wenn es eine portierte Version für die Ziel-CPU gibt. Sie können einige Teile von 3.14 zurückportieren, aber 2.6.33 und 3.14 sind anders, es gab mehrere Jahre der Evolution zwischen ihnen. (PORTING ist nicht nur Kompilieren, es ist Aufgabe von 30 Dateien ohne Fehler zu schreiben, oder mit langen Debugging.)

Das zweite Problem ist, dass LLVM kann nur vollständig bauen moderne Linux-Kernel-Versionen, die Patches von http://llvm.linuxfoundation.org/ Projekt hat. In einigen Teilen des Kernels wurden nicht unterstützte (und niemals in Clang/llvm unterstützte) GCC-Erweiterungen verwendet. Partieller Aufbau war möglich, aber zwei-drei Komponenten von älterem Linux können nicht mit Klängen erstellt werden.

Also, ich empfehle Ihnen wirklich, Linux-Kernel-Version von RISCV-Team zu verwenden, und neuer (4.1) ist besser.