Linux Kernel Modul

F

Fluffy

Guest
Hiho Board,

Ich hab hier gesucht und ein ähnliches Problem gefunden, aber
der Threadersteller benutzt gcc und ich versuche mich weitestgehend an make zu halten, weil es auch empfohlen wird, wegen kbuild und so.

Folgender Guide The Linux Kernel Module Programming Guide und auch ein ähnliches PDF hab ich mir vorgenommen und habe dort den Code kopiert.
Es handelt sich um hello-1.c ich verstehe was obj-m += macht und hab die Datei einfach main.c genannt.

Ich hab mir anschließend auf kernel.org den kernel 4.6.3 heruntergeladen.
Wollte es nicht mit meinem Kernel machen weil ich für den build root-rechte brauchen würde.

Mein Makefile(include_dirs macht keinen unterschied)

Code:
include_dirs=-I/home/fluffy/simpleLinuxDriver/linux-4-6-3/include

obj−m += main.o

all: main.o
        make −C linux-4-6-3/ M=$(pwd) modules
clean:
        make −C linux-4-6-3/ M=$(pwd) clean

Meine main.c

Code:
[COLOR=#bbb529]#include[/COLOR][COLOR=#6a8759] <linux/module.h>
[/COLOR][COLOR=#bbb529]#include[/COLOR][COLOR=#6a8759] <linux/kernel.h>
[/COLOR][COLOR=#6a8759]
[/COLOR][COLOR=#cc7832][B]int [/B][/COLOR]init_module([COLOR=#cc7832][B]void[/B][/COLOR]) {
    printk(KERN_INFO [COLOR=#6a8759]"HELLO world 1.[/COLOR][COLOR=#cc7832]\n[/COLOR][COLOR=#6a8759]"[/COLOR])[COLOR=#cc7832];
[/COLOR][COLOR=#cc7832]
[/COLOR][COLOR=#cc7832]    [/COLOR][COLOR=#cc7832][B]return [/B][/COLOR][COLOR=#6897bb]0[/COLOR][COLOR=#cc7832];
[/COLOR]}

[COLOR=#cc7832][B]void [/B][/COLOR]cleanup_module([COLOR=#cc7832][B]void[/B][/COLOR])
{
    printk(KERN_INFO [COLOR=#6a8759]"Goodbye world 1.[/COLOR][COLOR=#cc7832]\n[/COLOR][COLOR=#6a8759]"[/COLOR])[COLOR=#cc7832];
[/COLOR]}

Der Fehler bei make all

Code:
 #include <linux/module.h>
                          ^
compilation terminated.
make: *** [<builtin>: main.o] Error 1


Meine Verzeichnissstrucktur:
simpleLinuxDriver <- ProjectOrdner
simpleLinuxDriver/linux-4-6-3 <- enthält den kernel von kernel.org
simpleLinuxDriver/main.c <- die zu kompilirende Datei
simpleLinuxDriver/Makefile

Es ist mit Sicherheit etwas recht einfaches aber ich seh es nicht, das Makefile ändert das Verzeichnis wie angegeben, die Datei für das Kopilieren wird gefunden und auch der Include-Path(wenn angegeben) ist richtig.

Gruß
Fluffy
 
Zuletzt bearbeitet von einem Moderator:
Die Kernel-Quelltexte sind konfiguriert (z.B. mittels 'make oldconfig')?
 
Hallo Bit,
das hatte ich vergessen zu erwähnen.
make -C linux-4-6-3/ config bzw nconfig
wurden von mir ausgeführt.
Die .config wird unter dem Linux-source-verzeichnis erstellt.
Was auch für ich darauf hindeutet das das Verzeichnis des Kernelsources gefunden wird.
Gruß

Fluffy

// UPDATE

Die Dokumentation von kBuild, sagt

rgets

When building an external module, only a subset of the "make"
targets are available.

make -C $KDIR M=$PWD [target]

The default will build the module(s) located in the current
directory, so a target does not need to be specified. All
output files will also be generated in this directory. No
attempts are made to update the kernel source, and it is a
precondition that a successful "make" has been executed for the
kernel.

modules
The default target for external modules. It has the
same functionality as if no target was specified. See
description above.

modules_install

Aber andere Projekte mit Makefiles finden die Dateien under Header in speziellen Include-verzeichnissen.

//Update 2
Das hier ist auch interessant und impliziert das ich eigentlich gar nix anderes machen brauch um module.h einzuhinden ausser es im Quellcode anzugeben
--- 4.1 Kernel Includes

To include a header file located under include/linux/, simply
use:

#include <linux/module.h>

kbuild will add options to "gcc" so the relevant directories
are searched.
 
Zuletzt bearbeitet von einem Moderator:
Ich hab mir anschließend auf kernel.org den kernel 4.6.3 heruntergeladen.

Will nur darauf hinweisen, da dies eine Fehlerursache sein könnte und ggf weitere "Fehler" hervorrufen könnte.

Peter no longer had time to follow developments with the 2.6 kernel

Dieses Howto ist für Kernel 2.2 und 2.4 und schon gute 10 Jahre alt. Du wendest es auf Kernel 4.6 an. In der Zwischenzeit hat sich im Kernel auch etwas verändert.
 
So wie ich das sehe ist es ein Problem mit der Toolchain,
das der Compiler die Datei nicht findet.
Aber es ist ein guter Punkt auf den du mich hinweist:
Gibt es eine aktuellere Dokumentation, vorzugsweise out of tree?
Gruß

Fluffy

//edit

Wenn ich den Kernelsource installiere und make-dagegen laufen lasse dann geschieht garnix
/simpleLinuxDriver % make -C /lib/modules/4.6.2-1-ARCH/build M=$(pwd) modules
make: Entering directory '/usr/lib/modules/4.6.2-1-ARCH/build'

Und ja ich weiss das der Kernel eine minor-version hinterherhinkt, das würde aber einen anderen Fehler werfen.

Building modules, stage 2.
MODPOST 0 modules
make: Leaving directory '/usr/lib/modules/4.6.2-1-ARCH/build'
 
Zuletzt bearbeitet von einem Moderator:
The kernel also has a large number of documents that can be automatically generated from the source code itself. This includes a full description of the in-kernel API, and rules on how to handle locking properly. The documents will be created in the Documentation/DocBook/ directory and can be generated as PDF, Postscript, HTML, and man pages by running: make pdfdocs make psdocs make htmldocs make mandocs respectively from the main kernel source directory.

...

Becoming A Kernel Developer ---------------------------
If you do not know anything about Linux kernel development, you should look at the Linux KernelNewbies project: Linux Kernel Newbies - Linux Kernel Newbies

Sowas?
 
Hey,

erstmal was Grundsätzliches: Warum willst du für eine Kernel kompilieren, der nicht auf deinem Test-System läuft? Der Grund mit root-Rechten stimmt nur bedingt, da du für insmod sowieso diese Rechte brauchst. Zudem laufen Module, die gegen einen anderen Kernel kompiliert wurden, nur bedingt auf dem jeweils anderem System.

Jetzt zum eigentlichen Thema: Versuch doch mal, die Header mit einem festen Pfad einzubinden. Diese sollten unter: kernel/include/linux/ liegen.

Zudem fehlen in deinem C-Code die entsprechenden Macros um dem Kernel zu sagen, was deine Init- und was deine Exit-Funktionen sind. Auch die Lizenzierung. Hier einfach mal meine Schablone für LKMs (funktioniert bis jetzt unter Debian 7+8 und Ubuntu 14.04 + aktuelle) - passe den Code einfach deinem wieder an. Den kernel.h musst du noch für printk ergänzen:

Makefile:
Code:
obj-m := deine_datei.o

EXTRA_CFLAGS+= -save-temps

all:
     $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
     $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

C-Code:
Code:
#undef __KERNEL__
#define __KERNEL__
#undef MODULE
#define MODULE
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int __init lkm_init(void)
{
//dein Code
return 0;
}
static void __exit lkm_cleanup(void)
{
//Räum den Speicher wieder frei
}
module_init(lkm_init);
module_exit(lkm_cleanup);

Viel Spaß noch,

Scutus

PS.: Falls /lib/modules/4.6.2-1-ARCH/build existiert, solltest du es damit machen. Ich habe bis jetzt nur gegen laufende Kernels kompiliert...
 
@lama0815 Danke für denk Link, hab ich nicht gefunden, werde ich mir mal anschauen.


@Scutus
Ich hab es mal mit absoluten Pfaden versucht, ging auch nicht.
Ja ich brauche root-Rechte um Sache zu laden, aber nicht zum Kompilieren, und ich werde das auch nie selbst machen, es sei den ich würde jemals soweit kommen das ich Code ausliefere der bei der Installation Kernelmodule kompiliert, wie z.B. Oracles VirtualBox.
Aber selbst dann würde ich eine alternative suchen.

Es gab mal einen Bug der hat / gelöscht wenn man den Kernel als Root kompiliert.
von daher Nein.
Ich versuche alles mit so wenig Rechten wie möglich zu machen und ja der Kernel läuft nicht auf meinem Host, aber auf meiner VM wird er laufen, bzw. Module sind aufwärtskompatibel, und da hab ich mir halt einfach eine Version rausgesucht.
Hätte ich Probleme zur Laufzeit bekommen, so hätte ich den Kernel gegen den ich kompiliere geändert.
Und der Grund wieso die Macros fehlen ist das ich Beispielcode einfach kopiert hatte.
Der wie Lama anmerkte veraltet ist.
Aber dann würden die Fehler andere sein, der Code würde kompilieren aber nicht laufen, und zZ kompiliert er noch nicht einmal.


Gruß

Fluffy
 
Zuletzt bearbeitet von einem Moderator:
Ja ich brauche root-Rechte um Sache zu laden, aber nicht zum Kompilieren, und ich werde das auch nie selbst machen, es sei den ich würde jemals soweit kommen das ich Code ausliefere der bei der Installation Kernelmodule kompiliert, wie z.B. Oracles VirtualBox.
Aber selbst dann würde ich eine alternative suchen.

Was wirst du nie selbst machen? Das Modul laden? Dann wirst du deinen Code auch niemals testen können. Ein LKM muss über den Kernel geladen werden - insmod oder modprobe. Ansonsten hast du Object-Code, der niemals läuft...

Es gab mal einen Bug der hat / gelöscht wenn man den Kernel als Root kompiliert.
von daher Nein.
Generell ja. Jedoch schreibst du selbst Code, der beim kompilieren nicht ausgeführt wird und dann per root-Rechte in den Kernel gejagt wird.

Ich versuche alles mit so wenig Rechten wie möglich zu machen und ja der Kernel läuft nicht auf meinem Host
Wenn der Kernel, gegen den du kompilieren willst, nicht auf deiner Entwicklungsumgebung installiert ist, hast folgende "Probleme":

1. Die Dateien unter /lib/modules/***/build sind kompilierte Dateien des jeweiligen Kernels, die durch dessen Installation (make modules install, oder so) erst entstehen. (Achtung: Gleiche Kernelversion bei verschiedenen OS, können sich unterscheiden)
2. Über insmod kannst du das Modul dann nur in deinen laufenden Kernel laden, indem du deinen Kernel selbst mit speziellen Flags kompiliert hast.

Module sind aufwärtskompatibel

3. Module, die für eine Kernel-Version kompiliert wurden, sind für keine andere Kernel-Version kompatibel. Nur den Code kannst du gegen einen anderen Kernel dann kompilieren.

Und der Grund wieso die Macros fehlen ist das ich Beispielcode einfach kopiert hatte.
Der wie Lama anmerkte veraltet ist.
Aber dann würden die Fehler andere sein, der Code würde kompilieren aber nicht laufen, und zZ kompiliert er noch nicht einmal.

Ich wollte dich nur darauf hinweisen, dass dein Code fehlerhaft ist. Er wird so nicht laufen, egal was du an deiner Entwicklungsumgebung änderst.

Grüße,
Scutus

P.S.: Alternativ kannst du auch nach Linux-Treiber suchen. Das sind auch LKMs. Ein entsprechendes Buch vom dpunkt-Verlag, kann ich generell als deutsche Lektüre empfehlen.
 
Hi Scutus,

ich hab i.w. gelesen das Kernel-Module die für ältere Kernelversionen kompiliert werden auf neueren Kernels laufen aber nicht umgekehrt.
Und was ich wahrscheinlich nie machen werde, ist ein Packet veröffentlichen was von vielen Leutenbenutzt wird.
Wenn ich mich nicht irre sollten zumindest einfache Sachen auch so laufen, da sich das Interface zum Kernel für die Module nicht unbedingt ändert, die Interna für den Kernel von Distro und Plattform ja, aber ein normales Modul was einfach nur Hello-World ausgibt sollte davon doch nicht betroffen sein oder liege ich dort falsch?
Aber egal.
Ich hab mir mal die Seite angeschaut, abgesehen davon das die auf kernelnewbies auch über Windows reden und das man das PW vergessen hat (und das in der Rubrik für Devices:rolleyes:) sieht es für mich mehr und mehr danach aus das ich Probleme mit meinem Setup habe.
wenn ich make -C linux-4-6-3 M=$(pwd) modules ausführe oder
make -C linux-4-6-3 SUBDIRS=$(pwd) modules (laut linuxchix von 2002) so läuft make, wirft keine Fehler aber mein Code wird auch nicht kompiliert .
Wenn ich das in ein Makefile schreibe und make all aufrufe, so wird gesagt das die Headerdateien nicht gefunden werden.
Die Angabe von include_dirs vor obj-m im Makefile bleibt unbeachtet, egal ob absoluter oder relativer Pfad(hierbei habe ich auch berücksichtigt das -C in make das Verzeichnis wechselt).

Was mich stutzig macht ist das die Angabe des Include-Pfades in einem anderen Projekt problemlos funktioniert hier aber anscheinend nicht läuft.

Könnten wir also bitte auf die Makefiles und Buildbefehle ein Augenmerk werfen, und was man da sonst noch alles falsch machen kann das der Compiler Header nicht findet?
Denn offensichtlich werden include-pfade nicht weitergegeben -.-.
sogar die Dokumentation von Kbuild sagt das man da eigentlich keine weitere Angaben machen braucht wenn man von linux/* includiert.
Das Umbenennen von Makefile in eine Resource für Kbuild führt zum gleichen Resultat.

Vielen Dank

Fluffy

// edit

Wenn ich make weglasse und direct mit gcc versuch es zu kompilieren bekomme ich haufenweise Fehlermeldungen die sich über mehrere Dateien sehr ähneln, von daher schein mir immer mehr und mehr ein Fehler in meinem Setup zu sein.

/simpleLinuxDriver % gcc -I linux-4-6-3/include -c main.c
In file included from linux-4-6-3/include/asm/bitops.h:32:0,
from linux-4-6-3/include/linux/bitops.h:36,
from linux-4-6-3/include/linux/kernel.h:10,
from main.c:1:
linux-4-6-3/include/asm-generic/bitops/atomic.h: In function ‘set_bit’:
linux-4-6-3/include/asm-generic/bitops/atomic.h:67:23: warning: implicit declaration of function ‘BIT_MASK’ [-Wimplicit-function-declaration]
unsigned long mask = BIT_MASK(nr);
^~~~~~~~
linux-4-6-3/include/asm-generic/bitops/atomic.h:68:47: warning: implicit declaration of function ‘BIT_WORD’ [-Wimplicit-function-declaration]
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
^~~~~~~~
In file included from linux-4-6-3/include/linux/printk.h:5:0,
from linux-4-6-3/include/linux/kernel.h:13,
from main.c:1:
linux-4-6-3/include/linux/init.h: At top level:
linux-4-6-3/include/linux/init.h:142:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘load_default_modules’
void __init load_default_modules(void);
^~~~~~~~~~~~~~~~~~~~
linux-4-6-3/include/linux/init.h:143:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘init_rootfs’
int __init init_rootfs(void);
^~~~~~~~~~~
linux-4-6-3/include/linux/init.h:285:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘parse_early_param’


Und bei der einen Datei die ich habe KANN es nicht an dem sein was ich geschrieben habe, sondern es MUSS etwas in meiner Toolchain sein.
Was für weitere Informationen braucht ihr von mir?

//UPDATE die oben genannten Fehler liegen an folgender Zeile in linux-4-6-3/Makefile MAKEFLAGS += -rR --include-dir=$(CURDIR) , wenn ich linux-4-6-3 als include-directory zum GCC-Kommand hinzufüge bekomme ich neue Fehler aber auch hier wird, zB asm nicht gefunden, was aber in linux-4-6-3/include liegt. Ich würde aber gerne Make zum laufen kriegen weil es der Empfohlene weg ist.
Danke


// EDIT

@lama0815
Die verlinkte Seite ist veraltet(kann also nicht überprüfen ob es an veralteten Tutorials liegt), bietet nicht die informationen um die es gerade geht, und die verlinkten Seiten sind ebenfalls in einem desolatem Zustand, soweit gesichtet,(ca 2012/13 oder haben zB nur 3 Seiten die auch noch generische Informationen/Definitionen enthalten, wie zB Developers - Linux Driver Project
Es scheint als ob es zwischen 2001 und 2005 ordentliche Dokumentation gab mit dem Ziel es weiter auszubauen und seitdem nix mehr.
Externe Bücher sind zwar gut, aber ich bin zZ sehr viel unterwegs und immer wo anders, und man kann mir nicht einfach mal was nachschicken.
 
Zuletzt bearbeitet von einem Moderator:
ich hab i.w. gelesen das Kernel-Module die für ältere Kernelversionen kompiliert werden auf neueren Kernels laufen aber nicht umgekehrt.
Und was ich wahrscheinlich nie machen werde, ist ein Packet veröffentlichen was von vielen Leutenbenutzt wird.
Wenn ich mich nicht irre sollten zumindest einfache Sachen auch so laufen, da sich das Interface zum Kernel für die Module nicht unbedingt ändert, die Interna für den Kernel von Distro und Plattform ja, aber ein normales Modul was einfach nur Hello-World ausgibt sollte davon doch nicht betroffen sein oder liege ich dort falsch?
Aber egal.

Dein Link vom ersten Post unter 1.2.1.1. Ein Kernel ist ein sehr geschützter Bereich. Zudem können sich Offsets und ähnliches von Version zu Version ändern und damit zu ungewollten Verhalten führen. Auch wichtig zu wissen: Printk (und printf, etc.) sind sehr "teure" Aufrufe. Hier werden einige Subroutinen verwendet...

sogar die Dokumentation von Kbuild sagt das man da eigentlich keine weitere Angaben machen braucht wenn man von linux/* includiert.
Ja, falls der Kernel (und Module, etc) richtig installiert ist. Wichtig ist das Verzeichnis "/lib/modules/$(shell uname -r)/build", da hier die Object-Files des Kernel liegen, gegen die du kompilieren willst. Ist das Verzeichnis "befüllt"? Wo liegen die linux-headers zu deinem neuen Kernel?

Wenn ich make weglasse und direct mit gcc versuch es zu kompilieren bekomme ich haufenweise Fehlermeldungen
gcc wird schwierig (zumindest nicht so einfach, wie du es machst). Hier verweise ich auf das Debian-Forum.

Was für weitere Informationen braucht ihr von mir?
Kannst du das ganze mal gegen den vorinstallierten Kernel kompilieren - mit den entsprechenden Paketen? Momentan scheint es mir, dass du den neuen Kernel nicht richtig installiert/kompiliert hast. Ohne das wirst du keine LKM kompilieren können.

Externe Bücher sind zwar gut, aber ich bin zZ sehr viel unterwegs und immer wo anders, und man kann mir nicht einfach mal was nachschicken.
Gibt's auch als eBook :wink: Ist nicht wichtig, da es wesentlich weitreichender ist, als das momentan funktioniert. Ist eher als weiterführende Lektüre gedacht gewesen.

Gerne.

Grüße,
Scutus
 
Hab ich schon einmal gemacht.
Hier die Resultate:
Code:
/simpleLinuxDriver % make -C /lib/modules/4.6.2-1-ARCH/build/ M=$(pwd) modules
make: Entering directory '/usr/lib/modules/4.6.2-1-ARCH/build'
  Building modules, stage 2.
  MODPOST 0 modules
make: Leaving directory '/usr/lib/modules/4.6.2-1-ARCH/build'
Dieser Befehl erstellt die Dateien Module.symvers und modules.order unter simpleLinuxDriver.
Beide Dateien sind leer.
Aber ich finde keine .o oder .ko Datei.

Gleiches gilt für den Befehl:
Code:
/simpleLinuxDriver % make -C linux-4-6-3 M=$(pwd) modules
make: Entering directory '/simpleLinuxDriver/linux-4-6-3'
  Building modules, stage 2.
  MODPOST 0 modules
make: Leaving directory '/simpleLinuxDriver/linux-4-6-3'
Es wird sich nur über linux/init.h beschwert wenn ich make für folgendes Makefile ausführe:
Code:
obj−m := test.o

all: test.o
        $(MAKE) −C /lib/modules/4.6.2-1-ARCH/build  M=$(pwd) modules
Gleiches gilt auch wenn ich simpleLinuxDriver/linux-4-6-3 als Wert für -C angebe.


Sollte es für den kompiliervorgang nicht egal sein, ob ich das auch lokal installiert habe?
Die Makefiles hier benutzten ja nur das Verzeichniss in dem sie sind sich aufhalten da der Code ja alles enthalten muss um es zu kompilieren, wenn ich make im Kernelverzeichnis ausführen dann funktioniert es auch, Kernel wird gebaut, zumindest werden .o-Dateien erstellt, aber halt nicht mit dem Modul out of tree was laut Dokumentation ja möglich ist.
....
CC fs/jbd2/revoke.o
CC fs/jbd2/journal.o
LD fs/jbd2/jbd2.o
LD fs/jbd2/built-in.o
CC fs/kernfs/mount.o
CC fs/kernfs/inode.o
CC fs/kernfs/dir.o
CC fs/kernfs/file.o
CC fs/kernfs/symlink.o
LD fs/kernfs/built-in.o
CC fs/lockd/clntlock.o
CC fs/lockd/clntproc.o
CC fs/lockd/clntxdr.o
CC fs/lockd/host.o
CC fs/lockd/svc.o
CC fs/lockd/svclock.o
CC fs/lockd/svcshare.o
CC fs/lockd/svcproc.o
CC fs/lockd/svcsubs.o
CC fs/lockd/mon.o
CC fs/lockd/xdr.o
CC fs/lockd/clnt4xdr.o
CC fs/lockd/xdr4.o
CC fs/lockd/svc4proc.o
CC fs/lockd/procfs.o
LD fs/lockd/lockd.o
LD fs/lockd/built-in.o
CC fs/nfs/client.o
CC fs/nfs/dir.o
.....

Wenn ich folgendes Makefile habe
Code:
obj−m := test.o

all:
   $(MAKE) −C linux-4-6-3  M=$(pwd) modules

bekomme ich folgende Ausgabe
(gleiches gilt auch für -C /lib/modules/4.6.2-1-ARCH/build :
Code:
/simpleLinuxDriver % make all  
make −C linux-4-6-3  M= modules
make[1]: Entering directory '/home/fluffy/simpleLinuxDriver'
make[1]: *** No rule to make target '−C'.  Stop.
make[1]: Leaving directory '/home/fluffy/simpleLinuxDriver'
make: *** [Makefile:5: all] Error 2

BTW make unter /lib/modules/4.6.2-1-ARCH/build schlägt mit

Code:
root@5OMjI8pR /lib/modules/4.6.2-1-ARCH/build # make
scripts/kconfig/conf  --silentoldconfig Kconfig
scripts/Makefile.build:44: arch/x86/entry/syscalls/Makefile: No such file or directory
make[1]: *** No rule to make target 'arch/x86/entry/syscalls/Makefile'.  Stop.
make: *** [arch/x86/Makefile:199: archheaders] Error 2

fehl und ich bin root.
Wurde mittels pacman -S linux-headers installiert.
Gruß

Fluffy

P.s.:
Version von make ist überigens4.2.1 nur so zur Vorsicht,
gcc ist 6.1.1
 
Zuletzt bearbeitet von einem Moderator:
@lama0815
Die verlinkte Seite ist veraltet(kann also nicht überprüfen ob es an veralteten Tutorials liegt), bietet nicht die informationen um die es gerade geht, und die verlinkten Seiten sind ebenfalls in einem desolatem Zustand, soweit gesichtet,(ca 2012/13 oder haben zB nur 3 Seiten die auch noch generische Informationen/Definitionen enthalten, wie zB Developers - Linux Driver Project
Es scheint als ob es zwischen 2001 und 2005 ordentliche Dokumentation gab mit dem Ziel es weiter auszubauen und seitdem nix mehr.
Externe Bücher sind zwar gut, aber ich bin zZ sehr viel unterwegs und immer wo anders, und man kann mir nicht einfach mal was nachschicken.

Naja ich wollte nicht behaupten, dass die alte Doku somit obsolet ist.

Vielleicht findest hier was:
Embedded Linux, kernel and real-time presentations - Free Electrons
 
Ja.
Und nun stellt Euch das mal vor:
Ratet mal was ich gesehen habe als ich das Make-file in der VM aufgemacht habe.

Das Terminal vom Clion und vim(!) in zsh auf meinem System haben das nicht angezeigt.(Lag wahrscheinlich daran das vim die encodierung gleich mitübernommen hat) :(
Und daran lag es dann auch, zumindest teilweise.
Hab die Datei neu geschrieben.
Wenn ich mir nun die terminal-ausgabe anschaue, dann weiss ich gerade nicht wiso make all mir die .ko-datei nicht erstellt aber der gleiche Befehl auf der cli macht es.

Nur so damit ich diesen ellen-langen-befehl nicht immer per hand eintippen muss.

Danke schon mal an Alle für's durchhalten und die Links.

P.s.: @Scutus: Modul gebaut gegen den Vanilla-kernel und konnte aufgrund eines falschen Formates nicht eingefügt werden.
gegen /lib/modules/$(uname -r)/build kompiliert und es lief, konnte das Modul einfügen.
Soviel zum Thema Linux ist nur ein Kernel :D
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben