Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: matsukan - 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.
-
Asenna kerneliäsi vastaavat headerit. Esim.
sudo apt-get install linux-headers-2.6.27-7-generic
-
tulos:
linux-headers-2.6.27-9-generic on jo uusin versio.
-
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.
-
uname -r
Pitäisi tulostaa: 2.6.27-9-generic
Kannattaa vielä tarkistaa konsolissa:
sudo updatedb && locate /linux/module.h
Jos edelliset kunnossa, vika on varmaan viittauksessa headereihin...En muista enää suoralta kädeltä miten noihin viitattiin... :-[
-
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?
-
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...
-
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?
-
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