linux内核态用户态交互,Linux用户态和内核态交互的几种方式
创建于 2013-04-13
迁移自本人的百度空间
--------------------------------
1/内核态->用户态
在kernel module中调用printk是最简单的传递信息到用户空间的方法。
2/用户态->内核态
在linux中,用户对设备的操作往往被抽象为对文件的操作。利用这一特性,可以通过注册和实现伪字符设备到内核,来实现用户进程和内核空间的交互。当在用户空间执行对该伪设备的open/read/write/ioctl/mmap/release等操作时,这些被复用的系统调用就会使进程从用户态进入到内核态,从而在内核中完成事先注册的操作
int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);
static inline void unregister_chrdev(unsigned int major, const char *name)
3/内核态->用户态
内核态中,可以完成对用户文件系统任意文件的访问。因此,可以在内核态将要输出的信息写入文件,写入后用户态程序直接读取文件就可以完成从内核空间向用户空间的数据传递。
4/内核态用户态
proc文件系统,是当前内核或内核模块,和用户交互的主要方式,它通过将虚拟的文件系统挂载在/proc下,利用虚拟文件读写在用户和内核态间传递信息。通过内核模块,可以向/proc下注册新的文件,指定用户读写该文件时的回调函数;这样,当用户读写该文件时,工作在内核态的回调函数就可以执行信息交互的有关工作。
向内核中注册/proc下文件的调用是create_proc_entry
5/内核态用户态
netlink是一种特殊的socket,用于用户态与内核态的双向通讯。在实现用户和内核交互的各种方式中,netlink的主要特点得意于它继承了 socket的一些基本特性,包括异步通讯,多播,双向性,不需要额外的文件。在用户态中,netlink的使用与标准的socket API相同,在内核态,则需要使用专门的API。
在内核态,通过netlink_kernel_create可以在内核中新建socket结构并注册接收到消息的回调函数input,其原型为:
struct sock *netlink_kernel_create(int unit, void (*input)(struct sock *sk, int len));
void sock_release(struct socket *sock)
linux内核态用户态交互,Linux用户态和内核态交互的几种方式相关推荐
- linux下安装mysql8(基于yum安装和mysql安装包离线安装两种方式)
试验环境: centos7 x64 最小化安装 mysql80-community-release-el7-3.noarch.rpm 或mysql-8.0.17-linux-glibc2.12-x86 ...
- linux进程属主6,20150917 Linux进程查看与管理以及作业管理
第一.基础知识 MBR引导--内核--内核程序-->协调其它程序 一般内核运行在硬件之上,各应用也在硬件之前 1)OS的基本功能:文件系统.网络功能.进程管理.内存管理.驱动程序.安全功能 以上 ...
- qimo linux 中文,DoudouLinux一个有趣的Linux发行版为孩子们 | MOS86
Linux真的是一个多功能的软件.您可以使用它作为您的日常工作操作系统,一个运行世界上大部分网站的服务器,作为多媒体中心,或甚至作为促进您的宗教信仰的一种方式.更有创意地使用Linux是将它变成一个适 ...
- 树莓派Ubuntu20.04创建新用户+授权+删除默认用户
step1_提权: sudo su #给当前用户临时分配root权限 step2_创建新用户: 由于step1已获取root权限,以下的所有代码不需要再用sudo,另外注意: (1)新名称首字母不可以 ...
- linux 用户态 内核态 通信,procfs(从0开始,内核态和用户态通信charpter2)
这篇博文将针对linux内核态与用户态通信方式中的procfs进行详细的学习. /proc主要存放内核的一些控制信息,所以这些信息大部分的逻辑位置位于内核控制的内存,在/proc下使用ls -l你会发 ...
- Linux用户态与内核态通信的几种方式(待完善)
文章目录 1. 内核启动参数 2.模块参数与sysfs 3.sysctl 4.系统调用 5.netlink 6. procfs(/proc) 7.seq_file 8.debugfs 9.relayf ...
- 什么是Linux系统调用system call?(Linux内核中设置的一组用于实现各种系统功能的子程序)(区别于标准C库函数调用)核心态和用户态的概念、中断的概念、系统调用号、系统调用表
文章目录 什么是系统调用? 为什么要用系统调用? 系统调用是怎么工作的? 如何使用系统调用? _syscall*()是什么? errno是什么? 调用性能问题 Linux系统调用列表 进程控制 文件系 ...
- linux 切换用户_Linux 用户态切换到内核态的 3 种方式
系统调用 这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如 fork() 实际上就是执行了一个创建新进程的系统调用.而系统调用的机制其核 ...
- Linux内核态之间进程通信,Linux 系统内核空间与用户空间通信的实现与分析[转载]...
[https://www.ibm.com/developerworks/cn/linux/l-netlink/index.html] 多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 ...
最新文章
- Cache Memory技术示例
- 教程:12、文件存储结构
- 转:测试部工作不受重视怎么办?
- python语言编程环境-python3编程环境搭建
- JavaScript实现使用DisjointSet 检测无向循环算法(附完整源码)
- python报错:xml.parsers.expat.ExpatError: not well-formed (invalid token): line 3, column 1的解决办法
- G - 数据结构实验之链表五:单链表的拆分
- Logistic回归及梯度上升算法
- NSCT(Nonsubsampled Contourlet变换)
- java如何美化按钮_css美化button按钮
- cdrom是多媒体微型计算机,2011年计算机一级考试理论试题:多媒体
- Java实现房屋租赁网站
- 云课堂软件工程(C编码实践篇)学习之我见
- Diskman 重建分区表 (小莫)
- BSN与CITA技术适配过程揭秘
- WinCE下的USB游戏手柄驱动 GamePad Joystick
- android aar编程,Android Studio模块化编程实践之aar
- 基于Panabit免费流控系统的安装与部署
- 不用中间变量交换两个数的值
- 梅州英才外语学校计算机,梅州英才外语学校