广告

本站里的文章大部分经过自行整理与测试

2017年10月26日星期四

Linux - 编译 / 加载 / 卸载 驱动模块

1) 源码 hello.c

$ sudo gedit hello.c

#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void)

{
printk(KERN_INFO " Hello World enter\n");
return 0;
}

static void hello_exit(void)

{
printk(KERN_INFO " Hello World exit\n ");
}

module_init(hello_init); //向系统注册模块加载函数 
module_exit(hello_exit); //向系统注册模块卸载函数

MODULE_AUTHOR("Jason <abc@gmail.com>"); //模块作者等信息声明,可选

MODULE_LICENSE("Dual BSD/GPL"); //模块许可证声明
MODULE_DESCRIPTION("A simple Hello World Module"); //模块描述声明,可选
MODULE_ALIAS("a simplest module"); //模块别名的声明,可选

2) Makefile 源码 (以下源码 make -C 前用 Tab 一次, 不然编译时会出现错误)

KVERS := $(shell uname -r)
PWD := $(shell pwd)

obj-m += hello.o


default:

make -C /lib/modules/$(KVERS)/build M=$(PWD) modules

3) 编译 (编译后, 除了 hello.c 和 Makefile, 会多出另外 6 个文件)
$ make

4) 加载模块
$ sudo insmod ./hello.ko

$ cat /var/log/syslog | grep "Hello World"
Oct 26 14:00:00 ubuntu kernel: [15724.222701]  Hello World enter

5) 卸载模块
$ sudo rmmod ./hello.ko

$ cat /var/log/syslog | grep "Hello World"
Oct 26 15:00:00 ubuntu kernel: [15724.222701]  Hello World exit

没有评论:

发表评论