一般的linux驱动开发都是基于交叉编译来进行的,本文尝试着从另一个角度:基于ubuntu的本地驱动开发来学习一下驱动的开发
一、驱动的开发与编译
1.1、编写驱动文件
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk("Hello,world\r\n");
return 0;
}
static void hello_exit(void)
{
printk("hello,world over\r\n");
}
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
1.2、查找内核文件位置
1.3、编写makefile文件
KERNELDIR :=/usr/src/linux-headers-4.15.0-29-generic
CURRENT_PATH := $(shell pwd)
obj-m := hello.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
其中KERNELDIR 就是前面查找的内核目录
1.4、编译
make
二、驱动的加载与测试
2.1、加载驱动
sudo insmod hello.ko
2.2、卸载驱动
sudo rmmod hello.ko
2.3、查看内核日志信息
dmesg