Habe es gerade selbst herausgefunden.
In Kernel-Modulen darf stdio.h nicht eingebunden werden
ich brauchte das für ein printf. Stattdessen ist printk zu verwenden
Beiträge von UweA
-
-
Hallo,
mein gcc compiler findet bei einem zu compilieren Kernel Treiber (https://github.com/groeck/nct6775) die stdio.h nicht. (#include <stdio.h> habe ich hinzugefügt, normalerweise es das nicht enthalten)
In einem kleinen "Hello World!"-Programm, das ich im selben Verzeichnis kompilieren lasse, funktioniert das hingegen.
Gibt es in der make-Datei irgendeine Einstellung, die die Verwendung von usr/include verhindert?Code
Alles anzeigen# For building for the current running version of Linux TARGET := $(shell uname -r) HOME=$(shell pwd) # Or for a specific version #TARGET := 2.6.33.5 KERNEL_MODULES := /lib/modules/$(TARGET) KERNEL_BUILD := $(KERNEL_MODULES)/build #KERNEL_BUILD := /usr/src/linux-headers-$(TARGET) #SYSTEM_MAP := $(KERNEL_BUILD)/System.map SYSTEM_MAP := /boot/System.map-$(TARGET) DRIVER := nct6775 # Directory below /lib/modules/$(TARGET)/kernel into which to install # the module: MOD_SUBDIR = drivers/hwmon obj-m := $(DRIVER).o MAKEFLAGS += --no-print-directory .PHONY: all install modules modules_install clean all: modules # Targets for running make directly in the external module directory: modules clean: @$(MAKE) -C $(KERNEL_BUILD) M=$(CURDIR) $@ EXTRA_CFLAGS=-g install: modules_install modules_install: cp $(DRIVER).ko $(KERNEL_MODULES)/kernel/$(MOD_SUBDIR) depmod -a -F $(SYSTEM_MAP) $(TARGET)Grüße,
Uwe -
So einfach...
Prima! Vielen Dank, jetzt läßt es sich kompilieren.Ich möchte dir gern noch eine Anschlussfrage stellen.
Ich habe in dem Treiber ein "printf" eingebaut und musste deswegen die <stdio.h> hinzunehmen.
Beim compilieren meldet der Compiler aber, dass er stdio.h nicht findet.
Ich habe auch schon den Pfad mit angegeben: "#include <usr/include/stdio.h>"
(Da liegt sie auch)
Aber trotzdem belibt er bockig.
Weißt du warum? -
Kernel-desktop habe ich installiert und neu gestartet.
Sollte das damit jetzt funktionieren? (Tut es nämlich nicht)Der Treiber heißt "nct6775" und befindet sich hier:
https://github.com/groeck/nct6775 -
Code
Alles anzeigenLoading repository data... Reading installed packages... S | Name | Type | Version | Arch | Repository --+--------------------------------+---------+----------------------+--------+--------------------- i | automake | package | 1.13.4-2.1.2 | noarch | openSUSE-13.1-1.10 i | devel_kernel | pattern | 13.1-13.6.1 | i586 | openSUSE-13.1-1.10 i | devel_kernel | pattern | 13.1-13.6.1 | i586 | openSUSE-13.1-Oss i | gcc | package | 4.8-2.1.2 | i586 | openSUSE-13.1-1.10 i | gcc | package | 4.8-2.1.2 | i586 | openSUSE-13.1-Oss i | gcc-c++ | package | 4.8-2.1.2 | i586 | openSUSE-13.1-1.10 i | gcc-c++ | package | 4.8-2.1.2 | i586 | openSUSE-13.1-Oss i | gcc-info | package | 4.8-2.1.2 | i586 | openSUSE-13.1-1.10 i | gcc-info | package | 4.8-2.1.2 | i586 | openSUSE-13.1-Oss i | gcc48 | package | 4.8.1_20130909-3.2.1 | i586 | openSUSE-13.1-1.10 i | gcc48 | package | 4.8.1_20130909-3.2.1 | i586 | openSUSE-13.1-Oss i | gcc48-c++ | package | 4.8.1_20130909-3.2.1 | i586 | openSUSE-13.1-1.10 i | gcc48-c++ | package | 4.8.1_20130909-3.2.1 | i586 | openSUSE-13.1-Oss i | gcc48-info | package | 4.8.1_20130909-3.2.1 | noarch | openSUSE-13.1-1.10 i | kernel-debug-devel | package | 3.11.6-4.1 | i686 | openSUSE-13.1-Oss i | kernel-default-devel | package | 3.11.10-21.1 | i586 | openSUSE-13.1-Update i | kernel-desktop | package | 3.11.6-4.1 | i686 | openSUSE-13.1-1.10 i | kernel-desktop | package | 3.11.6-4.1 | i686 | openSUSE-13.1-Oss i | kernel-desktop-devel | package | 3.11.10-21.1 | i686 | openSUSE-13.1-Update i | kernel-desktop-devel | package | 3.11.6-4.1 | i686 | openSUSE-13.1-1.10 i | kernel-desktop-devel | package | 3.11.6-4.1 | i686 | openSUSE-13.1-Oss i | kernel-devel | package | 3.11.10-21.1 | noarch | openSUSE-13.1-Update i | kernel-devel | package | 3.11.6-4.1 | noarch | openSUSE-13.1-1.10 i | kernel-firmware | package | 20130714git-2.1.1 | noarch | openSUSE-13.1-1.10 i | kernel-pae-devel | package | 3.11.10-21.1 | i686 | openSUSE-13.1-Update i | kernel-source | package | 3.11.10-21.1 | noarch | openSUSE-13.1-Update i | kernel-source | package | 3.11.6-4.1 | noarch | openSUSE-13.1-Oss i | kernel-syms | package | 3.11.10-21.1 | i586 | openSUSE-13.1-Update i | kernel-xen-devel | package | 3.11.10-21.1 | i686 | openSUSE-13.1-Update i | libgcc_s1 | package | 4.8.1_20130909-3.2.1 | i586 | openSUSE-13.1-1.10 i | libgcc_s1 | package | 4.8.1_20130909-3.2.1 | i586 | openSUSE-13.1-Oss i | make | package | 3.82-160.2.1 | i586 | openSUSE-13.1-1.10 i | make | package | 3.82-160.2.1 | i586 | openSUSE-13.1-Oss i | makeinfo | package | 4.13a-36.1.2 | i586 | openSUSE-13.1-1.10 i | makeinfo | package | 4.13a-36.1.2 | i586 | openSUSE-13.1-Oss i | patterns-openSUSE-devel_kernel | package | 13.1-13.6.1 | i586 | openSUSE-13.1-1.10 i | patterns-openSUSE-devel_kernel | package | 13.1-13.6.1 | i586 | openSUSE-13.1-Oss -
Hallo,
ich möchte dem Kernel einen Treiber für einen Super-IO-Chip(NCT6791D) hinzufügen.
Nach einem "make all" wird allerdings ""make: *** /usr/src/linux-headers-3.11.6-4-desktop: No such file or directory" zurückgemeldet.
Und das stimmt auch. Unter /usr/src gibt es dieses Verzeichnis nicht.
Ich habe unter Yast2 aus dem Entwicklungsschemata die Pakete "Grundlegende Entwicklungsumgebung", "C/C++-Entwicklung" und "Linux-Kernel-Entwicklung" installiert.
Kann mir jemand sagen, was da noch fehlt? In was sind die o.g. header enthalten?Grüße,
UweA