gpt4 book ai didi

c - 从用户应用程序读取/写入 block 设备驱动程序

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:01 24 4
gpt4 key购买 nike

根据我个人的经验,我正在尝试实现“简单文件系统”。为此,我创建了一个 block 设备驱动程序,我将使用它以 block 为单位执行读/写操作。现在我的问题是我应该如何从用户应用程序对 block 设备执行打开、读取、写入和关闭操作。

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

到目前为止,我只有 block_read()block_write() 函数。但它们似乎是特定于 BSD 的。我正在使用 Debain。

有人知道吗?谢谢。

最佳答案

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

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

有两种解决方法。一种是在系统调用树中建立一个或多个系统调用,将设备驱动程序的读/写例程暴露给应用程序。我的另一个想法是使用 ioctl(I/O 控制)系统调用来执行此操作,但此调用旨在控制实际设备。例如,硬盘使用读取和写入命令来传输数据,但要与硬盘驱动器对话以获取有关它的信息,例如最后一个 LBA 是什么或获取其标识,您将使用 IOCTL 来执行此操作。

希望这对您有所帮助。

关于c - 从用户应用程序读取/写入 block 设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263266/

24 4 0
文章推荐: node.js - 使用 Node.JS HTTP 服务器的工作流程
文章推荐: c# - 带有 List 的 JSON.NET 的 System.OutOfMemoryException