externe Libs zu Kernel Modul linken

S

sparky

Mitglied
Hi,
ich will mein Kernel-Modul kompileren in dem ich auf die MySQL-Header zugreife. Dazu verwende ich folgendes Makefile:

Code:
EXTRA_CFLAGS := -DDEBUG -I/usr/include/mysql

ifneq ($(KERNELRELEASE),)
obj-m	:= nf_mysql.o
else
KDIR	:= /lib/modules/$(shell uname -r)/build
PWD	:= $(shell pwd)

all:
	$(MAKE)	-C $(KDIR) SUBDIRS=$(PWD) modules
endif

in meiner Quelldatei binde ch dann eben mysql.h ein.

Problem:
wenn ich 'make' mache bekomme ich den Fehler:
/usr/include/mysql/mysql.h:33:23 sys/types.h: No such file or directory

anscheinend findet er die Header-Dateien nicht. Wenn ich noch ein -L/usr/include in mein Makefile packe, dann bekomm ich 10000 Fehler mit doppelt deklarierten Funktionen/Variablen usw.

Meine Frage - wie mach ich das jetzt richtig :)
Und ich muss ja noch die libmysqlclient dazulinken - wie mach ich das?
Mit normalen Makefiles ist das ja alles kein Problem aber für Kernel Module scheint das etwas anders zu laufen?
 
Du programmierst ein Kernel-Modul aber scheinst nicht den Unterschied zwischen Userspace und Kernelspace zu kennen? Das erscheint mir doch ein wenig merkwürdig.
Man kann nicht einfach alles Mögliche nach belieben zusammenlinken.
libmysqlclient wird ohne libc nicht funktionieren.
 
Ich hatte bisher mit Kernelprogrammierung noch nichts am Hut.
Es geht mir auch mehr darum ob es möglich ist eine kleine Idee die ich hatte zu realisieren.
Bin also für jeglichen Input offen :)
 
Mµ*e^13.5_?¿ hat ja schon korrekt drauf hingewiesen... Du kannst nicht einfach Programm-Bibliotheken zum Kernel linken. Programme laufen im Userspace, waehrend Kernel-Module im Kernelspace laufen. Vielleicht solltest du dich erstmal mit dem Aufbau von Linux befassen bevor du dich am Kernel vergreifst. Lies z.B. mal http://ezs.kr.hsnr.de/TreiberBuch/html/sec.theory.html und den Rest von dem Buch, damit du mal eine Vorstellung hast, was man bei der LKM-Programmierung alles beachten muss. Im Kernel rumpfuschen kann naemlich ganz schnell bedeuten, dass man sich sein System, im schlimmsten Fall sogar die Hardware zerschiesst. Der Kernel nutzt eigene Funktionalitaeten und diese zig Fehler, die du bekommst wegen doppelt deklarierten Funktionen, duerften ihre Ursache darin haben, dass die MySQL-Libs die Standard-C-Bibliothek nutzen, waehrend im Kernel viele der dort enthaltenen Funktionen nochmal enthalten sind, allerdings so programmiert, dass sie Speicherverwaltung u.ae. selbst uebernehmen und eben im Kernelspace laufen koennen.

Die einzige Moeglichkeit, fuer das was du da vorhast ist, dass du einfach alle Funktionalitaeten der MySQL-Bibliothek, die du in deinem Modul nutzen willst, als "Kernel-Code" (also unter Benutzung der Kernel-Funktionalitaeten) nachprogrammierst. Damit erhaelst du wahrscheinlich nicht nur ein unheimlich grosses Kernel-Modul sondern auch die naechsten Jahre was zu tun. Und wenn du damit fertig bist, ist MySQL eh wieder ein paar Versionen weiter. Allerdings sehe ich auch keinen Grund, was man mit MySQL im Kernel anstellen sollte.

Daher mein Tip: Lass den Plan bleiben und lerne erstmal ein wenig mehr ueber das System, in dem du da gerade rumpfuschen willst. Dir sind offenbar nichtmal die Grundzuege der Systemprogrammierung geschweige denn der Aufbau und die Funktionsweise von Linux vertraut.
 
Zuletzt bearbeitet:
ok das wird wohl komplizierter :)
Ich lass es dann lieber.
 

Ähnliche Themen

Fehler beim Kompilieren von qcserial

gcc-4.4.5 kde-4.7.2 wine Bildschirm flackert System stürzt ab

Ati-Treiber bringt mich um den Verstand

RT61 Wlan Ubuntu Problem

[Anleitung] Aspire One Umts Modem nutzen

Zurück
Oben