linux设备驱动程序
前言
linux驱动程序是为了操作外设的内核模块。
1. 内核驱动程序hello_world源码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
//指定license版本
MODULE_LICENSE("GPL");
//设置初始化入口函数
static int __init hello_world_init(void)
{
printk(KERN_DEBUG "hello world!!!\n");
return 0;
}
//设置出口函数
static void __exit hello_world_exit(void)
{
printk(KERN_DEBUG "goodbye world!!!\n");
}
//将上述定义的init()和exit()函数定义为模块入口/出口函数
module_init(hello_world_init);
module_exit(hello_world_exit);
2. 编译
obj-m+=hello_world.o
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
3. 加载
在相关内核编译选项打开的前提下,linux中可以动态加载与卸载内核模块。
加载内核模块:
sudo insmod hello_world.ko
卸载内核模块:
sudo rmmod hello_world.ko
列出已加载的模块:
lsmod