[英]Linux device driver ed 3 code compilation errors and Linux header files
我试图在开始使用本书之前从Linux设备驱动程序(ed 3(ldd3))中获取示例,以便我可以使用一组可用的示例。...我得到了以下内容错误(在Debian压缩和Crunchbang Linux中看到错误):
inp.c:33:20: error: [u]asm/io.h:[/u] No such file or directory
当我查看makefile时,我发现了这个(我认为是问题所在):
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
INCLUDEDIR = $(KERNELDIR)/include
/ lib / modules / uname -r
/ build的内容,它是/usr/src/linux-headers-2.6.39-bpo.2-486/的链接
$ 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-common/下找到了所需的文件,在/usr/src/linux-headers-2.6.39-bpo下缺少了asm / io.h文件。 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
我是否必须安装任何软件包才能在该目录中获取文件...我已经安装了linux-headers- uname -r
软件包(在Debian和Crunchbang中)...在gnewsense中,我在/ lib /中找到了文件modules / $(shell uname -r)/ build ...但是它是一个较旧的内核...所以不确定Linux下的目录结构是否已更改...还是特定于发行版的...请让我知道如何做我开始进行编译。...我对Makefile不太满意,所以如何更改makefile以便它可以在其他目录中查找头文件。
谢谢,asp5
首先,LDD3已经很老了,如果头文件可能已经四处移动,我也不会感到惊讶。 哈维尔·马丁内斯·卡尼利亚斯(Javier Martinez Canillas)更新了LDD3源代码,以获取更多现代内核 。
在进行进一步调查时,我发现asm
符号链接已经中断了一段时间。 (出于某种原因, io.h
似乎已存储在asm-generic/
中。)以防万一, 我在Ubuntu上针对断开的符号链接提交了错误报告 。
无论值多少钱,我都可以构建一个引用<asm/io.h>
或 <asm-generic/io.h>
(尽管正如Hasturkun提醒我的那样,您不应该直接使用asm-generic
):
$ 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'
$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.