Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

OS Linux

Hulp bij compileren van kernel module gevraagd

sjemmie
15 antwoorden
  • Hallo allemaal

    Ik heb suse 8.2 en wil een klein test kernel module compileren.

    #include <linux/usb.h>
    #include <linux/module.h>
    #include <linux/kernel.h>

    int init_module(void)
    {
    info(KERN_INFO "eerste testje
    ");
    return 0;
    }

    void cleanup_module(void)
    {
    info(KERN_INFO "tweede testje
    ");
    }


    Alleen krijg ik een foutmelding:

    make hello.o
    cc -c -o hello.o hello.c
    hello.c: In function `init_module':
    hello.c:7: error: `KERN_INFO' undeclared (first use in this function)
    hello.c:7: error: (Each undeclared identifier is reported only once
    hello.c:7: error: for each function it appears in.)
    hello.c:7: error: parse error before string constant
    hello.c: In function `cleanup_module':
    hello.c:13: error: `KERN_INFO' undeclared (first use in this function)
    hello.c:13: error: parse error before string constant
    make: *** [hello.o] Error 1

    Ik snap niet precies wat ik moet verbeteren.
    En wat moet je in etc/syslogd.conf qua instellingen invoeren om KERN_INFO berichten in je console terug te krijgen?
  • Ik heb er niet veel verstand van, maar blijkbaar snapt gcc KERN_INFO niet. Vermoedelijk moet je die nog ergens definieren/declareren of wat dies meer zij.
  • Ik heb er verder ook niet veel verstand van maar tis het laatste loodje voor een schoolopdracht
    wie weet wat ik in de syslog nog pziez veranderen moet ?

    Ik plak mijn syslog maar gewoon ff mee :)
    [code:1:ec2618e672]
    # /etc/syslog.conf - Configuration file for syslogd( 8 )
    #
    # For info about the format of this file, see "man syslog.conf".
    #

    # print most on tty10 and on the xconsole pipe
    #
    kern.warn;*.err;authpriv.none /dev/tty10
    kern.warn;*.err;authpriv.none |/dev/xconsole
    *.emerg *

    # enable this, if you want that root is informed
    # immediately, e.g. of logins
    #*.alert root

    #
    # all email-messages in one file
    #
    mail.* -/var/log/mail
    mail.info -/var/log/mail.info
    mail.warn -/var/log/mail.warn
    mail.err /var/log/mail.err

    #
    #
    # all news-messages
    #
    # these files are rotated and examined by "news.daily"
    news.crit -/var/log/news/news.crit
    news.err -/var/log/news/news.err
    news.notice -/var/log/news/news.notice
    # enable this, if you want to keep all news messages
    # in one file
    #news.* -/var/log/news.all

    #
    # Warnings in one file
    #
    *.=warn;*.=err -/var/log/warn
    *.crit /var/log/warn

    #
    # save the rest in one file
    #
    *.*;mail.none;news.none -/var/log/messages

    #
    # enable this, if you want to keep all messages
    # in one file
    #*.* -/var/log/allmessages

    #
    # Some foreign boot scripts require local7
    #
    local0,local1.* -/var/log/localmessages
    local2,local3.* -/var/log/localmessages
    local4,local5.* -/var/log/localmessages
    local6,local7.* -/var/log/localmessages
    [/code:1:ec2618e672]
    dit laatste heb ik er dus aan toegevoegd
    [code:1:ec2618e672]
    *.=info;*.=notice /usr/adm/messages
    *.=debug /usr/adm/debug
    kern.info /dev/console
    kern.info /dev/tty6
    kern.info /usr/adm/kerninfo
    kern.info -/var/log/info[/code:1:ec2618e672]
  • de kernel was nog niet bij mij gecompileerd dus dat heb ik eerst gedaan, maar nu krijg ik bij make dep deze error

    [code:1:f7e28da11b]make dep
    gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o scripts/mkdep scripts/
    mkdep.c
    In file included from /usr/include/bits/posix1_lim.h:126,
    from /usr/include/limits.h:144,
    from /usr/lib/gcc-lib/i486-suse-linux/3.3/include/limits.h:122,
    from /usr/lib/gcc-lib/i486-suse-linux/3.3/include/syslimits.h:7
    ,
    from /usr/lib/gcc-lib/i486-suse-linux/3.3/include/limits.h:11,
    from scripts/mkdep.c:35:
    /usr/include/bits/local_lim.h:36:26: linux/limits.h: No such file or directory
    scripts/mkdep.c: In function `add_path':
    scripts/mkdep.c:221: error: `PATH_MAX' undeclared (first use in this function)
    scripts/mkdep.c:221: error: (Each undeclared identifier is reported only once
    scripts/mkdep.c:221: error: for each function it appears in.)
    scripts/mkdep.c:221: warning: unused variable `resolved_path'
    make: *** [scripts/mkdep] Error 1
    [/code:1:f7e28da11b]
    kom maar op met alle suggesties :)
  • ik denk dat je voor dit soort vragen beter even naar NedLinux kunt gaan, daar lopen mannetjes genaamd René en vooral DirkGerrits rond die dit soort dingen dromend doen :P
  • Hij geeft telkens de melding "undeclared identifier" ?

    dan ben je gewoon een header file vergeten te includen. zoek op waar deze zich bevinden in de man-pages en je bent er.

    Heb je ze zelf gemaakt, check dan je makefile om te kijken of je je libs wel meelinkt.
  • [quote:14ebeabff0="w.roosenburg"]Hij geeft telkens de melding "undeclared identifier" ?

    dan ben je gewoon een header file vergeten te includen. zoek op waar deze zich bevinden in de man-pages en je bent er.

    Heb je ze zelf gemaakt, check dan je makefile om te kijken of je je libs wel meelinkt.[/quote:14ebeabff0]
    Hoi roosenburg, na de installatie van suse 8.2, is het dan nog eigelijk nodig dat je een kernel versie installeerd of zit dat ook in de installatie ?

    Oh en bij de laatste foutmelding in make dep heb ik inderdaad in de script mkdep.c een header toegevoegd [code:1:14ebeabff0]include <linux/limits.h>[/code:1:14ebeabff0] geloof ik, onder [code:1:14ebeabff0]include <limits.h>[/code:1:14ebeabff0] ik las dit ergens op het internet. Maar helaas het werkt niet en ik zou ook niet weten wat ik nou zelf moet includen, de script zat in de installatie, ik heb het niet zelf gemaakt :-?
  • Staat de file limits.h wel op je schijf? Kijk daar eerst eens naar.

    En volgens mij installeert SuSe 8.2 niet standaard de kernel source op je hd.

    //edit

    Die PATH_MAX komt idd uit limits.h. Zoek eens op of je die fysiek op schijf hebt staan. Zo ja, dan kun je gcc er naar toe verwijzen met de optie [code:1:2dd80a8bfb]–include-dir=[/code:1:2dd80a8bfb]
  • Met de installatie via www.kernel.org zou die limits.h er toch ook mee geleverd moeten zijn of moet ik het nog ergens anders zoeken ?Ik heb op die site alleen linux-2.4.9.tar.gz gedownload. Ik dacht dat alles daarmee wel geinstalleerd zou zijn. Verder heb ik dus suse 8.2
    Als ik suse 8.0 zou hebben, zou ik deze problemen eigelijk ook nog krijgen ?
    Ik ben maar een linux leek maar ik leer weer eens elke dag wat bij merk ik. :)
  • je hebt nog steeds geen antwoord gegeven op de vraag :lol:

    Waar staat die file bij jou op schijf?

    Doe dus even

    [quote:d9bbe8e8ff]
    find / | grep limits.h
    [/quote:d9bbe8e8ff]

    Laat het weten ;)
  • sorrie :oops: ben ook maar een linux kneus

    uitvoer[code:1:bf29b2a9d1]/usr/lib/perl5/site_perl/5.8.0/i586-linux-thread-multi/Tk/pTk/compat/limits.h
    /usr/lib/gcc-lib/i486-suse-linux/3.3/include/syslimits.h
    /usr/lib/gcc-lib/i486-suse-linux/3.3/include/limits.h
    /usr/src/linux-2.4.7/include/linux/limits.h
    /usr/src/linux-2.4.7/include/asm-arm/limits.h
    /usr/share/doc/packages/wine/doc-html/dbg-limits.html
    /usr/include/limits.h

    oot/linux/include/linux/limits.h

    oot/linux/include/asm-arm/limits.h
    [/code:1:bf29b2a9d1]

    mmm versie 2.4.7 heeft het wel en versie 2.4.9 niet
  • Nee hoor ;)

    Hmmm je hebt de header files dus wel. Raar :o

    Hier struikel ik over:

    [quote:b2f96315dc]
    /usr/include/bits/local_lim.h:36:26: linux/limits.h: No such file or directory
    [/quote:b2f96315dc]

    Open die .h eens en kijk wat die include?

    Of probeer eens te compileren met

    [code:1:b2f96315dc]
    –include-dir=/usr/lib/gcc-lib/i486-suse-linux/3.3/include
    [/code:1:b2f96315dc]

    Ik kwam in een ander project ook deze meldingen tegen, ik moest toen hercompileren met deze optie om zo de limits.h uit de compiler-lib mee te linken. Dat hielp overigens wel.

    Wanneer moet je het inleveren trouwens? :)
  • Zal ik de zelf toegevoegde code [code:1:8ebade0b60]linux/limits.h[/code:1:8ebade0b60] in de script van mkdep. h dan maar weer weghalen ? want volgens mij komt het daar vandaan.

    dit is nu wat mkdep.c wel include
    [code:1:8ebade0b60]#include <ctype.h>
    #include <fcntl.h>
    #include <limits.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>

    #include <sys/fcntl.h>
    #include <sys/mman.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    [/code:1:8ebade0b60]

    Verder geeft het dezelfde eroor alsik eht weglaat of erbij laat

    Hoe en waar kun je controleren of je de header files eigelijk ook daadwerkelijk hebt ?
    Dalijk heb ik ze geeneens ….
    Of hoort het gewoon meegeleverd te worden als je een kernel installeerd uit pakt en compileerd ?


    Ik moest het allang al inleveren maar ik doe er lekker een hele zomer vakantie rustig over, zolang ik nog geen stageplek heb heeft het tochageen zin om dit haastig in te leveren :)
    Als ik al wel een plek had was ik wat sneller :D
  • waar en hoe moet ik de code pziez in tikken op m'n konsole om deze code mee te kunnen compileren?
    [code:1:0b3c568038]
    –include-dir=/usr/lib/gcc-lib/i486-suse-linux/3.3/include
    [/code:1:0b3c568038]
  • Ehmmm jij bent met een project bezig en weet niet hoe je moet compileren? :o

    je moet je makefile aanpassen, daar staat het allemaal in. Maar als je niet weet hoe je moet compileren, hoe verwacht je dan dit af te krijgen?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.