我正在尝试为显示器编写一个内核模块,但我正在努力学习基础知识。如果我尝试分离源文件并通过 -objs 在 Makefile 中定义它,内核模块将被编译、加载,但不执行任何操作。
代码:
驱动程序.c
#define LINUX
#include <linux/module.h>
#include <linux/kernel.h>
#include "display.h"
int init_module(void) {
printk(KERN_INFO "module registered\n");
init_display();
return 0;
}
void cleanup_module(void) {
printk(KERN_INFO "module unregistered\n");
}
显示.h
#ifndef DISPLAY_H
#define DISPLAY_H
void init_display (void);
#endif
显示.c
#include "display.h"
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_ALERT */
void init_display (void) {
printk(KERN_INFO "initialize display\n");
}
生成文件
obj-m := driver.o
driver-objs := driver.o display.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
如果没有 Makefile 中的 include 和 driver-objs,我会得到 KERN_INFO(加载、卸载)输出,内核日志是空的。
任何方向,我做错了什么?