Linux驱动hello入门实践

新建Linux驱动hello入门实践这样一个目录,里面新建hello.c 和Makefile文件
hello.c 如下:
#include <linux/init.h>
#include <linux/module.h>

static int __init hello_init(void) {
printk(“Hello, world\n”);
return 0;
}

static void __exit hello_exit(void) {
printk(KERN_ALERT “Goodbye, cruel world\n”);
}

MODULE_LICENSE(“Dual BSD/GPL”);

module_init(hello_init);
module_exit(hello_exit);

Makefile如下
ifneq ((KERNELRELEASE),)objm:=hello.oelseKERNELDIR?=/lib/modules/(KERNELRELEASE),) obj-m := hello.o else KERNELDIR ?= /lib/modules/(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C (KERNELDIR)M=(KERNELDIR) M=(PWD) modules
endif

直接make
然后insmod ./hello.ko
再rmmod hello
Linux驱动hello入门实践
Linux驱动hello入门实践在虚拟机上insmod ./hello.ko没什么显示
dmesg倒是可以

Linux驱动hello入门实践
cat /proc/sys/kernel/printk
echo “7 4 1 7” > /proc/sys/kernel/printk
Linux驱动hello入门实践
7 4 1 7
(1)第一个参数 7表示小于7优先级消息才会被输出到控制台。
(2)第二个参数4 表示默认的printk消息优先级别,即printk(“hell world”);优先级为4, 由于4<7,故可以被打印到控制台。
(3)第三个参数1 表示可接收的最高优先级,当printk disable控制台输出时,设置第一个参数为1,但是,从内核等级来看,还有优先级0,这个是printk*优先级,一般用于内核严重消息打印。比如内存错误或者 watchdog reset.也可以设置第一个和第三个参数为0
(4)第四个参数7 默认控制台优先级,即第一个参数的默认优先级。
改成7414我重新make还是不行但是感觉问题就在这。
Linux驱动hello入门实践