gpt4 book ai didi

c - Linux 生成文件示例

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:53 27 4
gpt4 key购买 nike

您好,我是 Linux 的新手,正在通过一个示例进行操作 http://www.linuxforu.com/2010/12/writing-your-first-linux-driver/我正在使用 Ubuntu 12.04 并创建了名为 ofd.c 的 C 代码文件(见下文)并保存在我在 ~/Development/MyProgs/myHelloWorldLinuxModule/v2 创建的目录中。我还在同一目录中创建了一个 Makefile(见下文)。
当我键入 make 时,我希望看到在同一目录中生成一个 .ko 文件,但我得到的只是一条消息,上面写着“Nothing to be done for default”

我不是很懂makefile

我应该在某处定义 KERNELRELEASE 吗,

默认情况下该行实际上在做什么,这是否意味着在内核目录和工作目录上执行 make 还是我应该将我的代码放在特定的地方。

没有 usr/src/linux 而是/usr/src/linux-headers-3.8.0-29,所以我更改了这个,对吗? (虽然似乎没有任何区别)。

如有任何帮助,我们将不胜感激。

代码:

/* ofd.c – Our First Driver code */
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>

static int __init ofd_init(void) /* Constructor */
{
printk(KERN_INFO "Namaskar: ofd registered");
return 0;
}

static void __exit ofd_exit(void) /* Destructor */
{
printk(KERN_INFO "Alvida: ofd unregistered");
}

module_init(ofd_init);
module_exit(ofd_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Anil Kumar Pugalia <email_at_sarika-pugs_dot_com>");
MODULE_DESCRIPTION("Our First Driver");`

生成文件......

# Makefile – makefile of our first driver

# if KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq (${KERNELRELEASE},)
obj-m := ofd.o
# Otherwise we were called directly from the command line.
# Invoke the kernel build system.
else
KERNEL_SOURCE := /usr/src/linux
PWD := $(shell pwd)
default:
${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

clean:
${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif

最佳答案

错误是由于您的 makefile 的命名约定无法找到源代码首先通过键入 uname -a

检查正在运行的内核

然后转到cd/usr/src/

然后检查你的 linux 源代码名称

例如

uname -a
Linux vinay-VirtualBox 3.2.0-50-generic-pae #76-Ubuntu SMP 2013 年 7 月 9 日星期二 19:24:55 UTC i686 i686 i386 GNU/Linux

这里它的源代码名称是linux-headers-3.2.0-50-generic-pae

所以在你的 Makefile 中你需要像这样给出正确的名字

KERNEL_SOURCE :=/usr/src/linux-headers-3.2.0-50-generic-pae

为了避免上述问题,试试这个 Makefile

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := ofd.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

这里uname -a解决了问题

关于c - Linux 生成文件示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com