Kirjoittaja Aihe: kernel driverien ohjelmointi  (Luettu 3260 kertaa)

matsukan

  • Käyttäjä
  • Viestejä: 2148
    • Profiili
kernel driverien ohjelmointi
« : 17.12.08 - klo:11.29 »
Moi,

tässä olen yrittänyt kääntää ubuntu 8.10:ssa tämmöistä esimerkki driveria kernelin puolelle mutta kääntämienn loppuu siihen että header tiedostoja ei löydy.


#include <linux/kernel.h>       /* Needed for KERN_INFO */
#include </linux/module.h>       /* Needed by all modules */
#include </linux/init.h>         /* Needed for the macros */

//static int __init hello_start(void)
static int __init hello_start(void)
{
printk(KERN_INFO "Loading hello module...\n");
printk(KERN_INFO "Hello world\n");
return 0;
}

//static void __exit hello_end(void)
static void hello_end(void)
{
printk(KERN_INFO "Goodbye Mr.\n");
}

module_init(hello_start);
module_exit(hello_end);



ja tässä make file.


obj-m = nothing.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
       
     

Tämmöistä virheilmoutusta generoituu :

 ---   > make nothing
cc     nothing.c   -o nothing
nothing.c:2:60: error: /linux/module.h: No such file or directory
nothing.c:3:61: error: /linux/init.h: No such file or directory
nothing.c:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘hello_start’

Oikeita header fileitä ei löydetä mutta millä tavalla sitten löytyy? include määritteessä olevista kauttaviivoista ei ole apua taikka haittaa.
Pohjois-pohjanmaa
-- motto:  backupin tarve huomataan aina liian myöhään

lompolo

  • Käyttäjä
  • Viestejä: 852
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #1 : 17.12.08 - klo:12.08 »
Asenna kerneliäsi vastaavat headerit. Esim.

Koodia: [Valitse]
sudo apt-get install linux-headers-2.6.27-7-generic

matsukan

  • Käyttäjä
  • Viestejä: 2148
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #2 : 17.12.08 - klo:12.25 »
tulos:

linux-headers-2.6.27-9-generic on jo uusin versio.
Pohjois-pohjanmaa
-- motto:  backupin tarve huomataan aina liian myöhään

LassiLeevi

  • Käyttäjä
  • Viestejä: 38
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #3 : 17.12.08 - klo:12.43 »
tulos:

linux-headers-2.6.27-9-generic on jo uusin versio.


Olisiko niin, että tarttee asentaa koko kernelin lähdekoodit, eli linux-source paketti.

timsku

  • Käyttäjä
  • Viestejä: 225
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #4 : 17.12.08 - klo:12.44 »
Koodia: [Valitse]
uname -rPitäisi tulostaa: 2.6.27-9-generic

Kannattaa vielä tarkistaa konsolissa:
Koodia: [Valitse]
sudo updatedb && locate /linux/module.h
Jos edelliset kunnossa, vika on varmaan viittauksessa headereihin...En muista enää suoralta kädeltä miten noihin viitattiin... :-[



matsukan

  • Käyttäjä
  • Viestejä: 2148
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #5 : 17.12.08 - klo:21.46 »
Moi,
uname :
2.6.27-9-generic

tein tuon sudo ja locate jutut:

/usr/src/linux-headers-2.6.27-7/include/linux/module.h
/usr/src/linux-headers-2.6.27-7-generic/include/linux/module.h
/usr/src/linux-headers-2.6.27-9/include/linux/module.h
/usr/src/linux-headers-2.6.27-9-generic/include/linux/module.h

Näyttää siltä että include viittausket on pielessä:

p:~$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.2-1ubuntu11' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu11)

Tunnustan, olen asentanut  :-[ c++ kääntäjän ja tämä on sotkenut mutta miten korjata asia?
Pohjois-pohjanmaa
-- motto:  backupin tarve huomataan aina liian myöhään

timsku

  • Käyttäjä
  • Viestejä: 225
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #6 : 18.12.08 - klo:00.45 »
Olisiko kyseessä kuitenkin pelkkä kirotusvireh ?

Muuta:
#include </linux/module.h>

Muotoon:
#include <linux/module.h>

Ja sama korjaus seuraavalle...Luulisi toimivan koska ei herjaa kernel.h:sta mitään...

matsukan

  • Käyttäjä
  • Viestejä: 2148
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #7 : 18.12.08 - klo:09.58 »
Kokeilin noita ilman ja kauttaviivan kanssa joten tämä ei auta onglemaan. Tästä ei kenkä purista.

ja mielestäni tuo kernel.h löytyy myös muualta ( en nyt ole varma mutta tarkistin /usr/include/c++/4.3/include hakemiston ja sieltä löytyi kernel.h muttei init.h module.h tiedostoja).

Ajan varmuuden vuoksi tuon locate tuolle kernel.h:lle tänään kun pääsen linukka puoleen kiinni.

Onko turvallista poistaa ja uudelleenasentaa nuo kernelin headerit /usr/-hakemistosta?
« Viimeksi muokattu: 18.12.08 - klo:10.01 kirjoittanut syrtek66 »
Pohjois-pohjanmaa
-- motto:  backupin tarve huomataan aina liian myöhään

matsukan

  • Käyttäjä
  • Viestejä: 2148
    • Profiili
Vs: kernel driverien ohjelmointi
« Vastaus #8 : 18.12.08 - klo:21.19 »
mmh.

nothing.c:2:60: error: linux/module.h: No such file or directory
nothing.c:3:60: error: linux/init.h: No such file or directory

Toisaalta locate kernel.h antoi tämän tuloksen:

/usr/include/linux/kernel.h
/usr/src/linux-headers-2.6.27-7/include/asm-mips/sn/mapped_kernel.h
/usr/src/linux-headers-2.6.27-7/include/linux/kernel.h
/usr/src/linux-headers-2.6.27-7/include/linux/start_kernel.h
/usr/src/linux-headers-2.6.27-7/include/sound/seq_kernel.h
/usr/src/linux-headers-2.6.27-7-generic/include/config/debug/kernel.h
/usr/src/linux-headers-2.6.27-7-generic/include/config/lock/kernel.h
/usr/src/linux-headers-2.6.27-7-generic/include/linux/kernel.h
/usr/src/linux-headers-2.6.27-7-generic/include/linux/start_kernel.h
/usr/src/linux-headers-2.6.27-9/include/asm-mips/sn/mapped_kernel.h
/usr/src/linux-headers-2.6.27-9/include/linux/kernel.h
/usr/src/linux-headers-2.6.27-9/include/linux/start_kernel.h
/usr/src/linux-headers-2.6.27-9/include/sound/seq_kernel.h
/usr/src/linux-headers-2.6.27-9-generic/include/config/debug/kernel.h
/usr/src/linux-headers-2.6.27-9-generic/include/config/lock/kernel.h
/usr/src/linux-headers-2.6.27-9-generic/include/linux/kernel.h
/usr/src/linux-headers-2.6.27-9-generic/include/linux/start_kernel.h

Oliskos tästä apua?
http://www.faqs.org/docs/Linux-HOWTO/GCC-HOWTO.html#INDEX.17

muokkaus: Komentoon:
usr/include# ln -s ../src/linux-headers-2.6.27-9-generic/include/linux .

tulee:

ln: creating symbolic link `./linux': File exists



« Viimeksi muokattu: 18.12.08 - klo:23.51 kirjoittanut syrtek66 »
Pohjois-pohjanmaa
-- motto:  backupin tarve huomataan aina liian myöhään