c - 实现文件描述符

标签 c linux kernel kernel-module

我将如何着手实现我自己的文件描述符? 假设我有一个控制某些硬件的内核模块,我想通过 read() 和 write() 向用户空间公开与该硬件通信的能力。不想使用 IOCTL 或 netlink 或其他用户空间内核空间方法。我需要重新编译内核还是可以通过编写内核模块来完成。

我知道创建文件描述符需要一种机制让用户空间告诉内核空间在任务的文件结构中创建一个条目(即相当于 open()、eventfd() timerfd()、socket() 的函数) .我可以通过 IOCTL 实现(这样我就不必重新编译内核),但是我如何破解 read() 和 write() - 我之前已经使用 LD_PRELOAD 修补了它们,这是唯一的方法吗?不想重新编译内核!

最佳答案

我不确定我是否理解您的所有问题。尽管如此:

  • 您绝对可以将其作为内核模块;
  • 您可能想要创建一个字符设备(问题的第二部分);
  • 对于字符设备,你可以实现你需要的系统调用;如果您只想让 readwrite - 没问题;

查看此 book 的第三章(及其他) .

关于c - 实现文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632758/

相关文章:

c - 在 kmem_cache_free 释放其包含结构之前,必须解锁互斥体吗?

c - 如何以及在何处将 stdint.h 类型定义包含在头文件中?

c - autotools,如果找不到交叉编译器如何失败

linux - bash - 尝试通过管道将命令运行到单独的函数时出错

node.js - 带有大括号扩展的 NodeJS Exec cp 给出了不同的结果。为什么?

windows - ObRegisterCallbacks : MSDN documentation/sample code discrepency

c - 通过可加载内核模块拦截 linux 内核 : fs/binfmt_elf. c 文件中的 ELF 加载程序

在 C 中复制和写入 WAV 文件

c - 从数组中选择最大子数组

java - PCSC 在 linux 上不返回任何内容,读卡器已连接