Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: eigen driver programmeren  (gelezen 2199 keer)

liquid_ice

  • Gast
eigen driver programmeren
« Gepost op: 2009/05/26, 22:33:54 »
Ik ben het boek "Linux Device drivers" van O'Reilly aan het doornemen om m'n eerste eigen linux driver te kunnen maken.

In het boek staat een beetje code van een Hello_world-driver.
Nou moet ik de code bouwen en een .mod.o en een .ko file krijgen, maar dat lukt me niet.

als ik gewoon gcc aanroep krijg ik dit:

rode@rode-laptop:~/Desktop/drivers/Hello world$ gcc ./Hello.c
./Hello.c:1:24: error: linux/init.h: No such file or directory
./Hello.c:2:26: error: linux/module.h: No such file or directory
./Hello.c:3: error: expected declaration specifiers or ‘...’ before string constant
./Hello.c:3: warning: data definition has no type or storage class
./Hello.c: In function ‘hello_init’:
./Hello.c:7: error: ‘KERN_ALERT’ 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: expected ‘)’ before string constant
./Hello.c: In function ‘hello_exit’:
./Hello.c:13: error: ‘KERN_ALERT’ undeclared (first use in this function)
./Hello.c:13: error: expected ‘)’ before string constant
./Hello.c: At top level:
./Hello.c:16: warning: data definition has no type or storage class
./Hello.c:16: warning: parameter names (without types) in function declaration
./Hello.c:17: warning: data definition has no type or storage class
./Hello.c:17: warning: parameter names (without types) in function declaration

ook met dit commando krijg ik zo goed als dezelfde meldingen:
rode@rode-laptop:~/Desktop/drivers/Hello world$ gcc -DMODULE -D__KERNEL__ -O6 -c Hello.c

en van een andere site had ik dit commando gevist, maar ook dat werkte net:
rode@rode-laptop:~/Desktop/drivers/Hello world$ make -C /usr/src/linux-headers-2.6.29.3-rode/ SUBDIRS=$PWD Hello.c
make: Entering directory `/usr/src/linux-headers-2.6.29.3-rode'
/usr/src/linux-headers-2.6.29.3-rode/arch/x86/Makefile:41: /usr/src/linux-headers-2.6.29.3-rode/arch/x86/Makefile_32.cpu: No such file or directory
make: *** No rule to make target `/usr/src/linux-headers-2.6.29.3-rode/arch/x86/Makefile_32.cpu'.  Stop.
make: Leaving directory `/usr/src/linux-headers-2.6.29.3-rode'

wat doe ik fout??

PS: de code is:
#include <linux/init.h>
#include <linux/module.h>
MODULE_License("Dual BSD/GPL");

static int hello_init(void)
{
  printk(KERN_ALERT "Hello world\n");
  return 0;
}

static void hello_exit(void)
{
  printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);
« Laatst bewerkt op: 2009/05/26, 22:35:53 door liquid_ice »

Re: eigen driver programmeren
« Reactie #1 Gepost op: 2009/05/27, 07:15:35 »
Welkom op ons forum :)

Installeer het pakket build-essential eens. Dit bevat allerlei software die nodig is om te compileren.

liquid_ice

  • Gast
Re: eigen driver programmeren
« Reactie #2 Gepost op: 2009/05/27, 08:48:32 »
Het build-essential pakket heb ik geïnstalleerd.

Ik heb omder ubuntu een verse kernel gedownload, deze gecompileerd en nu draaiende.

Ook de kernel header files heb ik.
en de files init.h en module.h staan op m'n systeem.

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: eigen driver programmeren
« Reactie #3 Gepost op: 2009/05/30, 00:35:29 »
Je mist het include path, maar je moet niet rechtstreeks met gcc compileren in dit geval..
Lees een beetje verder in het boek.. "Compiling modules"
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

liquid_ice

  • Gast
Re: eigen driver programmeren
« Reactie #4 Gepost op: 2009/06/01, 13:27:37 »
Het compileren lukt gelukkig, ook kan ik met insmod en rmmod de module laden en verwijderen.

Alleen komen de printk messages niet op het scherm, ook al gebruik ik KERN_ALERT of zelfs KERN_EMERG


Re: eigen driver programmeren
« Reactie #5 Gepost op: 2009/06/01, 13:48:41 »
je kijkt wel in het systeemlogboek (dmesg)?

liquid_ice

  • Gast
Re: eigen driver programmeren
« Reactie #6 Gepost op: 2009/06/01, 13:56:49 »
dmesg?
ik dacht dat het /proc/kmesg was  ???

Maar ik zie m'n logging inderdaad wel staan in dmesg
« Laatst bewerkt op: 2009/06/01, 13:58:59 door liquid_ice »

Re: eigen driver programmeren
« Reactie #7 Gepost op: 2009/06/01, 14:00:48 »
Je moet daar niet zitten, dan zegt het boek het verkeerd ;) In /var/log/ staan alle systeemlogboeken. Het commando dmesg toont /var/log/dmesg. Via Systeem -> Beheer -> Logbestand-weergave kun je je logboeken grafisch beheren.

liquid_ice

  • Gast
Re: eigen driver programmeren
« Reactie #8 Gepost op: 2009/06/01, 15:28:21 »
Maar hoe krijg ik die output op m'n console??

ik heb KERN_DEBUG, KERN_ALERT en KERN_EMERG geprobeerd, maar geen effect op m'n console

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: eigen driver programmeren
« Reactie #9 Gepost op: 2009/06/01, 15:47:22 »
door dmesg op de console uit te voeren..?
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Re: eigen driver programmeren
« Reactie #10 Gepost op: 2009/06/01, 15:56:22 »
Citaat van: mezelf
...het commando dmesg toont /var/log/dmesg...

Offline JanClaeys

  • Lid
Re: eigen driver programmeren
« Reactie #11 Gepost op: 2009/06/11, 00:51:33 »
Maar hoe krijg ik die output op m'n console??

ik heb KERN_DEBUG, KERN_ALERT en KERN_EMERG geprobeerd, maar geen effect op m'n console
Laten de relevante settings die je o.a. met sysctl kan zetten die berichten toe op je console?
(Ik weet ze niet zo uit m'n hoofd, maar zoeken op 'sysctl' zal je misschien wel helpen.)
Jan Claeys
Ubuntu-nl IRC team - Ubuntu-be LoCoTeam Contact