内核空间与用户空间的通信方式

阅读: 评论:0

内核空间与⽤户空间的通信⽅式
下⾯总结了7种⽅式,主要对以前不是很熟悉的⽅式做了编程实现,以便加深印象。
1.使⽤API:这是最常使⽤的⼀种⽅式了
<_user(x,ptr):在内核中被调⽤,获取⽤户空间指定地址的数值并保存到内核变量x中。
B.put_user(x,ptr):在内核中被调⽤,将内核空间的变量x的数值保存到到⽤户空间指定地址处。
C.Copy_from_user()/copy_to_user():主要应⽤于设备驱动读写函数中,通过系统调⽤触发。
血友吧2.使⽤proc⽂件系统:和sysfs⽂件系统类似,也可以作为内核空间和⽤户空间交互的⼿段。
梁晓声/proc ⽂件系统是⼀种虚拟⽂件系统,通过他可以作为⼀种linux内核空间和⽤户空间的。与普通⽂件不同,这⾥的虚拟⽂件的内容都是动态创建的。
使⽤/proc⽂件系统的⽅式很简单。调⽤create_proc_entry,返回⼀个proc_dir_entry指针,然后去填充这个指针指向的结构就好了,我下⾯的这个测试⽤例只是填充了其中的read_proc属性。
下⾯是⼀个简单的测试⽤例,通过读虚拟出的⽂件可以得到内核空间传递过来的“proc ! test by qiankun!
”字符串。
3.使⽤sysfs⽂件系统+kobject:其实这个以前是编程实现过得,但是那天太紧张忘记了,T_T。每个在内核中注册的kobject都对应着sysfs系统中的⼀个⽬录。可以通过读取根⽬录下的sys⽬录中的⽂件来获得相应的信息。除了sysfs⽂件系统和proc⽂件系统之外,⼀些其他的虚拟⽂件系统也能同样达到这个效果。
屏幕录像专家6.0
4link:netlink socket提供了⼀组类似于BSD风格的API,⽤于⽤户态和内核态的IPC。相⽐于其他的⽤户态和内核态IPC机
制,netlink有⼏个好处:1.使⽤⾃定义⼀种协议完成数据交换,不需要添加⼀个⽂件等。2.可以⽀持多点传送。3.⽀持内核先发起会话。
4.异步通信,⽀持缓存机制。
对于⽤户空间,使⽤netlink⽐较简单,因为和使⽤socket⾮常的类似,下⾯说⼀下内核空间对netlink的使⽤,主要说⼀下最重要的create函数,函数原型如下:
extern struct sock *netlink_kernel_create(struct net *net,
int unit,unsigned int groups,
void (*input)(struct sk_buff *skb),
struct mutex *cb_mutex,
struct module *module);
聂耳与国歌第⼀个参数⼀般传⼊&init_net。
第⼆个参数指的是netlink的类型,系统定义了16个,我们如果使⽤的话最好⾃⼰定义。这个需和⽤户空间所使⽤的创建socket的第三个参数⼀致,才可以完成通信。
第四个参数指的是⼀个回调函数,当接受到⼀个消息的时候会调⽤这个函数。回调函数的参数为struct
反论文sk_buff类型的结构体。通过分析其结构成员可以得到传递过来的数据
第六个参数⼀般传⼊的是THIS_MODULE。指当前模块。
下⾯是对netlink的⼀个简单测试,将字符串“netlink test by qiankun”通过netlink输出到内核,内核再把字符串返回。Netlink类型使⽤的是22.
5.⽂件:应该说这是⼀种⽐较笨拙的做法,不过确实可以这样⽤。当处于内核空间的时候,直接操作⽂件,将想要传递的信息写⼊⽂件,然后⽤户空间可以读取这个⽂件便可以得到想要的数据了。下⾯是⼀个简单的测试程序,在内核态中,程序会
向“/home/melody/str_from_kernel”⽂件中写⼊⼀条字符串,然后我们在⽤户态读取这个⽂件,就可以得到内核态传输过来的数据了。
6.使⽤mmap系统调⽤:可以将内核空间的地址映射到⽤户空间。在以前做嵌⼊式的时候⽤到⼏次。⼀⽅⾯可以在driver中修改
Struct file_operations结构中的mmap函数指针来重新实现⼀个⽂件对应的映射操作。另⼀⽅⾯,也可以直接打开/dev/mem⽂件,把物理内存中的某⼀页映射到进程空间中的地址上。
其实,除了重写Struct file_operations中mmap函数,我们还可以重写其他的⽅法如ioctl等,来达到驱动内核空间和⽤户空间通信的⽅式。
7.信号:从内核空间向进程发送信号。这个倒是经常遇到,⽤户程序出现重⼤错误,内核发送信号杀死相应进程

本文发布于:2023-06-27 15:20:22,感谢您对本站的认可!

本文链接:https://patent.en369.cn/xueshu/137346.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:内核   空间   函数   系统   结构   得到
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图