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

时间:2015-05-15 15:26:01

标签: c linux-device-driver

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

我实际需要的是一个功能,我可以通过它打开块设备 / dev / sbd ,如果成功,它将返回struct block_device。对于读/写功能,我可以发出阻止设备struct request的请求,参数为" buffer,sectore_number,numbe_of_sectors"。

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

有人有这个想法吗? 感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

希望这有帮助。