在vm_fault()中预取Linux驱动程序

母猪

我正在实现一个简单的设备驱动程序。使用该驱动程序的程序从用户处接收是使用按需分页还是预取(仅获取下一页)的参数。但是,当用户请求预取时,应将此信息发送给驱动程序。问题是vm_fault具有如下标准结构:

int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);

那么如何将这些预取的附加信息合并到其中,以便我可以使用它编写不同的预取例程?还是有其他方法可以实现这一目标?

[编辑]
提供更清晰的图像:
这是程序如何输入的方式。

./user_prog [filename] --prefetch

user_prog在其中设置了一些标志,现在介绍如何将这些标志信息发送到dev.c(驱动程序文件),因为函数的所有参数都是固定的,就像上面fault()一样。我希望这能提供更多的说明。

戈文德·巴拉吉(Govind Balaji)

您也可以使用flagsinmmap()传递自定义标志。

void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);

确保您的自定义标志值使用的位不同于所使用的标志值mmap()联机帮助页中定义宏sys/mman.h使用查找精确值(可能因系统而异)echo '#include <sys/mman.h>' | gcc -E - -dM | grep MAP_*我的系统有:

#define MAP_32BIT 0x40
#define MAP_TYPE 0x0f
#define MAP_EXECUTABLE 0x01000
#define MAP_FAILED ((void *) -1)
#define MAP_PRIVATE 0x02
#define MAP_ANON MAP_ANONYMOUS
#define MAP_LOCKED 0x02000
#define MAP_STACK 0x20000
#define MAP_NORESERVE 0x04000
#define MAP_HUGE_SHIFT 26
#define MAP_POPULATE 0x08000
#define MAP_DENYWRITE 0x00800
#define MAP_FILE 0
#define MAP_SHARED 0x01
#define MAP_GROWSDOWN 0x00100
#define MAP_HUGE_MASK 0x3f
#define MAP_HUGETLB 0x40000
#define MAP_FIXED 0x10
#define MAP_ANONYMOUS 0x20
#define MAP_NONBLOCK 0x10000

一些非冲突标志将是0x2000x400

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

linux字符驱动程序中的接口

Linux中的固件和驱动程序

什么是Linux驱动程序中的wmb()

Linux驱动程序中的分段错误

OJDBC 驱动程序中的 Cloudera QuickStart VM Sqoop 错误

Linux内核:从驱动程序中删除输入处理程序

构建Linux驱动程序时如何添加预建对象(android)

从嵌套对象中拉取-MongoDB PHP驱动程序

SPI Linux驱动程序

如何从Linux驱动程序访问和调试FDT / DTS设备树(seg-fault)

Linux 中的字符设备驱动程序读/写

无法在 Linux 中的 Jenkins 上执行 chrome 驱动程序

在Linux驱动程序中处理IRQ延迟

在Alpine Linux Docker容器中安装ODBC驱动程序

Linux内核中的WS2812设备驱动程序

Linux内核中的USB鼠标使用哪些驱动程序?

如何在Linux设备驱动程序中设置errno?

USB存储驱动程序如何在Linux中工作?

ARM Linux内核驱动程序中的关键时序

Linux设备驱动程序中的静态函数?

如何在 Linux 驱动程序中列出 MMC 分区?

如何在使用中更改驱动程序Linux

Linux中如何安装外围硬件的驱动程序?

添加驱动程序中没有驱动程序

如何修复在Linux内核SPI驱动程序中始终无法通过验证的SPI驱动程序

即使重新安装了VirtualBox,也无法在macOS上启动VirtualBox中带有“未安装内核驱动程序(rc = -1908)”错误的Linux VM

Kubernetes Minikube 驱动程序并在 VM 管理器中运行它?

编写 Linux 键盘驱动程序

Linux设备驱动程序访问控制