我正在编写我的第二个内核模块。作为演示,我正在尝试提供对固件核心的用户空间访问。该演示在 petalinux(专为 Zynq 或 Microblaze 定制的嵌入式操作系统)下进行。我在用户空间和内核模块之间添加了虚拟文件系统挂钩,它似乎在读取和写入时都有效。唯一的问题是,在我的用户应用程序和内核模块之间的某个地方,操作系统将我的请求大小膨胀到 PAGE SIZE (4096)。
一位同事评论说我可能将模块安装为块设备而不是字符设备。这很有意义。我的模块上游的某个人肯定在缓存我的结果(如果我对块驱动程序的理解是准确的,那么这对于硬盘驱动器来说非常有意义),但我们与易失性设备相关联,所以这不是合适的。但是我能找到的所有诊断结果都表明它是作为字符设备安装的......
mknod /dev/myModule **c** (Dynamically specified Major Number) (Zero)
ls -la /dev/myModule
**c**rw-r--r-- 1 root root 252, - Jan 1 01:05 myModule
这是我用来注册虚拟文件 IO 挂钩的模块源......
alloc_chrdev_region (&moduleMajorNumber, 0, 1, "moduleLayerCDMA");
register_chrdev_region (&moduleMajorNumber, 1, "moduleLayerCDMA");
cdevP = cdev_alloc();
cdevP->ops = &moduleLayerCDMA_fileOperations;
cdevP->owner = THIS_MODULE;
cdev_add(cdevP, moduleMajorNumber, 1);
有什么线索吗?