Linux 驱动 - HelloWorld
开发环境:
- Ubuntu 22.04
uname -r
查看source版本sudo apt install linux-source-xxxx
其他依赖:
- build-essential
- kernel-package
- gcc
- make
- kernel-source
- kernel-headers
- libncurses-dev
- libssl-dev
- libelf-dev
Hello World
hello.c
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>MODULE_LICENSE("GPL");
MODULE_AUTHOR("Andy");
MODULE_VERSION("1.0");
MODULE_DESCRIPTION("First test module!");// 初始化
// KERN_ALERT设定printk日志级别,但X86无效
static int __init hello_init(void){printk(KERN_ALERT "Hello, Andy!");return 0;
}
// 退出
static void __exit hello_exit(void){printk(KERN_ALERT "Goodbye, Andy!");
}
// 调用函数
module_init(hello_init);
module_exit(hello_exit);
Makefile:
# ifneq ($(KERNELRELEASE),)
# mymodule-bojs := hello.o
PWD := $(shell pwd)
KERNELDIR = /lib/modules/$(shell uname -r)/buildobj-m := hello.oall:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c
然后:
make
make clean
就会编译出来对应的ko文件。
模块使用:
sudo insmod hello.ko
modinfo hello.ko
sudo dmesg -c
查看内核logsudo rmmod hello