Linux Kernel nach Maß bauen

Installation von gcc 8.2

root@linux:/# apt install gcc-8
root@linux:/# apt install g++-8
root@linux:/# update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-8 800 auto mode
1 /usr/bin/gcc-7 700 manual mode
2 /usr/bin/gcc-8 800 manual mode

Press <enter> to keep the current choice[*], or type selection number: 0[/CODE]

Quelle: https://askubuntu.com/questions/1028601/install-gcc-8-only-on-ubuntu-18-04
 
Zuletzt bearbeitet:
@9Strike
Hör bitte auf mit andy diskutieren zu wollen. Nicht nur, dass ihr deutlich vom Thema abkommt, sondern auch weil die Diskussion nichts bringen wird.

@root@linux
Linux Kernel kompilieren wollen, aber mit dem Paketmanager umgehen als wäre es der Vorschlaghammer...
Mit dem Entfernen der build-essentials hast du gute Chancen dir essentielle Pakete zum Übersetzen des Kernels vom Rechner geworfen zu haben. Auf den ersten Blick fällt mit bei einem apt show build-essentials ja sofort make auf.
Ansonsten ist die ganze Aktion auch (wieder) sinnlos. Schau einfach genau hin. Der Versuch gcc8.2 zu installieren schlug fehl, weil gcc8 installiert ist. In der Fehlermeldung steht aber auch, dass hinter dem Paket gcc-8 sich gcc der Version 8.2 versteckt! Genaues Lesen macht das Leben sooo viel einfacher ;)
Die mit Abstand einfachste Lösung wäre im Übrigen gewesen einfach gleich update-alternatives zu nutzen und dort den gewünschten Compiler auszuwählen.
 
root@linux schrieb:
Dieser Patch ist ein Fake. Es werden nur Namen in das Auswahlmenü hinzugefügt, im System ändert sich nichts.
Und wie kommst du darauf? Das einzige, was der Patch ändern sollte, ist mit -march=native und -O3 zu compilen, mehr nicht. Davon merkst du erstmal nichts, außer dass es länger dauert und das System in Benchmarks etwas schneller ist.

root@linux schrieb:
Meine Vermutung ist, dass die Ryzen APU als 8-Core CPU erkannt wird, weil sie 4-CPU-Kerne und 4-doppel-GPU-Kerne hat. Die Doppelkerne werden nur als Einzelkerne erkannt und somit ergibt sich die magische Zahl 8.
Nein, Linux kann das gar nichts verwechseln. Lass mal lscpu laufen.
 
Piktogramm schrieb:
Mit dem Entfernen der build-essentials hast du gute Chancen dir essentielle Pakete zum Übersetzen des Kernels vom Rechner geworfen zu haben.
Just don't install build-essential but the other packages it depend on directly? dpkg-dev g++-8 gcc-8 libc6-dev libc-dev make

Quelle: askubuntu

9Strike schrieb:
Nein, Linux kann das gar nichts verwechseln. Lass mal lscpu laufen.
root@linux:/# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: AuthenticAMD
CPU family: 23
Model: 17
Model name: AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx
Stepping: 0
CPU MHz: 1496.190
CPU max MHz: 2000,0000
CPU min MHz: 1600,0000
BogoMIPS: 3992.34
Virtualization: AMD-V
L1d cache: 32K
L1i cache: 64K
L2 cache: 512K
L3 cache: 4096K
NUMA node0 CPU(s): 0-7
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif overflow_recov succor smca
Ergänzung ()

Lässt sich damit was anfangen, auf der suche nach den passenden Treibern?

Driver-01.png

Driver-02.png

Driver-03.png

Driver-04.png
 
Zuletzt bearbeitet:
@root@linux
Nicht die erste Antwort ist immer auch die Beste! Gerade die Antwort mit den meisten Upvotes schlägt ja vor einfach gcc Versionen parallel zu installieren und build-essentials installiert zu lassen.
Mal ganz abgesehen davon, ruf mal apt rdepends build-essentials auf. Das Metapaket allein wird von vielen anderen Paketen benötigt, mit dem Fehlen dieses eines Paketes machst du dir tendenziell einfach sehr viel kaputt.
Typischerweise fängt man bei Linux auch an sich mal mit dem ganzen Kosmos um Pakete zu beschäftigen, bevor man Kernel selber baut.

Als Compileroptionen march=native und -O3 zu setzen ist nicht zu empfehlen.
O3 kann Dinge kaputt optimieren. Außerdem an Stellen wo es notwendig ist, verzweigen die Buildrezepte bzw. der Kernel von sich aus auf optimierten Code. Beispiel, Crypto im Kernel. Von Hand geklöppelt, optimiert und für relevante CPU Erweiterungen vorliegend:
https://github.com/torvalds/linux/tree/master/arch/x86/crypto

Wenn march=native bzw. O3 dann bitte nur im Userspace und nicht beim Kernel.
 
Also ich hab jetzt noch nicht gehört, dass jemand tatsächlich Probleme mit -O3 Probleme hat, theoretisch aber möglich. Mit -march=native sollte es eig keine Probleme geben, das aktiviert afaik lediglich spezielle CPU Instruktionen. Statt den march zu setzen kann man die auch einfach von Hand aktivieren, solange die CPU kein Hardware Bug hat ist das eigentlich ziemlich sicher.
 
Piktogramm schrieb:
ruf mal apt rdepends build-essentials auf

root@linux:~# apt rdepends build-essentials
E: No packages found
Ergänzung ()

Bin immer noch mit den Treibern beschäftigt.
Frage.
USB z.B. benötigt SCSI, was muss ich in - Device Drivers ---> SCSI device support - aktivieren, damit nicht nur USB sondern alles was irgendwie von SCSI abhängig ist , funktioniert?

SCSI.png

Ergänzung ()

Ist das so, richtig konfiguriert?

SCSI-2.png
 
Zuletzt bearbeitet:
@9Strike
Wen kennst du denn alles und editieren diese Personen wirklich alle Makefiles von Linux? Die div. Buildrezepte überschreiben die Compileroptionen ja durchaus mehrfach.
grep -rl '\-O2' /home/johannes/Downloads/linux/ | grep Makefile | wc -l
spuckt bei mir 53 Treffer für die 4.20 aus und nochmal 12 für -O2. Im Zweifelsfall haben die Leutchen einfach nur Schwein, dass ihr Kernel funktioniert, eben weil nicht überall wirklich -O3 gesetzt wurde :).
Ansonsten, ich habe gerade mal geschaut, -O3 scheint nicht mehr ganz so "schlimm" zu sein. Dafür scheint es -Ofast als neue Eskalationsstufe zu geben (ich habe u.a. fastmath als problematisch in Erinnerung, aber die GCC Doku habe ich das letztemal zur 5.x intensiver gelesen...).

march=native bringt ansonsten nichts, da die Bereiche wo du mit modernen Prozessorerweiterungen etwas reißen kannst, so oder so entsprechende Optimierungen vorgesehen sind oder gar Assembler vorliegt. Ansonsten kann march=native gerade mit -O3 den Kernel langsamer machen.
Wenn dir diese Compilereinstellungen anfangen Code zu vektorisieren, kann es sein, dass CPUs die für AVX2 angepasste Taktstufen verwenden sich "ständig" zurücktakten, nur weil mal 1-2 AVX Befehle im Code vorkommen. Das wird in den meisten Benchmarks nicht auffallen, da diese meist sowieso zu 99,9% Userspace ablaufen und kaum mit dem Kernel interagieren.

Tldr: Compileroptimierung ist unnötig, kann nachteilig sein und dort wo sich Optimierung lohnt wurde sie betrieben (von Leuten die Schlauer sind als ich und ihr zusammen :) )
 
hallo,

habe es nie verstanden, warum einige einen Kernel compilieren mit Optionen die NIE gebraucht werden und auch noch 45 min oder 1 Stunde darauf warten - nach meiner Meinung völlige Zeit und Ressourcenverschwendung !

Benutze seit Jahren immer die gleiche Config unter FunToo Linux (Gentoo) und es dauert nur 5 min :-)

Biete gerne meine an - meine Hardware, bitte siehe Signatur.

Die Config bitte in .config um benennen.

--
Oder Ihr könnt auch hier mal vorbei schauen.

Pappy's preconfig
 

Anhänge

  • config_Intel_CooSee.txt
    109 KB · Aufrufe: 394
Zuletzt bearbeitet:
Das kann ich auf jeden Fall bestätigen. Bei meinem Gentoo dauert es in etwa 3-4 Minuten und beinhaltet eben nur das, was ich brauche. Nach der Installation eines neuen Kernels wird die alte Config mit make oldconfig übernommen und bei neuen Funktionen wird gleich abgefragt, was ich damit anstellen möchte. Die Gentoo-Installation (~amd64) ist so alt wie der Rechner (2012) :daumen:

Es ist aber trotzdem ein langer Weg, bis man sich da einmal durchgearbeitet hat! Da sind unheimlich viele Treiber die du rausschmeißen kannst.
 
Piktogramm schrieb:
schau dir den Befehl nochmal an
Welchen Befehl meinst du, diesen?
root@linux:~# grep -rl '\-O2' /usr/src/linux-4.20.5-A315-41-R001/ | grep Makefile | wc -l
52

Habe
Code:
make allyesconfig
gemacht, im Menü: General setup ---> und Processor type and features ---> den Kernel auf ein: x86 64-Bit Computer angepasst.
Damit sind alle Treibe in diesem Kernel installiert, danach
Code:
reboot
und den neuen Kernel linux-4.20.5-A315-41-R001 gestartet.
Jetzt würde ich gerne die verwendeten Treiber auslesen, damit ich alle anderen Treiber deaktivieren kann.
Wie mache ich das?
Mit
Code:
lspci -v
sehe nicht alles.
Beispiel: zeigt er die Maus Treiber nicht an. Es ist ein Synaptics Touchpad und eine MadCatz R.A.T. 4 Maus angeschlossen. Ich wüsste gerne welche Treiber verwendet werden, weil es z.B. für das Synaptics Touchpad zwei verschiedene Verbindungstypen gibt. Über I2C oder USB, ich weiß aber nicht welcher Typ in meinem Laptop steckt.
Das gilt auch für alle anderen Treiber, ich muss genau wissen welcher Treiber verwendet wird.

Mice.png


Und ja, ich weiß. Wenn das Synaptics Touchpad nicht mit
Code:
lspci
angezeigt wird, dann kann es ja nur ein USB-Touchpad sein.
Das ist eine logische Schlussfolgerung, aber in anderen fällen ist es dann nicht so einfach heraus zu finden:

GPIO-2.png


Hier habe ich 5 verschieden Möglichkeiten und ich habe keine Ahnung welche davon, der Chip auf dem Mainboard braucht.

GPIO-3.png

I2C-2.png


U.s.w.…


Hier sehe ich das die Maus richtig erkannt wurde aber, ich kann den Treiber nicht sehen.

MadCatz.png
 
Zuletzt bearbeitet:
Dann noch so seltsames Zeug.
Code:
lsusb
zeigt eine Wireless Radio Frequency Bluetooth Device, Lite-On Technology Corp. an.

Bluetooth.png


Dazu gibt es aber in der config keine Treiber

Bluetooth0.png


und der Herstelle Lite-On kennt dieses Produkt auch nicht.

Bluetooth-2.png


Es kann sich selbstverständlich um eine Spezial Anfertigung handeln. Die nur an andere Hersteller verkauft wird und nur als Chip, der dann gelötet werden muss.

Die Frage ist jetzt: Welchen Treiber hat Linux für dieses Gerät genommen?
 
@root@linux
Wenn ich etwas über "Pakete" schreibe, wie kommst du darauf, dass eine Kette aus grep und wc gemeint sein könnte? Ich meine natürlich jenen Befehl wo apt rdepends bei dir fehlschlug -.-

Was die Treiber angeht, versuch es mal mit einer Suchmaschine deiner Wahl:
"Linux show all loaded modules"
"Linux show all drivers"
Das geht zigmal schneller, als ein Forenpost zu verfassen und auf eine Antwort zu warten.

Ich bin immer noch verwundert über deine Fortschritte. Du scheinst für die Materie sehr wenig Verständnis aufzubauen und kommst dennoch gut voran o.O
 
Piktogramm schrieb:
Ich bin immer noch verwundert über deine Fortschritte. Du scheinst für die Materie sehr wenig Verständnis aufzubauen und kommst dennoch gut voran o.O
Es gibt viele Wege die nach Rom führen.
Beschreite neue Wege.
 
9Strike schrieb:
Historisch war C++ tatsächlich nur eine Erweiterung von C (Entstehung 1979), die erst 1998 richtig standartisiert wurde
Ja. Historisch schon. Aber wie Du selbst feststellst ist das ja alles 20 Jahre und mehr her.

9Strike schrieb:
Btw ich hab gerade geguckt Linux ist in GNU C geschrieben, das ist durchaus ein richtiger Standard.
Ein Standard der nur von einem Produkt unterstützt wird ist ein sinnloser Standard.
Abgesehen davon imitieren andere C-Compiler inzwischen einige GCC-Spezialitäten, weil der GCC halt so verbreitet ist. Das könnte man dann immerhin noch als De-facto-Standard durchgehen lassen.

9Strike schrieb:
Ich sag ja auch nicht, dass ich es gut finde, dass man Linux nicht einfach so mit clang compilen kann. Das es nicht so trivial geht heißt aber nicht, dass das zwingend schlecht ist.

Der Witz ist ja, das an anderer Stelle gern von der Linux-Community (bzw. aus der Linux-Community heraus) argumentiert wird das es nicht gut ist, wenn man von einem Hersteller abhängig ist. Man selbst hält sich aber nicht dran.
9Strike schrieb:
Und ganz abgesehen davon ist clang im Schnitt jetzt auch nicht so viel besser

Es geht ja zwangsläufig gar nicht um clang im Speziellen. Es gibt ja auch noch andere C-Compiler. Wiederum mit speziellen Vorteilen (z.B. der Intel Compiler der halt sehr guten Code für Intel-CPUs erzeugt).
Was clang angeht: Der praktisch greifbare Hauptvorteil von clang war immer, das er die besseren Fehlermeldungen als GCC liefert(e). Der GCC hat aufgrund dessen nachgezogen.
Das zeigt aber auch, wie wichtig ein gewisser Wettbewerb ist und damit auch die Wichtigkeit sein Projekt möglichst neutral zu halten.
 
Die frage die eigentlich dahinter steckt ist:
Wenn ich
Code:
lsmod
eingebe, bekomme ich die geladenen Treiber/Module zu sehen. Sind das dann auch alle Treiber? Oder werden noch Treiber/Module bei bedarf geladen?
Beispiel: Wenn ich einen USB-Speicher-Stick mit einer Formatierung einstecke, die bis jetzt nicht gebraucht wurde (z.B. NILFS2), wird sie dann nachgeladen oder ist sie seit der Computer gebootet wurde geladen?
Klar, alles ist im Kernel integriert aber manches davon wird nicht benötigt und muss auch nicht geladen werden.
Es sind z.B. hunderte Treiber im Kernel eingebunden, angezeigt werden aber nur die geladenen. Was mach ich jetzt, wenn ich ein USB-BluRay Laufwerk anschließe, um mir ein BluRay Film anzusehen?
In der jetzigen Konfiguration
Code:
make allyesconfig
würde das Laufwerk sofort erkannt werden und ich könnte mir den Film problemlos ansehen. Aber wenn ich alle Treiber, die zum jetzigen Zeitpunkt nicht geladen sind, aus der config entferne, dann wird der Film nicht laufen.
Klar, an solche dinge muss ich selber denken und alles für solche Fälle vorbereiten. Da gibt es aber Sachen, von denen ich nicht weiß, das sie mal vom System gebraucht werden, ich weiß nicht welche das sind und kann den Kernel nicht darauf vorbereiten.
Drucker, Maus, Tastatur und alle arten von USB-Geräten…, werde ich als Module installieren, damit alles, was ich in den USB-Port stecke, auch funktioniert, außer die zwei Mäuse die ich immer benutze (Synaptics Touchpad und MadCatz R.A.T. 4), die werden in den Kernel eingebunden.
Was muss ich den noch unbedingt in den Kernel einbauen?
Ergänzung ()

Piktogramm schrieb:
Ich bin immer noch verwundert über deine Fortschritte. Du scheinst für die Materie sehr wenig Verständnis aufzubauen und kommst dennoch gut voran o.O
Der Durchschnittsmensch (Leser) soll das ja alles verstehen und nachvollziehen können. Nicht nur Programmierer.
 
Zuletzt bearbeitet:
root@linux schrieb:
Es gibt viele Wege die nach Rom führen.
Beschreite neue Wege.
Mein Einkommen wird durch IT-Menschen gesichert die nicht wirklich verstehen was sie da eigentlich tun. Ich bin also schwer dafür, dass Andere diesen Weg gehen :D.
Der Durchschnittsmensch hat sowieso keine Chance das zu verstehen. Eine gescheite, verständliche Doku schaut anders aus ;)

Was lsmod angeht man lsmod der Kram ist dokumentiert! Schau es dir selbst an anstatt Fragen zu stellen!
Das es unpraktisch ist eine Minimalconfig zu nutzen wurde aber auch schon in Post #3 des Threads geschrieben. Eben weil du mit viel Aufwand schlicht die Praxistauglichkeit deines Systems minimierst: https://www.computerbase.de/forum/threads/linux-kernel-nach-mass-bauen.1852388/post-22243098
 
Bitte mal die GCC-Clang-Diskussion einstellen bzw. auf PNs verlagern. Das hilft hier gerade gar nicht.

Ich finde make allyesconfig nicht sinnvoll. Das stellt ein extrem unrealistisches Szenario dar. Damit gehen wahrscheinlich auch einige sinnvolle Standardeinstellungen verloren.
 
aki schrieb:
Das hilft hier gerade gar nicht.
Hier hilft sowieso grad gar nichts. Der eine versucht einen Kernel anzupassen, obwohl er nicht mal Linux-Grundlagen beherrscht. Alle anderen versuchen ihm das klar zu machen, äußern generelle Meinungen zu seinem Vorhaben oder werfen wahlweise ein paar Informationshäppchen zu, die aber letztlich auch nix nützen wenn die Grundlagen nicht da sind.
 
Zurück
Oben