我正在尝试学习 Linux 并使用我的简单驱动程序编译内核。
不幸的是,我在日志中没有看到驱动程序,并且未创建编译文件。
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
/* Module Init function */
static int __init hello_world_init(void)
{
printk(KERN_INFO "This is the Simple Module\n");
printk(KERN_INFO "Kernel Module Inserted Successfully...\n");
return 0;
}
/* Module Exit function */
static void __exit hello_world_exit(void)
{
printk(KERN_INFO "Kernel Module Removed Successfully...\n");
}
module_init(hello_world_init);
module_exit(hello_world_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("A simple hello world driver");
MODULE_VERSION("2:1.0");
user@user-VirtualBox:~/linux/drivers/misc$ ls | grep answer
answer.c
生成文件
user@user-VirtualBox:~/linux/drivers/misc$ nano Makefile
odj-$(CONFIG_ANSWER) += answer.o
Kconfig
user@user-VirtualBox:~/linux/drivers/misc$ nano Kconfig
config ANSWER
tristate "Add the answer"
help
my module
.配置
# Misc devices
CONFIG_ANSWER=y
编译内核
$ sudo make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
我在命令输出中没有看到我的文件。 驱动程序也未编译。我将驱动程序添加到菜单中;显示在.config中。
我尽可能简化了驱动程序。如果其中有错误,它会出现在输出中吗?
我也尝试过更改权限。
-rw-rw-r-- 1 user user 955 Jul 31 17:52 answer.c
我做错了什么?
您的 makefile 中有一个拼写错误。
odj-$(CONFIG_ANSWER) +=answer.o
应该是
obj-$(CONFIG_ANSWER) += answer.o