内核空间与用户空间的通信
在Linux中编程,特别是涉及内核驱动时,应用层程序经常需要和内核层驱动进行数据交换,比如内核检测到某个状态需要通知应用程序,或者应用程序的某个状态发生改变需用通知内核等等。
proc简介
/proc 文件系统是一种虚拟文件系统,它可以实现linux内核空间和用户空间的通信。与普通文件不同,这里的虚拟文件的内容都是动态创建的。
如果只是控制内核中的参数而不是传输较多数据的话,用“/proc”是很合适的。
proc实例实现的功能
读取路由器的工作模式到无线驱动中,根据当前的工作模式,对不同的报文做一些特殊处理。路由器当前的工作模式保存在配置文件中,通过脚本来读取配置文件,并将该值写入对应的proc文件即可。
内核空间程序
// 运行下面用户态的脚本后,路由器的工作模式就被写入msg中,内核空间直接使用msg的值即可
#include <linux/init.h>
#include <linux/version.h>
#include <linux/module.h>
#include <linux/stat.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
MODULE_AUTHOR("yahai.zhang");
MODULE_DESCRIPTION("procfs get_operation_mode module.");
MODULE_LICENSE("GPL");
#define PROCNAME "operation_mode"