2011-12-07 24 views
2

Linuxデバイスドライバ、ed 3(ldd3)のサンプルを入手しようとしていますが、本書の作業を開始する前に作業しています私が思うに、私はこれを見つけたメイクファイルを見Linuxデバイスドライバ3コードのコンパイルエラーとLinuxヘッダーファイル

inp.c:33:20: error: [u]asm/io.h:[/u] No such file or directory 

が(ある:私は使用することができます例が....私は、次のエラー(見DebianのスクイズでエラーともCrunchbang Linux)を取得しています問題):

KERNELDIR ?= /lib/modules/$(shell uname -r)/build 
INCLUDEDIR = $(KERNELDIR)/include 

/lib/modules/uname -r/build wの内容HICHは

$ uname -r 
    2.6.39-bpo.2-486 

$ ls /lib/modules/`uname -r`/build 
arch include Makefile Module.symvers scripts 

$ ls /lib/modules/`uname -r`/build/include 
config generated linux 

必要なファイルを持っていません探している作るディレクトリを/usr/src/linux-headers-2.6.39-bpo.2-486/するためのリンクです。 /usr/src/linux-headers-2.6.39-bpo.2-common/とasm/io.hファイルが見つからない@ /usr/src/linux-headers-2.6.39-bpoというファイルが見つかりました。 2-共通//ASM-ジェネリック/

$ ls /usr/src/linux-headers-2.6.39-bpo.2-common/ 
arch include Kbuild Makefile scripts 

$ ls /usr/src/linux-headers-2.6.39-bpo.2-common/include/ 
acpi   crypto Kbuild linux  media net  rdma scsi staging trace xen 
asm-generic drm  keys math-emu mtd pcmcia rxrpc sound target video 

は、私はすでにDebianとの両方で(のlinux-ヘッダなど uname -rパッケージをインストールしている...私はそのディレクトリ内のファイルを取得するために任意のパッケージをインストールする必要がありますか含めますCrunchbang)gnewsenseでは、/ lib/modules/$(shell uname -r)/ buildのファイルを見つけましたが、古いカーネルでした。それとも、ディストリビューション特有のものなのでしょうか...私はどのようにコンパイルするのか教えてください...私はMakefileにはあまりよくありません。どうすればmakefileを変更して、ヘッダーファイルを探すことができますか?他のディレクトリ....

最初のおかげで、 asp5

+0

だけで簡単なメモ:Iドンあなたの '/ lib/modules/$(uname -r)/ build /'ディレクトリが正しく移植されているとは思われません。適切なパッケージがインストールされていますか? 'ls/lib/modules/$(uname -r)/ build | wc -l'は "27"と表示されます。 '.../include /'は '.../include/asm'(' asm-x86'へのシンボリックリンク)を含む_24_項目を持っています。 – sarnold

+0

@sarnold:私はlinux-headers-'uname -r'パッケージをインストールしました。Debianとデリバティブの中に必要なすべてのヘッダをインストールする必要があります。どのディストリビューションを使用しているのか、カーネルのバージョンを教えてください。 ..私は 'gnewsense'ディストリビューションを使用すると、そのディレクトリに多くの項目を見ることができます...残念ながら私の新しいノートパソコンでそれを得ることができません...とにかく私は適切なパッケージがインストールされているようだが、コンパイルは行きますスムーズに...ありがとう。 – asp5

答えて

1

まず、物事は、LDD3はかなり古く、ヘッダファイルが周りに移動している可能性がある場合、私は驚かないだろう。 Javier Martinez Canillas has updated the LDD3 sources for more modern kernels

これをもう少し調べると、asmシンボリックリンクがしばらく破損していることがわかりました。 (io.hは何らかの理由でasm-generic/に格納されているように見えます)あなたが興味がある場合は、壊れているシンボリックリンクのI filed a bug report at Ubuntu。 (Hasturkunが私を連想させるとして、あなたが直接asm-genericを使うべきではありませんが)、それは価値があるものは何でも、私は<asm/io.h>または<asm-generic/io.h>のいずれかを参照するモジュールをビルドすることができますについては

$ cat > Makefile 
obj-m = foo.o 
$ cat > foo.c 
#include <linux/module.h> 
#include <linux/sched.h> 
#include <asm/io.h> 
int init_module() { return 0; } 
void cleanup_module() { } 
$ make -C /lib/modules/`uname -r`/build M=$PWD 
make: Entering directory `/usr/src/linux-headers-2.6.38-12-generic' 
    LD  /home/sarnold/tmp/module/built-in.o 
    CC [M] /home/sarnold/tmp/module/foo.o 
    Building modules, stage 2. 
    MODPOST 1 modules 
    CC  /home/sarnold/tmp/module/foo.mod.o 
    LD [M] /home/sarnold/tmp/module/foo.ko 
make: Leaving directory `/usr/src/linux-headers-2.6.38-12-generic' 
$ cat > foo.c 
#include <linux/module.h> 
#include <linux/sched.h> 
#include <asm-generic/io.h> 
int init_module() { return 0; } 
void cleanup_module() { } 
$ make -C /lib/modules/`uname -r`/build M=$PWD 
make: Entering directory `/usr/src/linux-headers-2.6.38-12-generic' 
    CC [M] /home/sarnold/tmp/module/foo.o 
    Building modules, stage 2. 
    MODPOST 1 modules 
    CC  /home/sarnold/tmp/module/foo.mod.o 
    LD [M] /home/sarnold/tmp/module/foo.ko 
make: Leaving directory `/usr/src/linux-headers-2.6.38-12-generic' 
$ 
+0

'asm'のincludeディレクトリは' arch/somearch/include/asm'(somearchはx86、armなど)の下にあります。AFAICTはincludeパスに含まれていなければなりません。通常は 'asm-generic'を参照するべきではありません。 – Hasturkun

+0

@Hasturkun:そのリマインダーのおかげで、更新された – sarnold

+0

@sarnold:Javier Martinezのアップデートされたソースコードは問題なくスムーズにコンパイルされました...リンクありがとうございました... – asp5

関連する問題