创建内核块设备以表示单个文件

时间:2018-02-07 08:13:05

标签: linux macos kernel freebsd kernel-extension

我想设计一种方法来覆盖单个文件上的读取,写入和映射(页面调入)方法,而无需实现整个新文件系统的负担。

因此,我研究了使用块设备的选项。例如,我的设备将代表一个动态库,可供其他进程加载。

到目前为止,我能够使用以下代码创建设备(以macOS内核扩展编写,但应与每个基于BSD的操作系统兼容)。

static struct cdevsw my_device =
{
    // Implement the methods
    .d_open = my_open,
    .d_close = my_close,
    .d_read = my_read,
    ...
};

int my_major_index = cdevsw_add (-1 /* auto select index */, &my_device);
dev = makedev (my_major_index, 0);
void * device_node = devfs_make_node (dev, 
                                      DEVFS_BLOCK, 
                                      UID_ROOT, 
                                      GID_WHEEL, 
                                      MY_PERMISSION, 
                                      "my_device");

在此实例化之后,我在/dev/my_device

下映射了设备

我的问题是我是否可以使用dlopen(意为dlopen("/dev/my_device")或者我应该先将此设备挂载到HFS +文件系统,并将我的dylib复制到此挂载点来调用此设备?

0 个答案:

没有答案