加载模块驱动

—、必备的头文件

Linux头文件位置
1、类似#include <linux/module.h>的头文件,它们是在Linux源码目录下的include/linux/module.h
#include <linux/module.h>头文件
所有的Linux 代码必须遵循GPL 协议,如果不知道Linux 的GPL 协议,去查一下资料
– 如果你不声明GPL 协议,你的模块将无法在Linux 中使用的
– MODULE_LICENSE(_license)添加遵循GPL协议,必须的!

– MODULE_AUTHOR(_author)代码作者

2、#include <linux/init.h>
– 包含初始化宏定义的头文件,代码中的函数module_init和module_exit在此文件中
– 入口函数module_init(x)

– 出口函数module_exit(x)

二、新建.c文件

module_init(hello_init);

– /*初始化函数*/
module_exit(hello_exit);

– /*卸载函数*/

声明区
– MODULE_LICENSE("Dual BSD/GPL");
– /*声明是开源的,没有内核版本限制*/
– 必须有
– MODULE_AUTHOR("TOPEET");
– /*声明作者*/

– 可有可无

static int hello_init(void){
   printk(KERN_EMERG "Hello World enter!\n");
   /*打印信息,KERN_EMERG表示紧急信息*/
   return 0;
}
static void hello_exit(void)
{
      printk(KERN_EMERG "Hello world exit!\n");
}
mini_linux_module.c
#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("TOPEET");

static int hello_init(void)
{
	printk(KERN_EMERG "HELLO WORLD enter!\n");
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_EMERG "HELLO WORLD exit!\n");
	
}

module_init(hello_init);
module_exit(hello_exit);

makefile

#!/bin/bash
#通知编译器我们要编译模块的哪些源码
#这里是编译itop4412_hello.c这个文件编译成中间文件itop4412_hello.o
obj-m += mini_linux_module.o 

#源码目录变量,这里用户需要根据实际情况选择路径
#作者是将Linux的源码拷贝到目录/home/topeet/android4.0下并解压的
KDIR := /home/hjx/work/itop-4412/iTop4412_Kernel_3.0

#当前目录变量
PWD ?= $(shell pwd)

#make命名默认寻找第一个目标
#make -C就是指调用执行的路径
#$(KDIR)Linux源码目录,作者这里指的是/home/topeet/android4.0/iTop4412_Kernel_3.0
#$(PWD)当前目录变量
#modules要执行的操作
all:
	make -C $(KDIR) M=$(PWD) modules
		
#make clean执行的操作是删除后缀为o的文件
clean:
	rm -rf *.o

结果:

[root@iTOP-4412]# insmod mini_linux_module.ko
[ 1169.960476] HELLO WORLD enter!
[root@iTOP-4412]# 
[root@iTOP-4412]# 
[root@iTOP-4412]# lsmod
mini_linux_module 700 0 - Live 0xbf00c000
[root@iTOP-4412]# rmmod mini_linux_module
[ 1179.536123] HELLO WORLD exit!
三、无法卸载模块的解决办法

是用rmmod卸载模块的时候会弹出错误,如下

– rmmod: can't change directory to '/lib/modules': No such file or directory

提示没有'/lib/modules'目录

– 使用命令“#mkdir /lib/modules”,新建一个目录

是用rmmod命令仍然会出现如下错误:

– rmmod: can't change directory to '3.0.15': No such file or directory

提示没有目录'3.0.15'
– 使用命令“#mkdir /lib/modules/3.0.15”,继续建目录

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011425939/article/details/80316834
个人分类: kernel&驱动
想对作者说点什么? 我来说一句

ZIGBEE————DHT11模块驱动

2018年04月16日 3KB 下载

S3C2442平台蓝牙模块驱动

2008年05月01日 38KB 下载

ESP8266 wifi模块驱动代码

2016年01月20日 1.08MB 下载

良田指纹仪模块驱动及测试说明

2018年01月13日 38.71MB 下载

IGBT模块驱动及保护技术.pdf

2013年05月06日 138KB 下载

博创CAN总线模块驱动

2008年04月29日 7KB 下载

没有更多推荐了,返回首页

不良信息举报

加载模块驱动

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭