Ubuntu简单驱动开发
uname- 查看当前ubutnu系统使用的编译工具
hu@hu-virtual-machine:~/ko_test$ uname -a
Linux hu-virtual-machine 5.15.0-48-generic #54~20.04.1-Ubuntu SMP Thu Sep 1 16:17:26 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
编写hello.c文件
/* hello.c */
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("leo BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, Hello world\n");
}
module_init(hello_init);
module_exit(hello_exit);
编写Makefile文件,主要分隔符使用tab而不是空格
obj-m += hello.o
CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build
all:
$(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
编译
hu@hu-virtual-machine:~/ko_test$ make
make -C /lib/modules/5.15.0-48-generic/build M=/home/hu/ko_test modules
make[1]: 进入目录“/usr/src/linux-headers-5.15.0-48-generic”
make[1]: 离开目录“/usr/src/linux-headers-5.15.0-48-generic”
加载模块
hu@hu-virtual-machine:~/ko_test$ insmod hello.ko
insmod: ERROR: could not insert module hello.ko: Operation not permitted
hu@hu-virtual-machine:~/ko_test$ sudo insmod hello.ko
[sudo] hu 的密码:
查看模块
hu@hu-virtual-machine:~/ko_test$ lsmod
Module Size Used by
hello 16384 0
查看日志打印信息
hu@hu-virtual-machine:~/ko_test$ cat /var/log/syslog | grep Hello
Nov 14 15:10:42 hu-virtual-machine kernel: [ 1171.109249] Hello, world
完整的信息可以输入demesg查看
卸载驱动设备
sudo rmmod hello.ko
hu@hu-virtual-machine:~/ko_test$ cat /var/log/syslog | grep Hello
Nov 14 15:10:42 hu-virtual-machine kernel: [ 1171.109249] Hello, world
Nov 14 15:20:29 hu-virtual-machine kernel: [ 1758.650902] Goodbye, Hello world