Linux 驱动模块及模块之前的通信(模块函数的相互调用)

1.3.2 模块机制
insmod :安装module
rmmod :卸载module


#include
#include
#include


int __init xxx_init(void)
{
/* */
return 0;
}


void __exit xxx_exit(void)
{


}


module_init(xxx_init);
module_exit(xxx_exit);


MODULE_LICENSE();
MODULE_DESCRIPTION();
MODULE_ALIAS();
MODULE_VERSION();
MODULE_AUTHOR();


5.2.1 驱动模块的组成
1.头文件(必选)
#include
#include
2.模块参数(可选)
static long a = 1;
static int  b = 1;
module_param(a, long, S_IRUGO);
module_param(b, int,  S_IRUGO);
参数数据类型可以是:byte short ushort int uint long ulong bool charp(字符指针类型);
模块加载时传给驱动模块的参数 insmod  test.ko  name="kernel"
insmod 模块.ko 参数1=值1 参数2=值2 参数3=值3 //参数之间没有逗号
3.模块加载函数(必须)
4.模块卸载函数(必须)
5.模块许可声明(必须)
 MODULE_LICENSE("GPL");     //任一版本的GNU公共许可权
 MODULE_LICENSE("GPL v2");  //GPL 版本2许可权
 MODULE_LICENSE("GPL and additional rights"); //GPL及其附加许可权
 MODULE_LICENSE("Dual BSD/GPL");  //BSD/GPL双重许可权
 MODULE_LICENSE("Dual MPL/GPL");  //MPL/GPL 双重许可权
 MODULE_LICENSE("Proprietary");   //专有许可权
 
5.3.4 模块之间的通信实例
add_sub.c
#include
#include
#include "add_sub.h"
 
long add_integer(int a,int b)
{
return a+b;
}
 
long sub_integer(int a, int b)
{
return a-b;
}
 
EXPORT_SYSMBOL(add_integer);
EXPORT_SYSMBOL(sub_integer);
MODULE_LICENSE("Dual BSD/GPL");
 
add_sub.h
#ifndef __ADD_SUB_H__
#define __ADD_SUB_H__
long add_integer(long a, long b);
long sub_integer(long a, long b);
#endif




Kconfig 主要语法
config
menuconfig
choice/endchoice
comment   //注释
menu/endmenu
if/endif


isocurce "../linx/abc"

source "/drivers/add_sub_Kconfig/Kconfig"



你可能感兴趣的:(Linux,Driver)