什么是 linux dirver ?
它是一个程序,可以动态安装和卸载,它在 module 中
简单示例
一个 Makefile 和 一个 demo.c
Makefile
#!/bin/bash
obj-m += demo.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
demo.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
static int __init apple_init(void) //驱动入口函数
{
printk(KERN_EMERG "apple_init\r\n");
return 0;
}
static void __exit apple_exit(void) //驱动出口函数
{
printk(KERN_EMERG "apple_exit\r\n");
}
module_init(apple_init); //注册入口函数
module_exit(apple_exit); //注册出口函数
MODULE_LICENSE("GPL"); //同意GPL开源协议,就不会打印警告信息了
MODULE_AUTHOR("apple"); //还可以再添加上作者名称
测试
~/apple/project/driver/demo$ sudo dmesg -C
apple:~/apple/project/driver/demo$ ls
demo.c demo.ko demo.mod.c demo.mod.o demo.o Makefile modules.order Module.symvers
apple:~/apple/project/driver/demo$ dmesg
apple:~/apple/project/driver/demo$ sudo insmod demo.ko
apple:~/apple/project/driver/demo$ dmesg
[71311.800245] apple_init
apple:~/apple/project/driver/demo$ sudo rmmod demo
apple:~/apple/project/driver/demo$ dmesg
[71311.800245] apple_init
[71321.339982] apple_exit