我如何实现自己的文件描述符? 假如我有一个内核模块控制某些硬件,我想通过read()和write()公开与这个硬件通信的能力。不想使用IOCTL或netlink或其他用户空间 - 内核空间方法。我是否需要重新编译内核,或者我可以通过编写内核模块来完成。
我理解创建文件描述符需要一种机制,让用户空间告诉内核空间在任务的文件结构中创建一个条目(即一个等同于open(),eventfd()timerfd(),socket()的函数) 。我可以通过IOCTL实现(这样我就不用重新编译内核了),但是我如何入侵read()和write() - 我之前使用LD_PRELOAD修补它们,这是唯一的方法吗?不想重新编译内核!
答案 0 :(得分:0)
我不确定我理解你的所有问题。尽管如此:
read
和write
- 没问题; 请查看此book的第三章(及其他内容)。
答案 1 :(得分:0)
konrad.kruczynski是对的!
使用字符设备作为用户空间机制与硬件通信,并在/ dev文件系统中创建设备,例如/ dev / hardware_type_A。
然后编译&&将模块加载到内核中,如果所有代码都正常,那么内核将在/ dev /中创建一个名为/ dev / hardware_type_A的字符设备。
然后您可以使用读取,写入,打开,关闭调用,就像您使用其他设备或文件来控制硬件一样。
如果你真的说你不想通过ioctl控制它,那么你必须需要一个使用write发送数据的新协议,你的驱动程序会解压缩该数据并代表用户的程序控制硬件。