摘自B站地址:Linux: 写一个Helloworld级别内核驱动编译并加载的详细步骤_哔哩哔哩_bilibili
1、安装环境依赖
sudo apt-get install build-essential linux-headers-$(uname -r)
2、HelloWorld驱动
#include <linux/kernel.h> /* printk */
#include <linux/init.h> /* __init __exit */
#include <linux/module.h> /* module_init() */
static int __init hello_init(void)
{
printk("Hello World\n");
return 0;
}
static void __exit hello_exit(void)
{
printk("Goodbye World\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("WQQ");
3、编写Makefile文件
obj-m += hello.o
4、编译成KO文件
sudo make -C /lib/modules/$(uname -r)/build M=`pwd` modules
5、安装/查看/卸载驱动
insmod命令安装内核模块
sudo insmod hello.ko
lsmod查看当前运行的内核模块(用grep过滤)
lsmod | grep -Ei hello
rmmod卸载内核模块
sudo rmmod hello
dmesg查看内核日志(可用grep过滤)
dmesg
dmesg | grep -Ei hello
注:其中的第3点编译Makefile文件,看板子配套视频中讲解的是编写如下代码,却无法使用:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR=<内核路径>
CROSS_COMPILE=<编译工具路径>
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_ COMPILE=$(CROSS_COMPILE)
clean:
rm-rf *.ko *.o *.mod.o *.mod.c *.symwers modul* .hello.* .tmp_versions .*.*.cmd
help:
@echo "make KDIR=<you kernel path> CROSS_COMPILE=<your CROSS_COMPILE>"
endif