繁体   English   中英

Linux设备驱动程序Ed 3代码编译错误和Linux头文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM