linux dirver demo

什么是 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容