首页 文章

阻止设备驱动程序从用户应用程序读/写

提问于
浏览
2

我正在尝试实施"simple file-system"以获取我的个人经验 . 为此,我创建了一个块设备驱动程序,我将以块为单位执行读/写操作 . 现在我的问题是如何从用户应用程序对块设备执行 open, read, write and close 操作 .

我实际上正在寻找的是一个函数,我可以打开块设备 /dev/sbd 并返回 struct block_device ,如果成功的话 . 对于读/写功能,我可以发出阻止设备 struct request 的请求,参数为"buffer, sectore_number, numbe_of_sectors" .

直到现在我只有 block_read()block_write() 功能 . 但似乎它们是BSD特定的 . 我正在使用Debain .

谁有想法呢?谢谢 .

1 回答

  • 1

    我一直在做类似的事情,编写一个适用于文件或设备的应用程序级文件系统 . 您正在编写的内容并不是设备驱动程序,因为内核直接处理/使用设备驱动程序 . 用户应用程序无法直接访问 . 无论如何,我想指向函数调用open(2),read(2),write(2),close(2)(所有这些函数的手册页第2节) . 您将需要unistd.h头文件来使用它们 . 在调用读写时,可以将读/写大小设置为块大小的倍数 . 但最终,你仍然在经历内核 .

    编辑:经过进一步的检查和评论,设备驱动程序确实在内核中 . 通常,驱动程序和应用程序之间没有直接连接,因为内核中有几层代码来抽象设备,因此它看起来像应用程序的其他所有内容一样 .

    有两种方法可以解决这个问题 . 一种是在系统调用树中 Build 一个或多个系统调用,以将设备驱动程序的读/写例程暴露给应用程序 . 我的另一个想法是使用ioctl(I / O控制)系统调用来执行此操作,但此调用旨在控制实际设备 . 例如,硬盘使用读写命令来传输数据,但是要与硬盘驱动器通信以获取有关它的信息,例如最后一个LBA是什么或获得它的身份,你可以使用IOCTL来做到这一点 .

    希望这可以帮助 .

相关问题