内核驱动最简demo
Posted Li-Yongjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内核驱动最简demo相关的知识,希望对你有一定的参考价值。
hello.c
/**
* 当一个模块设备驱动被加载到内核时,通常要做的一些事情包括:设备复位,初始化RAM,初始化中断,初始化输入输出端口等。
* 这些动作在内核空间进行,通过这两个函数进行:module_init 和 module_exit,
* 它们和用户空间用于安装和卸载模块的命令 insmod 和 rmmod 对应。
* 也可以说,用户空间命令 insmod 和 rmmod 使用内核空间的函数 module_init 和 module_exit 进行。
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
printk("Hello world!\\n");
return 0;
static void hello_exit(void)
printk("Bye, hello world!\\n");
module_init(hello_init);
module_exit(hello_exit);
/**
* 1. module_init(),module_exit():
* 实际上 hello_init 和 hello_exit 可以换成任何其他名称。
* 为了使系统能够正确的识别它们时加载和卸载函数,需要把它们作为 module_init 和 module_exit 的参数
*
* 2. printk():
* 他和我们熟悉的 printf() 很相似,只不过它只在内核空间有效。
*/
Makefile
obj-m = hello.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
以上是关于内核驱动最简demo的主要内容,如果未能解决你的问题,请参考以下文章