10.3、驱动开发 -- 内核模块

内核模块
如果将驱动程序 融入到内核源码中, 当驱动修改的时候,内核需要重新编译,重新烧写!!!

内核模块机制:  允许 驱动程序和操作系统分离.     将驱动程序写入写入模块内部,       
     
模块可以动态的加入内核,或者动态的离开内核.       
动态: 操作系统运行的时候.    

优点: 大部分功能都喜欢写入模块!!!
内核只需要保留最基本的功能,需要某个功能的时候,将他的模块动态的加进来.不需要的删除.

模块的编写
modules.c文件

/*****************************************************************
*   Copyright (C) 2019 Sangfor Ltd. All rights reserved.
*   
*   文件名称:saolei.c
*   创 建 者:yinfei-hu
*   创建日期:2019年03月07日  星期4 15时22分05秒
*   功能描述:
*
*****************************************************************/

#include <linux/kernel.h>    //内核头文件
#include <linux/module.h>  //MODULE_LICENSE头文件
/*    
编写内核模块    
1.编写入口函数    module_init(int (*initfn)(void)) 
initfn函数指针,指向谁,谁就是模块的入口函数    

2.出口函数    module_exit(void (*exitfn)(void))  
exitfn: 函数指针,指向谁谁就是模块出口函数
*/
int module_fun_init(void){    
	printk("%s->%d\n",__FUNCTION__,__LINE__);    
	return 0;
}

void  module_fun_exit(void){    
	printk("%s->%d\n",__FUNCTION__,__LINE__);
}
/*    内核模块入口    module_init 里面的参数,指向谁,谁就是模块入口函数*/
module_init(module_fun_init);
/*    内核模块出口    module_exit 里面的参数,指向谁,谁就是模块出口函数*/
module_exit(module_fun_exit);

/*模块作者信息*/
MODULE_AUTHOR("YinFei.Hu <hu_yin_fei@163.com>");
/*模块信息*/
MODULE_DESCRIPTION("Kernel module driver");
/*告诉内核愿意遵守gpl协议*/
MODULE_LICENSE("GPL");

Makefile文件

obj-m += modules.o    #指定编译模块

all:    
	make -C  /tftpboot/linux-3.14    M=$(PWD)   modules  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-       # -C 指定编译后的内核文件路径 ;M=$(PWD)  指定当前路径  PWD当前路径宏;modules  编译文件名;ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-指定编译器,指定编译工具 

clean:
	rm *.ko *.o  *.mod.c  *.order  *.symvers  -rf

模块的操作
安装 insmod xxx.ko 安装的时候模块入口函数被执行 初始化动作
卸载 rmmod xxx [没有.ko] 卸载的 出口函数 被执行. 去初始化动作
前提是你要创建 /lib/modules/3.14.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值